初識YOLOv4
首先從論文中的效果圖可以看出,在平均精度(mAP)和速度上,YOLOv4遠超YOLOv3版本(mAP提升了大約10個點,速度提升了大約12%),在精度差不多的情況下YOLOv4比EfficientDet快兩倍。在MS COCO 數據集實現 43.5% AP (65.7% AP50 ), 速度也更快了,在Tesla V100 GPU上 ∼65 FPS。
目前工業界比較常用的目標檢測算法有SSD、RetinaNet、Mask R-CNN、Cascade R-CNN、YOLOv3等等,而YOLOv4的提出可以說是繼往開來。
而且論文中多次強調,這是一個平衡精度和速度的算法。大的模型,例如Mask R-CNN和Cascade R-CNN在比賽中可以霸榜,但速度太慢。小的模型速度快,但精度又不高。另外,當今的不少模型因爲太大,需要很多GPU進行並行訓練,而YOLOv4可以在一塊普通的GPU(1080Ti)上完成訓練,同時能夠達到實時性,從而能夠在生產環境中部署。
YOLOv4沒有理論創新,而是在原有YOLO目標檢測架構的基礎上增加了近年CNN改進的衆多技術,從數據處理到網絡訓練再到損失函數,遵行“拿來主義”,加上漂亮的工程實踐,打造實現最佳速度與精度平衡的目標檢測新基準!
YOLOv4的主要貢獻
- 設計了強大而高效的檢測模型,任何人都可以用1080Ti和2080Ti訓練這個超快而精準的模型。
- 驗證了很多近幾年SOTA的深度學習目標檢測訓練技巧。
- 修改了很多SOTA的方法,讓它們對但GPU訓練更加高效,例如CBN,PAN,SAM等。
論文中用一張圖總結了近幾年的單階段和雙階段的目標檢測算法及技巧。
作者對現有目標檢測方法進行了總結,無論是one-stage 、two-stage 還是 anchor free 、anchor based,均包含 Input、Backbone 、Neck、Heads(Dense Prediction或者Sparse Prediction)四部分。
目前各部分的主流技術包括:
雙階段的檢測網絡,相當於在一階段的密集檢測上增加了一個稀疏的預測器,或者說一階段網絡是二階段網絡的RPN部分。
論文中將那些增加模型性能,只在訓練階段耗時增多,但不影響推理耗時的技巧稱爲贈品(bag of freebies)。比如數據增廣的方法圖像幾何變換、CutOut、grid mask等,網絡正則化的方法DropOut、DropBlock等,類別不平衡的處理方法、難例挖掘方法、損失函數的設計等。
而那些微微提高了推理耗時,卻顯著提升性能的技巧叫做特價(bag of specials)。比如增大模型感受野的SPP、ASPP、RFB等,引入注意力機制Squeeze-and-Excitation (SE) 、Spatial Attention Module (SAM)等 ,特徵集成方法SFAM , ASFF , BiFPN等,改進的激活函數Swish、Mish等,或者是後處理方法如soft NMS、DIoU NMS等。
bag of freebies
數據增強方法
數據增強方法雖然增加了訓練時間,但可以讓模型泛化性能和魯棒性更好。
下面是常見的增強方法:
- 圖像擾動
- 改變亮度、對比度、飽和度、色調
- 加噪聲
- 隨即縮放
- 隨機裁剪(random crop)
- 翻轉
- 旋轉
- 隨機擦除(random erase)
- Cutout
- MixUp
- CutMix
正則化方法
- Dropout
- DropConnect
- DropBlock
平衡正負樣本的方法
- Focal loss
- OHEM(在線難分樣本挖掘)
迴歸loss的改進
- GIOU
- DIOU
- CIOU
bag of specials
增大感受野的技巧
- SPP
- ASPP
- RFB
注意力機制
- Squeeze-and-Excitation(SE),增加2%計算量(但推理時有10%的速度),可以提升1%的ImageNet top-1精度。
- Spatial Attention Module(SAM),增加0.1%計算量,提升0.5%的top-1準確率。
特徵融合集成
- FPN
- SFAM
- ASFF
- BiFPN(EfficientDet)
激活函數
- ReLU
- LReLU
- PReLU
- ReLU6
- SELU
- Swish
- hard-Swish
後處理非最大值抑制算法
- soft-NMS
- DIoU NMS
YOLOv4的模型詳解
架構選擇
經過綜合考慮計算量和精度,作者最終選擇的架構是:CSPDarknet53 作爲 backbone, SPP 模塊用於增大感受野, PANet 用作 neck, 並仍沿襲 YOLOv3(anchor based) head。
最終YOLOv4使用的技術:
YOLOv4的實驗結果
作者在MS COCO數據集上進行了實驗,結果如下:
每一行分別代表不同的GPU計算結果:
- 在主流的SOTA目標檢測算法中,YOLOv4實現了最佳的速度和精度的平衡。
- 在精度差不多的情況下,YOLOv4的速度往往是最快的。
- 在FPS超過30的實時算法中,YOLOv4是精度最高的。
因爲不同的算法公佈時可能在不同的GPU上進行測試,作者根據不同的GPU(Maxwell/Pascal/Volta)分別列出了YOLOv4與其他算法的更詳細的比較,即Table 8、9、10,幀率大於等於30的用藍底標出。
可見YOLOv4在實時目標檢測算法中精度最高,實現了精度和速度的最佳平衡。