YOLOv4: 雖遲但到,大型調優現場,43mAP/83FPS | 論文速遞
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。
如果本文對你有幫助,麻煩點個贊或在看唄 ~
更多內容請關注 微信公眾號【曉飛的演算法工程筆記】