深度學習圖像目標檢測:讀懂目前工業界最青睞的YOLO V3

You Only Look Once,YOLO.

YOLO 的核心思想:利用整張圖作為網絡的輸入,直接在輸出層迴歸 bounding box(邊界框) 的位置及其所屬的類別。

yolo雖然有三個版本,由於yolo v3在性能和準確性基本上秒殺前兩個版本,甚至官網都沒有給出下載老版本的鏈接。因此,我們僅需讀懂yolo v3模型結構即可。

細節:

卷積的本質是提取圖片的特徵,分類是其他層做的事情。通過劃分單元格做檢測。多尺度訓練。端到端訓練,只使用一個loss funtion。即只關注輸入和輸出使用激活函數:“leaky ReLU”。使用batch normalization作為正則化、加速收斂和避免過擬合的方法。後文簡寫為BN。新的基本單元DarknetConv2D_BN_Leaky,即卷積+BN+leaky ReLU(激活函數)。殘差單元resblock=DarknetConv2D_BN_Leaky+...+DarknetConv2D_BN_Leaky +add殘差單元體resblock_body。zeropadding+DarknetConv2D_BN_Leaky+resblock。anchors的9個參數是用聚類方式獲得,格式為w_1,h_1,w_2,h_2,...w_9,h_9。結構中沒有池化和全連接層,使用步長為2的卷積達到圖片縮小的目的。輸入圖片尺寸固定416*416。主幹網絡是darknet-53,共252層。

結構:

如下圖所示,輸入416*416圖片。經過尺寸為3*3的32個卷積DarknetConv2D_BN_Leaky層。依次經過重複單元依次為1、2、8、8、4的5個殘差體(resblock_body)。殘差體中DarknetConv2D_BN_Leaky單元的步長為2。經過殘差體的2次步長為2的卷積,圖片尺寸縮小為以前的1/32。生成y1、y2、y3三個結果。輸出尺寸分別為13*13*255、26*26*255、52*52*255。輸出深度為255=3*(5+80),每個單元3個box,box有(x, y, w, h, confidence)五個基本參數,coco數據集的種類是80.中間層和後面的某一層的上採樣進行拼接。拼接的操作和殘差層add的操作是不一樣的,拼接會擴充張量的維度,而add只是直接相加不會導致張量維度的改變。

yolo v3 基本結構

實現:

darknet官網

pjreddie.com/darknet/

keras實現yolo3

github.com/qqwweee/keras-yolo3

tensorflow實現yolo3

github.com/wizyoung/YOLOv3_TensorFlow

You Only Live Once.