文章目錄
- 1. 簡介
- 2. YOLOv4整體結構
- 3. Backbone
- 4. Neck
1. 簡介
YOLOv4是YOLOv3的改進版。YOLOv4并不是原YOLO項目的作者。發表于CVPR2020。
改進:
- 主干特征提取網絡:Darknet53 -> CSPDarknet53
- 特征金字塔:SPP,PAN
- 分類回歸層:YOLOv3(未改變)
- 訓練時用到的小技巧:Mosaic數據增強、Label Smoothing平滑、CIOU、學習率余弦退火衰減
- 激活函數:使用Mish激活函數
- …
性能對比
網絡結構:
- Backbone:CSPDarknet53
- Neck:SPP,PAN
- Head:YOLOv3
優化策略:
- Eliminate grid sensitivity
- Mosaic data augmentation
- IoU threshold(match posotive samples)
- Optimizered Anchors
- CIOU
2. YOLOv4整體結構
YOLOv4整體結構
3. Backbone
當輸入是416x416時,特征結構如下:
CSP模塊
對于輸入的特征層,首先將其分為兩部分,part1和part2。
對于part2分支,它會通過一系列的dense block,然后通過transition,再將輸出和part1上的輸出進行融合concat拼接,再通過transition。
在源碼中,對于part1和part2是直接將輸入特征層按照通道方向進行均分操作。
但是在YOLOv4論文中,并不是這樣操作的,如下圖。
CSPDarknet53整體結構
作用:
- 增強CNN的學習能力
- 移除計算瓶頸
- 降低顯存使用
總體來看,每個CSP模塊都有以下特點:
- 相比于輸入,輸出featuremap大小減半。
- 相比于輸入,輸出通道數增倍。
- 經過第一個CBM后,featuremap大小減半,通道數增倍。
CSP1和其他CSP有所不同:
-
經過模塊第二個CBM后,CSP1 featuremap大小和通道數都不變,但是其他模塊featuremap大小不變,通道減半。
-
經過最后一個CBM后,CSP1 featuremap大小不變,通道數減半,但是其他模塊featuremap大小通道數都不變。
4. Neck
yolov4的Neck部分主要使用SPP和PANet模塊。
SPP
SPP(空間金字塔)可以使得多個尺寸特征融合在一起,輸入經過3個maxpool然后concat在一起,maxpool大小分別是13,9和5,yolov4中得SPP模塊。
PANet
PANet的網絡結構由5個核心模塊組成。其中(a)是一個FPN,(b)是PAN增加的自底向上的特征融合層,?是自適應特征池化層,(d)是PANet的bounding box預測頭,(e)是用于預測掩碼的全連接融合層。
PANet是加強版的FPN,通過融合自底向上和自頂向下兩個路徑增加模型的表征能力。