YOLO v3有了PaddlePaddle實現 | 代碼+預訓練模型

YOLO做爲目標檢測領域的創新技術,一經推出就受到開發者的普遍關注。值得一提的是,基於百度自研的開源深度學習平臺PaddlePaddle的YOLO v3實現,參考了論文【Bag of Tricks for Image Classification with Convolutional Neural Networks】,增長了mixup,label_smooth等處理,精度(mAP(0.5:0.95))相比於原做者的實現提升了4.7個絕對百分點,在此基礎上加入synchronize batch normalization, 最終精度相比原做者提升5.9個絕對百分點。咱們將在下文中爲你們詳解實現的具體過程。python

CV領域的核心問題之一就是目標檢測(object detection),它的任務是找出圖像當中全部感興趣的目標(物體),肯定其位置和大小(包含目標的矩形框)並識別出具體是哪一個對象。Faster R-CNN及在其基礎上改進的Mask R-CNN在實例分割、目標檢測、人體關鍵點檢測等任務上都取得了很好的效果,但一般較慢。YOLO 創造性的提出one-stage,就是目標定位和目標識別在一個步驟中完成。算法

因爲整個檢測流水線是單個網絡,所以能夠直接在檢測性能上進行端到端優化,使得基礎YOLO模型能以每秒45幀的速度實時處理圖像,較小網絡的Fast YOLO每秒處理圖像可達到驚人的155幀。YOLO有讓人驚豔的速度,同時也有讓人止步的缺陷:不擅長小目標檢測。而YOLO v3保持了YOLO的速度優點,提高了模型精度,尤爲增強了小目標、重疊遮擋目標的識別,補齊了YOLO的短板,是目前速度和精度均衡的目標檢測網絡。api

YOLO v3檢測原理網絡

YOLO v3 是一階段End2End的目標檢測器。YOLO v3將輸入圖像分紅SS個格子,每一個格子預測B個bounding box,每一個bounding box預測內容包括: Location(x, y, w, h)、Confidence Score和C個類別的機率,所以YOLO v3輸出層的channel數爲SSB(5 + C)。YOLO v3的loss函數也有三部分組成:Location偏差,Confidence偏差和分類偏差。
圖片描述框架

YOLO v3網絡結構ide

YOLO v3 的網絡結構由基礎特徵提取網絡、multi-scale特徵融合層和輸出層組成。函數

一、特徵提取網絡。YOLO v3使用 DarkNet53做爲特徵提取網絡:DarkNet53 基本採用了全卷積網絡,用步長爲2的卷積操做替代了池化層,同時添加了 Residual 單元,避免在網絡層數過深時發生梯度彌散。
二、特徵融合層。爲了解決以前YOLO版本對小目標不敏感的問題,YOLO v3採用了3個不一樣尺度的特徵圖來進行目標檢測,分別爲1313,2626,52*52,用來檢測大、中、小三種目標。特徵融合層選取 DarkNet 產出的三種尺度特徵圖做爲輸入,借鑑了FPN(feature pyramid networks)的思想,經過一系列的卷積層和上採樣對各尺度的特徵圖進行融合。
三、輸出層。一樣使用了全卷積結構,其中最後一個卷積層的卷積核個數是255:3*(80+4+1)=255,3表示一個grid cell包含3個bounding box,4表示框的4個座標信息,1表示Confidence Score,80表示COCO數據集中80個類別的機率。
YOLO v3 網絡結構工具

PaddlePaddle簡介
PaddlePaddle是百度自研的集深度學習框架、工具組件和服務平臺爲一體的開源深度學習平臺,有全面的官方支持的工業級應用模型,涵蓋天然語言處理、計算機視覺、推薦引擎等多個領域,並開放了多個實用的預訓練中文模型。性能

應用案例分享:AI識蟲
紅脂大小蠹是危害超過 35 種松科植物的蛀幹害蟲,自 1998 年首次發現到 2004 年,發生面積超過 52.7 萬平方千米 , 枯死松樹達 600 多萬株。且在持續擴散,給我國林業經濟帶來巨大損失。傳統監測方式依賴具備專業識別能力的工做人員進行實地檢查,專業要求高,工做週期長。北京林業大學、百度、嘉楠、軟通智慧合做面向信息素誘捕器的智能蟲情監測系統,經過PaddlePaddle訓練獲得目標檢測模型YOLO v3,識別紅脂大小蠹蟲,遠程監測病蟲害狀況,識別準確率達到90%,與專業人士水平至關,並將本來須要兩週才能完成的檢查任務,縮短至1小時就能完成。學習

基於PaddlePaddle實際使用
運行樣例代碼須要Paddle Fluid的v.1.4或以上的版本。若是你的運行環境中的PaddlePaddle低於此版本,請根據安裝文檔中的說明來更新PaddlePaddle。

數據準備
在MS-COCO數據集上進行訓練,經過以下方式下載數據集。
圖片描述

模型訓練
安裝cocoapi:訓練前須要首先下載cocoapi。

下載預訓練模型: 本示例提供darknet53預訓練模型,該模型轉換自做者提供的darknet53在ImageNet上預訓練的權重,採用以下命令下載預訓練模型。
sh ./weights/download.sh
經過初始化 --pretrain 加載預訓練模型。同時在參數微調時也採用該設置加載已訓練模型。 請在訓練前確認預訓練模型下載與加載正確,不然訓練過程當中損失可能會出現NAN。
開始訓練: 數據準備完畢後,能夠經過以下的方式啓動訓練。
圖片描述

• 經過設置export CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7指定8卡GPU訓練。
• 可選參數見:python train.py --help

數據讀取器說明
• 數據讀取器定義在reader.py中。
模型設置
• 模型使用了基於COCO數據集生成的9個先驗框:10x13,16x30,33x23,30x61,62x45,59x119,116x90,156x198,373x326
• 檢測過程當中,nms_topk=400, nms_posk=100,nms_thresh=0.45
訓練策略
• 採用momentum優化算法訓練YOLO v3,momentum=0.9。
• 學習率採用warmup算法,前4000輪學習率從0.0線性增長至0.001。在400000,450000輪時使用0.1,0.01乘子進行學習率衰減,最大訓練500000輪。
下圖爲模型訓練結果Train Loss。
Train Loss

模型評估
圖片描述

若訓練時指定--syncbn=True, 模型評估精度以下。
圖片描述

• 注意: 評估結果基於pycocotools評估器,沒有濾除score < 0.05的預測框,其餘框架有此濾除操做會致使精度降低。

模型推斷
模型推斷能夠獲取圖像中的物體及其對應的類別,infer.py是主要執行程序,調用示例以下。
圖片描述

• 經過設置export CUDA_VISIBLE_DEVICES=0指定單卡GPU預測。
模型預測速度(Tesla P40)
圖片描述

YOLO v3 預測可視化

相關文章
相關標籤/搜索