[圖像算法]-快速上手使用PaddleX—Faster RCNN目標(biāo)檢測(cè)

前言

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)變化

  1. 點(diǎn)擊左邊菜單圖標(biāo)的『可視化』屏富;
  2. 設(shè)置logdir,logdir的路徑為訓(xùn)練代碼中save_dir指定的目錄下的vdl_log目錄蛙卤,例如output/faster_rcnn_r50_fpn/vdl_log
  3. 點(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é)果如下所示:


image

5.反饋

有問題歡迎隨時(shí)評(píng)論

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末捂敌,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子既琴,更是在濱河造成了極大的恐慌占婉,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,542評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件甫恩,死亡現(xiàn)場(chǎng)離奇詭異逆济,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)磺箕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門奖慌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人松靡,你說我怎么就攤上這事简僧。” “怎么了雕欺?”我有些...
    開封第一講書人閱讀 158,021評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵岛马,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我屠列,道長(zhǎng)啦逆,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,682評(píng)論 1 284
  • 正文 為了忘掉前任笛洛,我火速辦了婚禮夏志,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘苛让。我一直安慰自己沟蔑,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,792評(píng)論 6 386
  • 文/花漫 我一把揭開白布蝌诡。 她就那樣靜靜地躺著溉贿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪浦旱。 梳的紋絲不亂的頭發(fā)上宇色,一...
    開封第一講書人閱讀 49,985評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音颁湖,去河邊找鬼宣蠕。 笑死,一個(gè)胖子當(dāng)著我的面吹牛甥捺,可吹牛的內(nèi)容都是我干的抢蚀。 我是一名探鬼主播,決...
    沈念sama閱讀 39,107評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼镰禾,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼皿曲!你這毒婦竟也來了唱逢?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,845評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤屋休,失蹤者是張志新(化名)和其女友劉穎坞古,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體劫樟,經(jīng)...
    沈念sama閱讀 44,299評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡痪枫,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,612評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了叠艳。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片奶陈。...
    茶點(diǎn)故事閱讀 38,747評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖附较,靈堂內(nèi)的尸體忽然破棺而出吃粒,到底是詐尸還是另有隱情,我是刑警寧澤翅睛,帶...
    沈念sama閱讀 34,441評(píng)論 4 333
  • 正文 年R本政府宣布声搁,位于F島的核電站,受9級(jí)特大地震影響捕发,放射性物質(zhì)發(fā)生泄漏疏旨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,072評(píng)論 3 317
  • 文/蒙蒙 一扎酷、第九天 我趴在偏房一處隱蔽的房頂上張望檐涝。 院中可真熱鬧,春花似錦法挨、人聲如沸谁榜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽窃植。三九已至,卻和暖如春荐糜,著一層夾襖步出監(jiān)牢的瞬間巷怜,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評(píng)論 1 267
  • 我被黑心中介騙來泰國(guó)打工暴氏, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留延塑,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,545評(píng)論 2 362
  • 正文 我出身青樓答渔,卻偏偏與公主長(zhǎng)得像关带,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子沼撕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,658評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容