重磅更新!YoloV4最新論文!解讀yolov4框架

論文地址和代碼

https://arxiv.org/abs/2004.10934v1

代碼:https://github.com/AlexeyAB/darknet

本篇博文是對YOLOv4論文的翻譯和框架解讀!並且有PDF版本可供下載!——YOLOv4閱讀筆記(附思維導圖)!YOLOv4: Optimal Speed and Accuracy of Object Detection(點擊跳轉)

摘要:

據說有許多功能可以提高卷積神經網絡(CNN)的準確性。 需要在大型數據集上對這些特徵的組合進行實際測試,並對結果進行理論證明。 某些功能僅在某些模型上運行,並且僅在某些問題上運行,或者僅在小型數據集上運行; 而某些功能(例如批歸一化和殘差連接)適用於大多數模型,任務和數據集。 我們假設此類通用功能包括加權殘差連接(WRC),跨階段部分連接(CSP),跨小批量標準化(CmBN),自對抗訓練(SAT)和Mish激活。 我們使用以下新功能:WRC,CSP,CmBN,SAT,Mish激活,馬賽克數據增強,CmBN,DropBlock正則化和CIoU丟失,並結合其中的一些功能來實現最新的結果:43.5%的AP(65.7 在Tesla V100上,MS COCO數據集的實時速度約爲65 FPS。

 核心中的核心:作者將Weighted-Residual-Connections(WRC), Cross-Stage-Partial-connections(CSP), Cross mini-Batch Normalization(CmBN), Self-adversarial-training(SAT),Mish-activation Mosaic data augmentation, DropBlock, CIoU等組合得到了爆炸性的YOLOv4,可以吊打一切的YOLOv4.在MS-COCO數據上:43.5%@AP(65.7%@AP50)同時可以達到65fps@TeslaV100.

 

貢獻

作者設計YOLO的目的之初就是設計一個快速而高效的目標檢測器。該文的貢獻主要有以下幾點:

  • 設計了一種快速而強有力的目標檢測器,它使得任何人僅需一個1080Ti或者2080Ti即可訓練這樣超快且精確的目標檢測器你;

  • (不會翻譯直接上英文)We verify the influence of SOTA bag-of-freebies and bag-of-specials methods of object detection during detector training

  • 作者對SOTA方法進行改進(含CBN、PAN,SAM)以使其更適合單GPU訓練

方法

作者在現有實時網絡的基礎上提出了兩種觀點:

  • 對於GPU而言,在組卷積中採用小數量的groups(1-8),比如CSPResNeXt50/CSPDarknet53;

  • 對於VPU而言,採用組卷積而不採用SE模塊。

網路結構選擇

網絡結構選擇是爲了在輸入分辨率、網絡層數、參數量、輸出濾波器數之間尋求折中。作者研究表明:CSPResNeXt50在分類方面優於CSPDarkNet53,而在檢測方面反而表現要差

網絡主要結構確定了後,下一個目標是選擇額外的模塊以提升感受野、更好的特徵匯聚模塊(如FPN、PAN、ASFF、BiFPN)。對於分類而言最好的模型可能並不適合於檢測,相反,檢測模型需要具有以下特性:

  • 更高的輸入分辨率,爲了更好的檢測小目標;

  • 更多的層,爲了具有更大的感受野;

  • 更多的參數,更大的模型可以同時檢測不同大小的目標。

一句話就是:選擇具有更大感受野、更大參數的模型作爲backbone。下圖給出了不同backbone的上述信息對比。從中可以看到:CSPResNeXt50僅僅包含16個卷積層,其感受野爲425x425,包含20.6M參數;而CSPDarkNet53包含29個卷積層,725x725的感受野,27.6M參數。這從理論與實驗角度表明:CSPDarkNet53更適合作爲檢測模型的Backbone

在CSPDarkNet53基礎上,作者添加了SPP模塊,因其可以提升模型的感受野、分離更重要的上下文信息、不會導致模型推理速度的下降;與此同時,作者還採用PANet中的不同backbone級的參數匯聚方法替代FPN。

最終的模型爲:CSPDarkNet53+SPP+PANet(path-aggregation neck)+YOLOv3-head = YOLOv4.

Tricks選擇

爲更好的訓練目標檢測模型,CNN模型通常具有以下模塊:

  • Activations:ReLU、Leaky-ReLU、PReLU、ReLU6、SELU、Swish or Mish

  • Bounding box regression Loss:MSE、IoU、GIoU、CIoU、DIoU

  • Data Augmentation:CutOut、MixUp、CutMix

  • Regularization:DropOut、DropPath、Spatial DropOut、DropBlock

  • Normalization:BN、SyncBn、FRN、CBN

  • Skip-connections:Residual connections, weighted residual connections, Cross stage partial connections

作者從上述模塊中選擇如下:激活函數方面選擇Mish;正則化方面選擇DropBlock;由於聚焦在單GPU,故而未考慮SyncBN。

其他改進策略

爲使得所涉及的檢測器更適合於單GPU,作者還進行了其他幾項額外設計與改進:

  • 引入一種新的數據增廣方法:Mosaic與自對抗訓練;

  • 通過GA算法選擇最優超參數;

  • 對現有方法進行改進以更適合高效訓練和推理:改進SAM、改進PAN,CmBN。

 

 

YOLOv4

總而言之,YOLOv4包含以下信息:

  • Backbone:CSPDarkNet53

  • Neck:SPP,PAN

  • Head:YOLOv3

  • Tricks(backbone):CutMix、Mosaic、DropBlock、Label Smoothing

  • Modified(backbone): Mish、CSP、MiWRC

  • Tricks(detector):CIoU、CMBN、DropBlock、Mosaic、SAT、Eliminate grid sensitivity、Multiple Anchor、Cosine Annealing scheduler、Random training shape

  • Modified(tector):Mish、SPP、SAM、PAN、DIoU-NMS

Experiments

模型的好壞最終還是要通過實驗來驗證,直接上對比表:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章