YOLOv4在速度和准確率上都十分優異,作者使用了大量的trick,論文也寫得很扎實,在工程還是學術上都有十分重要的意義,既可以學習如何調參,也可以了解目標檢測的trick。
來源:曉飛的算法工程筆記 公眾號
論文: YOLOv4: Optimal Speed and Accuracy of Object Detection
Introduction
論文提出YOLOv4,從圖1的結果來看,相對於YOLOv3在准確率上提升了近10個點,然而速度並幾乎沒有下降,論文主要貢獻如下:
- 提出速度更快、精度更好的檢測模型,僅需要單張1080Ti或2080Ti即可完成訓練。
- 驗證了目前SOTA的Bag-ofFreebies(不增加推理成本的trick)和Bag-of-Specials(增加推理成本的trick)的有效性。
- 修改了SOTA方法,讓其更高效且更合適地在單卡進行訓練,包括CBN、PAN、SAM等。
Methodology
Selection of architecture
對檢測模型來說,分類最優的主干網絡不一定是最合適的,適用於目標檢測的主干網絡需滿足以下要求:
- 高輸入分辨率,提高小物體的檢測准確率。
- 更多的層,提高感受域來適應輸入的增加。
- 更多的參數,提高檢測單圖多尺寸目標的能力。
理論來講,應該選擇感受域更大且參數了更大的模型作為主干網絡,表1對比了三種SOTA主干網絡的,可以看到CSPDarknet53的感受域、參數量以及速度都是最好的,故選其為主干網絡。
另外,使用不同大小的感受域有以下好處:
- 匹配物體大小,可以觀察完整的物體。
- 匹配網絡大小,可以觀察物體的上下文信息。
- 超過網絡的大小,增加點與最終激活之間的連接數。
為此,YOLOv4加入了SPP block,能夠顯著地改善感受域大小,而且速度幾乎沒有什么下降。
另外,使用PANet替換FPN來進行多通道特征的融合。
最終,YOLOv4選擇CSPDarknet53作為主干網絡,配合SPP模塊,PANet通道融合以及YOLOv3的anchor based head。
Selection of BoF and BoS
目前比較有效的目標檢測提升的trick:
- 激活函數: ReLU, leaky-ReLU, parametric-ReLU, ReLU6, SELU, Swish, or Mish。
- bbox回歸損失: MSE, IoU, GIoU, CIoU, DIoU
- 數據增強: CutOut, MixUp, CutMix
- 正則化方法: DropOut, DropPath, Spatial DropOut, or DropBlock
- 歸一化方法: Batch Normalization(BN), Cross-GPU Batch Normalization(CGBN or SyncBN), Filter Response Normalization (FRN), or Cross-Iteration Batch Normalization(CBN)
由於PReLU和SELU難以訓練,並且ReLU6是專門為量化網絡設計的,從激活函數中去除這幾種。而在正則化方法中,DropBlock的效果是最優的。對於歸一化方法的選擇,由於需要單卡訓練,因此不考慮SyncBN。
Additional improvements
為了讓模型能更好地在單卡進行訓練,做了以下的改進:
- 提出新的數據增強方法Mosaic和Self-Adversarial Training (SAT)。
- 使用遺傳算法選擇最優的超參數。
- 修改目前的方法來讓訓練和檢測更有效,包括改進的SAM,改進的PAN以及 Cross mini-Batch Normalization (CmBN)
Mosaic是新的數據增強方法,同時融合4張訓練圖片,CutMix僅融合2張圖片,使得目標的檢測范圍超出其正常的上下文,另外BN每次統計4張圖片,這能顯著地減少對大mini-batch的需要。
Self-Adversarial Training(SAT)也提供新的數據增強手段,分為兩個前向反向階段。在第一階段,先對圖片進行前向計算,然后通過反向傳播修改圖片的像素,注意這里不修改網絡的權重,通過這種方式,網絡進行了一次對抗式訓練,制造出沒有目標的假象。在第二階段,對修改后的圖片進行正常的訓練。
CmBN是改進版的CBN,僅統計single-batch中的mini-batch,如圖4所示,假設t-3~t為single-batch中的mini-batch,若干single-batch中包含單個mini-batch,則CmBN與BN一樣。
將SAM從spitial-wise attention修改為point-wise attention,即輸入和輸出的大小一致。
將PAN的shortcut連接方法,從相加改為concate。
YOLOv4
YOLOv4包含:
- Backbone:CSPDarknet53
- Neck:SPP,PAN
- Head:YOLOv3
YOLO v4使用:
- 主干網絡的BoF(Bag of Freebies):CutMix和Mosaic數據增強, DropBlock正則化, 標簽平滑(Class label smoothing)
- 主干網絡的BoS(Bag of Specials):Mish激活, Cross-stage partial connections (CSPNet), Multiinput weighted residual connections(MiWRC)
- 檢測端的BoF(Bag of Freebies):CIoU-loss, CmBN, DropBlock正則化, Mosaic數據增強, Self-Adversarial Training, 去除邊框敏感性(Eliminate grid sensitivity,見實驗部分的解釋), 多anchor回歸(之前只選最大的), 余弦退火學習率調整(Cosine annealing scheduler), 使用遺傳算法最優化超參數, 隨機輸入大小
- 檢測端的BoS(Bag of Specials):Mish激活, SPP-block, SAM-block, PAN通道融合, DIoU-NMS
Experiments
Influence of different features on Classifier training
CutMix、Mosaic數據增強和標簽平衡(Class label smoothing)比較有效。
Influence of different features on Detector training
表4對比的BoF如下:
- S:去除邊框敏感性,$b_x=\sigma(t_x) +c_x$,之前的中心點回歸與anchor的邊相關,當需要趨近$c_x$或$c_x+1$時,需要很大的$|t_x|$,為此對sigmoid添加一個大於1的因子來減少這個影響
- M:Mosaic數據增強
- IT:IoU閾值,使用大於IoU閾值的anchor進行訓練,之前好像只選最大的
- GA:使用遺傳算法進行最優超參選擇
- LS:標簽平滑
- CNB:論文提出的CmBN
- CA:使用余弦退火(Cosine annealing scheduler)進行學習率下降
- DM:動態mini-batch大小,小分辨率時增加mini-batch
- OA:使用最優的anchors
- GIoU, CIoU, DIoU, MSE:bbox損失函數
論文也對比了檢測端的BoS,從結果來看,SPP、PAN和SAM同時使用時效果最好。
Influence of different backbones and pretrained weightings on Detector training
論文研究了不同主干網絡對檢測准確率的影響,可以看到CSPDarknet53能更好地適應各種改進。
Influence of different mini-batch size on Detector training
論文對比了不同的mini-batch大小下的檢測准確率,在加入BoF和BoS訓練策略后,mini-batch的改變幾乎對准確率沒有影響。
Results
表8、9和10分別為Maxwell GPU、Pascal GPU和Volta GPU上的實驗結果,從大量的實驗對比來看,YOLOv4在速度和准確率上都十分耐看。
CONCLUSION
YOLOv4在速度和准確率上都十分優異,作者使用了大量的trick,論文也寫得很扎實,在工程還是學術上都有十分重要的意義,既可以學習如何調參,也可以了解目標檢測的trick。
如果本文對你有幫助,麻煩點個贊或在看唄~
更多內容請關注 微信公眾號【曉飛的算法工程筆記】