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只是直接相加不會導致張量維度的改變。
實現:
darknet官網
pjreddie.com/darknet/
keras實現yolo3
github.com/qqwweee/keras-yolo3
tensorflow實現yolo3
github.com/wizyoung/YOLOv3_TensorFlow
You Only Live Once.
閱讀更多 技術信仰 的文章