YOLO作為目標檢測領域的創(chuàng)新技術,一經(jīng)推出就受到開發(fā)者的廣泛關注。值得一提的是,基于百度自研的開源深度學習平臺PaddlePaddle的YOLO v3實現(xiàn),參考了論文【Bag of Tricks for Image Classification with Convolutional Neural Networks】,增加了mixup,label_smooth等處理,精度(mAP(0.5:0.95))相比于原作者的實現(xiàn)提高了4.7個絕對百分點,在此基礎上加入synchronize batch normalization, 最終精度相比原作者提高5.9個絕對百分點。我們將在下文中為大家詳解實現(xiàn)的具體過程。
CV領域的核心問題之一就是目標檢測(object detection),它的任務是找出圖像當中所有感興趣的目標(物體),確定其位置和大小(包含目標的矩形框)并識別出具體是哪個對象。Faster R-CNN及在其基礎上改進的Mask R-CNN在實例分割、目標檢測、人體關鍵點檢測等任務上都取得了很好的效果,但通常較慢。YOLO 創(chuàng)造性的提出one-stage,就是目標定位和目標識別在一個步驟中完成。
由于整個檢測流水線是單個網(wǎng)絡,因此可以直接在檢測性能上進行端到端優(yōu)化,使得基礎YOLO模型能以每秒45幀的速度實時處理圖像,較小網(wǎng)絡的Fast YOLO每秒處理圖像可達到驚人的155幀。YOLO有讓人驚艷的速度,同時也有讓人止步的缺陷:不擅長小目標檢測。而YOLO v3保持了YOLO的速度優(yōu)勢,提升了模型精度,尤其加強了小目標、重疊遮擋目標的識別,補齊了YOLO的短板,是目前速度和精度均衡的目標檢測網(wǎng)絡。
YOLO v3檢測原理
YOLO v3 是一階段End2End的目標檢測器。YOLO v3將輸入圖像分成S*S個格子,每個格子預測B個bounding box,每個bounding box預測內(nèi)容包括: Location(x, y, w, h)、Confidence Score和C個類別的概率,因此YOLO v3輸出層的channel數(shù)為S*S*B*(5 + C)。YOLO v3的loss函數(shù)也有三部分組成:Location誤差,Confidence誤差和分類誤差。
圖:YOLO v3檢測原理
YOLO v3網(wǎng)絡結(jié)構(gòu)
YOLO v3 的網(wǎng)絡結(jié)構(gòu)由基礎特征提取網(wǎng)絡、multi-scale特征融合層和輸出層組成。
1、特征提取網(wǎng)絡。YOLO v3使用 DarkNet53作為特征提取網(wǎng)絡:DarkNet53 基本采用了全卷積網(wǎng)絡,用步長為2的卷積操作替代了池化層,同時添加了 Residual 單元,避免在網(wǎng)絡層數(shù)過深時發(fā)生梯度彌散。
2、特征融合層。為了解決之前YOLO版本對小目標不敏感的問題,YOLO v3采用了3個不同尺度的特征圖來進行目標檢測,分別為13*13,26*26,52*52,用來檢測大、中、小三種目標。特征融合層選取 DarkNet 產(chǎn)出的三種尺度特征圖作為輸入,借鑒了FPN(feature pyramid networks)的思想,通過一系列的卷積層和上采樣對各尺度的特征圖進行融合。
3、輸出層。同樣使用了全卷積結(jié)構(gòu),其中最后一個卷積層的卷積核個數(shù)是255:3*(80+4+1)=255,3表示一個grid cell包含3個bounding box,4表示框的4個坐標信息,1表示Confidence Score,80表示COCO數(shù)據(jù)集中80個類別的概率。
圖:YOLO v3 網(wǎng)絡結(jié)構(gòu)
PaddlePaddle簡介
PaddlePaddle是百度自研的集深度學習框架、工具組件和服務平臺為一體的技術領先、功能完備的開源深度學習平臺,有全面的官方支持的工業(yè)級應用模型,涵蓋自然語言處理、計算機視覺、推薦引擎等多個領域,并開放多個領先的預訓練中文模型。目前,已經(jīng)被中國企業(yè)廣泛使用,并擁有活躍的開發(fā)者社區(qū)。
應用案例—AI識蟲
紅脂大小蠹是危害超過 35 種松科植物的蛀干害蟲,自 1998 年首次發(fā)現(xiàn)到 2004 年,發(fā)生面積超過 52.7 萬平方公里 , 枯死松樹達 600 多萬株。且在持續(xù)擴散,給我國林業(yè)經(jīng)濟帶來巨大損失。傳統(tǒng)監(jiān)測方式依賴具有專業(yè)識別能力的工作人員進行實地檢查,專業(yè)要求高,工作周期長。北京林業(yè)大學、百度、嘉楠、軟通智慧合作面向信息素誘捕器的智能蟲情監(jiān)測系統(tǒng),通過PaddlePaddle訓練得到目標檢測模型YOLO v3,識別紅脂大小蠹蟲,遠程監(jiān)測病蟲害情況,識別準確率達到90%,與專業(yè)人士水平相當,并將原本需要兩周才能完成的檢查任務,縮短至1小時就能完成。
基于PaddlePaddle實戰(zhàn)
運行樣例代碼需要Paddle Fluid的v.1.4或以上的版本。如果你的運行環(huán)境中的PaddlePaddle低于此版本,請根據(jù)安裝文檔中的說明來更新PaddlePaddle。
數(shù)據(jù)準備
在MS-COCO數(shù)據(jù)集上進行訓練,通過如下方式下載數(shù)據(jù)集。
cd dataset/coco
./download.sh
數(shù)據(jù)目錄結(jié)構(gòu)如下:
dataset/coco/
├── annotations
│ ├── instances_train2014.json
│ ├── instances_train2017.json
│ ├── instances_val2014.json
│ ├── instances_val2017.json
| ...
├── train2017
│ ├── 000000000009.jpg
│ ├── 000000580008.jpg
| ...
├── val2017
│ ├── 000000000139.jpg
│ ├── 000000000285.jpg
| ...
模型訓練
安裝cocoapi:訓練前需要首先下載cocoapi。
git clone https://github.com/cocodataset/cocoapi.git
cd cocoapi/PythonAPI
# if cython is not installed
pip install Cython
# Install into global site-packages
make install
# Alternatively, if you do not have permissions or prefer
# not to install the COCO API into global site-packages
python2 setup.py install --user
下載預訓練模型: 本示例提供darknet53預訓練模型,該模型轉(zhuǎn)換自作者提供的darknet53在ImageNet上預訓練的權(quán)重,采用如下命令下載預訓練模型。
sh ./weights/download.sh
通過初始化 --pretrain 加載預訓練模型。同時在參數(shù)微調(diào)時也采用該設置加載已訓練模型。 請在訓練前確認預訓練模型下載與加載正確,否則訓練過程中損失可能會出現(xiàn)NAN。
開始訓練: 數(shù)據(jù)準備完畢后,可以通過如下的方式啟動訓練。
python train.py \
--model_save_dir=output/ \
--pretrain=${path_to_pretrain_model}
--data_dir=${path_to_data}
• 通過設置export CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7指定8卡GPU訓練。
• 可選參數(shù)見:?python train.py --help
數(shù)據(jù)讀取器說明:
• 數(shù)據(jù)讀取器定義在reader.py中。
模型設置:
• 模型使用了基于COCO數(shù)據(jù)集生成的9個先驗框:10x13,16x30,33x23,30x61,62x45,59x119,116x90,156x198,373x326
• 檢測過程中,nms_topk=400, nms_posk=100,nms_thresh=0.45
訓練策略:
• 采用momentum優(yōu)化算法訓練YOLO v3,momentum=0.9。
• 學習率采用warmup算法,前4000輪學習率從0.0線性增加至0.001。在400000,450000輪時使用0.1,0.01乘子進行學習率衰減,最大訓練500000輪。
下圖為模型訓練結(jié)果Train Loss。
圖:Train Loss
模型評估
模型評估是指對訓練完畢的模型評估各類性能指標。本示例采用COCO官方評估。
eval.py是評估模塊的主要執(zhí)行程序,調(diào)用示例如下:
python eval.py \
--dataset=coco2017 \
--weights=${path_to_weights} \
• 通過設置export CUDA_VISIBLE_DEVICES=0指定單卡GPU評估。
若訓練時指定--syncbn=False, 模型評估精度如下。
若訓練時指定--syncbn=True, 模型評估精度如下。
• 注意: 評估結(jié)果基于pycocotools評估器,沒有濾除score < 0.05的預測框,其他框架有此濾除操作會導致精度下降。
模型推斷
模型推斷可以獲取圖像中的物體及其對應的類別,infer.py是主要執(zhí)行程序,調(diào)用示例如下。
python infer.py \
--dataset=coco2017 \
--weights=${path_to_weights} \
--image_path=data/COCO17/val2017/ \
--image_name=000000000139.jpg \
--draw_thresh=0.5
• 通過設置export CUDA_VISIBLE_DEVICES=0指定單卡GPU預測。
模型預測速度(Tesla P40)
圖:YOLO v3 預測可視化
免責聲明:本網(wǎng)站內(nèi)容主要來自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準確性及可靠性,但不保證有關資料的準確性及可靠性,讀者在使用前請進一步核實,并對任何自主決定的行為負責。本網(wǎng)站對有關資料所引致的錯誤、不確或遺漏,概不負任何法律責任。任何單位或個人認為本網(wǎng)站中的網(wǎng)頁或鏈接內(nèi)容可能涉嫌侵犯其知識產(chǎn)權(quán)或存在不實內(nèi)容時,應及時向本網(wǎng)站提出書面權(quán)利通知或不實情況說明,并提供身份證明、權(quán)屬證明及詳細侵權(quán)或不實情況證明。本網(wǎng)站在收到上述法律文件后,將會依法盡快聯(lián)系相關文章源頭核實,溝通刪除相關內(nèi)容或斷開相關鏈接。