前言
PaddleX簡(jiǎn)介:PaddleX是飛槳全流程開發(fā)工具哀峻,集飛槳核心框架暖呕、模型庫挂签、工具及組件等深度學(xué)習(xí)開發(fā)所需全部能力于一身,打通深度學(xué)習(xí)開發(fā)全流程凯力,并提供簡(jiǎn)明易懂的Python API茵瘾,方便用戶根據(jù)實(shí)際生產(chǎn)需求進(jìn)行直接調(diào)用或二次開發(fā),為開發(fā)者提供飛槳全流程開發(fā)的最佳實(shí)踐咐鹤。目前拗秘,該工具代碼已開源于GitHub,同時(shí)可訪問PaddleX在線使用文檔祈惶,快速查閱讀使用教程和API文檔說明雕旨。
PaddleX代碼GitHub鏈接:https://github.com/PaddlePaddle/PaddleX/tree/develop
PaddleX文檔鏈接:https://paddlex.readthedocs.io/zh_CN/develop/index.html
PaddleX官網(wǎng)鏈接:https://www.paddlepaddle.org.cn/paddle/paddlex
PaddleX用戶QQ群: 1045148026
Faster RCNN簡(jiǎn)介
Faster RCNN是一個(gè)目標(biāo)檢測(cè)模型扮匠,將特征抽取、候選框提取凡涩、bounding box回歸棒搜、分類集成在了一個(gè)網(wǎng)絡(luò)中,使得檢測(cè)速度和精度有所提升活箕。本文檔在一個(gè)小數(shù)據(jù)集上展示了如何通過PaddleX進(jìn)行訓(xùn)練和預(yù)測(cè)力麸。
1.安裝PaddleX
! pip install paddlex -i https://mirror.baidu.com/pypi/simple
2.準(zhǔn)備昆蟲目標(biāo)檢測(cè)數(shù)據(jù)集
! wget https://bj.bcebos.com/paddlex/datasets/insect_det.tar.gz
! tar xzf insect_det.tar.gz
3.模型訓(xùn)練
3.1 配置GPU
# 設(shè)置使用0號(hào)GPU卡(如無GPU,執(zhí)行此代碼后仍然會(huì)使用CPU訓(xùn)練模型)
import matplotlib
matplotlib.use('Agg')
import os
os.environ['CUDA_VISIBLE_DEVICES'] = '0'
import paddlex as pdx
3.2 定義圖像處理流程transforms
定義數(shù)據(jù)處理流程讹蘑,其中訓(xùn)練和測(cè)試需分別定義末盔,訓(xùn)練過程包括了部分測(cè)試過程中不需要的數(shù)據(jù)增強(qiáng)操作,如在本示例中座慰,訓(xùn)練過程使用了RandomHorizontalFlip
數(shù)據(jù)增強(qiáng)方式陨舱,更多圖像預(yù)處理流程transforms的使用可參見paddlex.det.transforms。
from paddlex.det import transforms
train_transforms = transforms.Compose([
transforms.RandomHorizontalFlip(),
transforms.Normalize(),
transforms.ResizeByShort(short_size=800, max_size=1333),
transforms.Padding(coarsest_stride=32)
])
eval_transforms = transforms.Compose([
transforms.Normalize(),
transforms.ResizeByShort(short_size=800, max_size=1333),
transforms.Padding(coarsest_stride=32),
])
3.3 定義數(shù)據(jù)集Dataset
目標(biāo)檢測(cè)可使用VOCDetection
格式和COCODetection
兩種數(shù)據(jù)集版仔,此處由于數(shù)據(jù)集為VOC格式游盲,因此采用pdx.datasets.VOCDetection
來加載數(shù)據(jù)集,該接口的介紹可參見文檔paddlex.datasets.VOCDetection蛮粮。
train_dataset = pdx.datasets.VOCDetection(
data_dir='insect_det',
file_list='insect_det/train_list.txt',
label_list='insect_det/labels.txt',
transforms=train_transforms,
shuffle=True)
eval_dataset = pdx.datasets.VOCDetection(
data_dir='insect_det',
file_list='insect_det/val_list.txt',
label_list='insect_det/labels.txt',
transforms=eval_transforms)
3.4 模型開始訓(xùn)練
使用本數(shù)據(jù)集在P40上訓(xùn)練益缎,如有GPU,模型的訓(xùn)練過程預(yù)估為9分鐘左右然想;如無GPU莺奔,則預(yù)估為6小時(shí)左右。更多訓(xùn)練模型的參數(shù)可參見文檔paddlex.det.FasterRCNN变泄。模型訓(xùn)練過程每間隔save_interval_epochs輪會(huì)保存一次模型在save_dir目錄下令哟,同時(shí)在保存的過程中也會(huì)在驗(yàn)證數(shù)據(jù)集上計(jì)算相關(guān)指標(biāo),具體相關(guān)日志參見文檔妨蛹。
AIStudio使用VisualDL查看訓(xùn)練過程中的指標(biāo)變化
- 點(diǎn)擊左邊菜單圖標(biāo)的『可視化』屏富;
- 設(shè)置logdir,logdir的路徑為訓(xùn)練代碼中
save_dir
指定的目錄下的vdl_log目錄蛙卤,例如output/faster_rcnn_r50_fpn/vdl_log
- 點(diǎn)擊下方『啟動(dòng)VisualDL服務(wù)按鈕』狠半,再『打開VisualDL』即可
num_classes = len(train_dataset.labels) + 1
model = pdx.det.FasterRCNN(num_classes=num_classes)
model.train(
num_epochs=12,
train_dataset=train_dataset,
train_batch_size=2,
eval_dataset=eval_dataset,
learning_rate=0.0025,
lr_decay_epochs=[8, 11],
save_interval_epochs=1,
save_dir='output/faster_rcnn_r50_fpn',
use_vdl=True)
4.模型預(yù)測(cè)
使用模型進(jìn)行預(yù)測(cè),同時(shí)使用pdx.det.visualize將結(jié)果可視化颤难,可視化結(jié)果將保存到./output/faster_rcnn_r50_fpn下神年,其中threshold代表Box的置信度閾值,將Box置信度低于該閾值的框過濾不進(jìn)行可視化行嗤。
此處請(qǐng)?jiān)贏IStudio Notebook頁面的右上角菜單瘤袖,選擇重啟執(zhí)行器,以釋放顯存昂验,重新加載訓(xùn)練好的模型
import paddlex as pdx
model = pdx.load_model('output/faster_rcnn_r50_fpn/best_model')
image_name = 'insect_det/JPEGImages/0216.jpg'
result = model.predict(image_name)
pdx.det.visualize(image_name, result, threshold=0.5, save_dir='./output/faster_rcnn_r50_fpn')
可視化結(jié)果如下所示:
5.反饋
有問題歡迎隨時(shí)評(píng)論