重磅!就在剛剛,吊打一切的 YOLOv4 開源了!
Tips:
◎作者系極市原創(chuàng)作者計(jì)劃特約作者Happy歡迎大家聯(lián)系極市小編(微信ID:fengcall19)加入極市原創(chuàng)作者行列
早上刷到Y(jié)OLOv4之時(shí),非常不敢相信這是真的!
paper:https://arxiv.org/pdf/2004.10934.pdf,
code:https://github.com/AlexeyAB/darknet
核心中的核心:作者將
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數(shù)據(jù)上:43.5%@AP(65.7%@AP50)同時(shí)可以達(dá)到65fps@TeslAV100.

Contribution
作者設(shè)計(jì)YOLO的目的之初就是設(shè)計(jì)一個(gè)快速而高效的目標(biāo)檢測器。該文的貢獻(xiàn)主要有以下幾點(diǎn):
設(shè)計(jì)了一種快速而強(qiáng)有力的目標(biāo)檢測器,它使得任何人僅需一個(gè)1080Ti或者2080Ti即可訓(xùn)練這樣超快且精確的目標(biāo)檢測器你;
(不會(huì)翻譯直接上英文)We verify the influence of SOTA bag-of-freebies and bag-of-specials methods of object detection during detector training
作者對SOTA方法進(jìn)行改進(jìn)(含CBN、PAN,SAM)以使其更適合單GPU訓(xùn)練
Method
作者在現(xiàn)有實(shí)時(shí)網(wǎng)絡(luò)的基礎(chǔ)上提出了兩種觀點(diǎn):
對于GPU而言,在組卷積中采用小數(shù)量的groups(1-8),比如CSPResNeXt50/CSPDarknet53;
對于VPU而言,采用組卷積而不采用SE模塊。
網(wǎng)路結(jié)構(gòu)選擇
網(wǎng)絡(luò)結(jié)構(gòu)選擇是為了在輸入分辨率、網(wǎng)絡(luò)層數(shù)、參數(shù)量、輸出濾波器數(shù)之間尋求折中。作者研究表明:CSPResNeXt50在分類方面優(yōu)于CSPDarkNet53,而在檢測方面反而表現(xiàn)要差。
網(wǎng)絡(luò)主要結(jié)構(gòu)確定了后,下一個(gè)目標(biāo)是選擇額外的模塊以提升感受野、更好的特征匯聚模塊(如FPN、PAN、ASFF、BiFPN)。對于分類而言最好的模型可能并不適合于檢測,相反,檢測模型需要具有以下特性:
更高的輸入分辨率,為了更好的檢測小目標(biāo);
更多的層,為了具有更大的感受野;
更多的參數(shù),更大的模型可以同時(shí)檢測不同大小的目標(biāo)。
一句話就是:選擇具有更大感受野、更大參數(shù)的模型作為backbone。下圖給出了不同backbone的上述信息對比。從中可以看到:CSPResNeXt50僅僅包含16個(gè)卷積層,其感受野為425x425,包含20.6M參數(shù);而CSPDarkNet53包含29個(gè)卷積層,725x725的感受野,27.6M參數(shù)。這從理論與實(shí)驗(yàn)角度表明:CSPDarkNet53更適合作為檢測模型的Backbone。

在CSPDarkNet53基礎(chǔ)上,作者添加了SPP模塊,因其可以提升模型的感受野、分離更重要的上下文信息、不會(huì)導(dǎo)致模型推理速度的下降;與此同時(shí),作者還采用PANet中的不同backbone級(jí)的參數(shù)匯聚方法替代FPN。
最終的模型為:CSPDarkNet53+SPP+PANet(path-aggregation neck)+YOLOv3-head = YOLOv4.
Tricks選擇
為更好的訓(xùn)練目標(biāo)檢測模型,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
作者從上述模塊中選擇如下:激活函數(shù)方面選擇Mish;正則化方面選擇DropBlock;由于聚焦在單GPU,故而未考慮SyncBN。
其他改進(jìn)策略
為使得所涉及的檢測器更適合于單GPU,作者還進(jìn)行了其他幾項(xiàng)額外設(shè)計(jì)與改進(jìn):
引入一種新的數(shù)據(jù)增廣方法:Mosaic與自對抗訓(xùn)練;
通過GA算法選擇最優(yōu)超參數(shù);
對現(xiàn)有方法進(jìn)行改進(jìn)以更適合高效訓(xùn)練和推理:改進(jìn)SAM、改進(jìn)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
模型的好壞最終還是要通過實(shí)驗(yàn)來驗(yàn)證,直接上對比表:


更多的消融實(shí)驗(yàn)分析如下:




各位小伙伴還是趕緊去研究一下原文吧~