目標(biāo)檢測(cè)算法YOLOv4詳解
一句話總結(jié):速度差不多的精度碾壓,精度差不多的速度碾壓!
YOLOv4是精度速度最優(yōu)平衡, 各種調(diào)優(yōu)手段是真香,本文主要從以下幾個(gè)方面進(jìn)行闡述:
YOLOv4介紹 YOLOv4框架原理 BackBone訓(xùn)練策略 BackBone推理策略 檢測(cè)頭訓(xùn)練策略 檢測(cè)頭推理策略
1.YOLOv4介紹
YOLOV4其實(shí)是一個(gè)結(jié)合了大量前人研究技術(shù),加以組合并進(jìn)行適當(dāng)創(chuàng)新的算法,實(shí)現(xiàn)了速度和精度的完美平衡。可以說有許多技巧可以提高卷積神經(jīng)網(wǎng)絡(luò)(CNN)的準(zhǔn)確性,但是某些技巧僅適合在某些模型上運(yùn)行,或者僅在某些問題上運(yùn)行,或者僅在小型數(shù)據(jù)集上運(yùn)行;我們來碼一碼這篇文章里作者都用了哪些調(diào)優(yōu)手段:加權(quán)殘差連接(WRC),跨階段部分連接(CSP),跨小批量標(biāo)準(zhǔn)化(CmBN),自對(duì)抗訓(xùn)練(SAT),Mish激活,馬賽克數(shù)據(jù)增強(qiáng),CmBN,DropBlock正則化,CIoU Loss等等。經(jīng)過一系列的堆料,終于實(shí)現(xiàn)了目前最優(yōu)的實(shí)驗(yàn)結(jié)果:43.5%的AP(在Tesla V100上,MS COCO數(shù)據(jù)集的實(shí)時(shí)速度約為65FPS)。

YOLOv4的貢獻(xiàn)如下:
開發(fā)了一個(gè)高效、強(qiáng)大的目標(biāo)檢測(cè)模型。它使每個(gè)人都可以使用 1080 Ti或2080 TiGPU來訓(xùn)練一個(gè)超級(jí)快速和準(zhǔn)確的目標(biāo)探測(cè)器。驗(yàn)證了在檢測(cè)器訓(xùn)練過程中,最先進(jìn)的 Bag-of-Freebies和Bag-of-Specials的目標(biāo)檢測(cè)方法的影響。修改了最先進(jìn)的方法,使其更有效,更適合于單 GPU訓(xùn)練,包括CBN、PAN、SAM等。
總之一句話:速度差不多的精度碾壓;精度差不多的速度碾壓。
YOLOV4論文: https://arxiv.org/pdf/2004.10934.pdf
YOLOV4代碼: https://github.com/AlexeyAB/darknet
2.YOLOv4框架原理
我們主要從通用框架,CSPDarknet53,SPP結(jié)構(gòu),PAN結(jié)構(gòu)和檢測(cè)頭YOLOv3出發(fā),來一起學(xué)習(xí)了解下YOLOv4框架原理。
2.1 目標(biāo)檢測(cè)器通用框架
目前檢測(cè)器通常可以分為以下幾個(gè)部分,不管是two-stage還是one-stage都可以劃分為如下結(jié)構(gòu),只不過各類目標(biāo)檢測(cè)算法設(shè)計(jì)改進(jìn)側(cè)重在不同位置:

如上圖,除了輸入,一般one-stage的目標(biāo)檢測(cè)算法通常由提取特征的backbone,傳輸?shù)綑z測(cè)網(wǎng)絡(luò)的Neck部分和負(fù)責(zé)檢測(cè)的Head部分。而two-stage的算法通常還包括空間預(yù)測(cè)部分。網(wǎng)絡(luò)中常用的模塊為:
Input: 圖像,圖像金字塔等 Backbone: VGG16,Resnet-50,ResNeXt-101,Darknet53,…… Neck: FPN,PANet,Bi-FPN,…… Head: Dense Prediction:RPN,YOLO,SSD,RetinaNet,FCOS,…… Head: Sparse Prediction:Faster RCNN,Fast RCNN,R-CNN,……
而作為one-stage的YOLO網(wǎng)絡(luò)主要由三個(gè)主要組件組成:
Backbone -在不同圖像細(xì)粒度上聚合并形成圖像特征的卷積神經(jīng)網(wǎng)絡(luò)。 Neck:一系列混合和組合圖像特征的網(wǎng)絡(luò)層,并將圖像特征傳遞到預(yù)測(cè)層。 Head:對(duì)圖像特征進(jìn)行預(yù)測(cè),生成邊界框和并預(yù)測(cè)類別。
這里先直接上YOLOv4的整體原理圖(來源網(wǎng)絡(luò))如下:

如上圖,整體框架跟我們之前學(xué)的YOLOv3很是類似。這里先大致看下,接下來我們將逐步分析各個(gè)部分,首先,我們先看特征提取網(wǎng)絡(luò)Backbone.
2.2 CSPDarknet53
我們前面知道在YOLOv3中,特征提取網(wǎng)絡(luò)使用的是Darknet53,而在YOLOv4中,對(duì)Darknet53做了一點(diǎn)改進(jìn),借鑒了CSPNet,CSPNet全稱是Cross Stage Partial Networks,也就是跨階段局部網(wǎng)絡(luò)。CSPNet解決了其他大型卷積神經(jīng)網(wǎng)絡(luò)框架Backbone中網(wǎng)絡(luò)優(yōu)化的梯度信息重復(fù)問題,將梯度的變化從頭到尾地集成到特征圖中,因此減少了模型的參數(shù)量和FLOPS數(shù)值,既保證了推理速度和準(zhǔn)確率,又減小了模型尺寸。如下圖:

CSPNet實(shí)際上是基于Densnet的思想,復(fù)制基礎(chǔ)層的特征映射圖,通過dense block發(fā)送副本到下一個(gè)階段,從而將基礎(chǔ)層的特征映射圖分離出來。這樣可以有效緩解梯度消失問題(通過非常深的網(wǎng)絡(luò)很難去反推丟失信號(hào)) ,支持特征傳播,鼓勵(lì)網(wǎng)絡(luò)重用特征,從而減少網(wǎng)絡(luò)參數(shù)數(shù)量。CSPNet思想可以和ResNet、ResNeXt和DenseNet結(jié)合,目前主要有CSPResNext50 和CSPDarknet53兩種改造Backbone網(wǎng)絡(luò)。
考慮到幾方面的平衡:輸入網(wǎng)絡(luò)分辨率/卷積層數(shù)量/參數(shù)數(shù)量/輸出維度。一個(gè)模型的分類效果好不見得其檢測(cè)效果就好,想要檢測(cè)效果好需要以下幾點(diǎn):
更大的網(wǎng)絡(luò)輸入分辨率——用于檢測(cè)小目標(biāo) 更深的網(wǎng)絡(luò)層——能夠覆蓋更大面積的感受野 更多的參數(shù)——更好的檢測(cè)同一圖像內(nèi)不同size的目標(biāo)
這樣最終的CSPDarknet53結(jié)構(gòu)就如下圖:

CSPNet論文: https://arxiv.org/pdf/1911.11929v1.pdf
為了增大感受野,作者還使用了SPP-block,使用PANet代替FPN進(jìn)行參數(shù)聚合以適用于不同level的目標(biāo)檢測(cè)。
2.3 SPP結(jié)構(gòu)
SPP-Net結(jié)構(gòu)我們之前也有學(xué)過,SPP-Net全稱Spatial Pyramid Pooling Networks,當(dāng)時(shí)主要是用來解決不同尺寸的特征圖如何進(jìn)入全連接層的,直接看下圖,下圖中對(duì)任意尺寸的特征圖直接進(jìn)行固定尺寸的池化,來得到固定數(shù)量的特征。

如上圖,以3個(gè)尺寸的池化為例,對(duì)特征圖進(jìn)行一個(gè)最大值池化,即一張?zhí)卣鲌D得取其最大值,得到1*d(d是特征圖的維度)個(gè)特征;對(duì)特征圖進(jìn)行網(wǎng)格劃分為2x2的網(wǎng)格,然后對(duì)每個(gè)網(wǎng)格進(jìn)行最大值池化,那么得到4*d個(gè)特征;同樣,對(duì)特征圖進(jìn)行網(wǎng)格劃分為4x4個(gè)網(wǎng)格,對(duì)每個(gè)網(wǎng)格進(jìn)行最大值池化,得到16*d個(gè)特征。
接著將每個(gè)池化得到的特征合起來即得到固定長(zhǎng)度的特征個(gè)數(shù)(特征圖的維度是固定的),接著就可以輸入到全連接層中進(jìn)行訓(xùn)練網(wǎng)絡(luò)了。用到這里是為了增加感受野。
2.4 PAN結(jié)構(gòu)
YOLOv4使用PANet(Path Aggregation Network)代替FPN進(jìn)行參數(shù)聚合以適用于不同level的目標(biāo)檢測(cè), PANet論文中融合的時(shí)候使用的方法是Addition,YOLOv4算法將融合的方法由加法改為Concatenation。如下圖:

是一種特征圖融合方式。
2.5 檢測(cè)頭YOLOv3
對(duì)于檢測(cè)頭部分,YOLOv4繼續(xù)采用YOLOv3算法的檢測(cè)頭,不再贅述。
3.BackBone訓(xùn)練策略
這里我們主要從數(shù)據(jù)增強(qiáng),DropBlock正則化,類標(biāo)簽平滑方面來學(xué)習(xí)下BackBone訓(xùn)練策略。
3.1 數(shù)據(jù)增強(qiáng)
CutMix
YOLOv4選擇用CutMix的增強(qiáng)方式,CutMix的處理方式也比較簡(jiǎn)單,同樣也是對(duì)一對(duì)圖片做操作,簡(jiǎn)單講就是隨機(jī)生成一個(gè)裁剪框Box,裁剪掉A圖的相應(yīng)位置,然后用B圖片相應(yīng)位置的ROI放到A圖中被裁剪的區(qū)域形成新的樣本,ground truth標(biāo)簽會(huì)根據(jù)patch的面積按比例進(jìn)行調(diào)整,比如0.6像狗,0.4像貓,計(jì)算損失時(shí)同樣采用加權(quán)求和的方式進(jìn)行求解。這里借CutMix的地方順帶說下幾種類似的增強(qiáng)方式:
上圖是CutMix論文中作者對(duì)幾種增強(qiáng)方式做的對(duì)比,結(jié)果顯而易見,CutMix的增強(qiáng)方式在三個(gè)數(shù)據(jù)集上的表現(xiàn)都是最優(yōu)的。其中Mixup是直接求和兩張圖,如同附身,鬼影一樣,模型很難學(xué)到準(zhǔn)確的特征圖響應(yīng)分布。Cutout是直接去除圖像的一個(gè)區(qū)域,這迫使模型在進(jìn)行分類時(shí)不能對(duì)特定的特征過于自信。然而,圖像的一部分充滿了無用的信息,這是一種浪費(fèi)。在CutMix中,將圖像的一部分剪切并粘貼到另一個(gè)圖像上,使得模型更容易區(qū)分異類。
CutMix論文: https://arxiv.org/pdf/1905.04899v2.pdf
Mosaic
Yolov4的Mosaic數(shù)據(jù)增強(qiáng)是參考CutMix數(shù)據(jù)增強(qiáng),理論上類似。區(qū)別在于Mosaic是一種將4張訓(xùn)練圖像合并成一張進(jìn)行訓(xùn)練的數(shù)據(jù)增強(qiáng)方法(而不是CutMix中的2張)。這增強(qiáng)了對(duì)正常背景(context)之外的對(duì)象的檢測(cè),豐富檢測(cè)物體的背景。此外,每個(gè)小批包含一個(gè)大的變化圖像(4倍),因此,減少了估計(jì)均值和方差的時(shí)需要大mini-batch的要求,降低了訓(xùn)練成本。如下圖:
3.2 DropBlock正則化
正則化技術(shù)有助于避免數(shù)據(jù)科學(xué)專業(yè)人員面臨的最常見的問題,即過擬合。對(duì)于正則化,已經(jīng)提出了幾種方法,如L1和L2正則化、Dropout、Early Stopping和數(shù)據(jù)增強(qiáng)。這里YOLOv4用了DropBlock正則化的方法。
DropBlock方法的引入是為了克服Dropout隨機(jī)丟棄特征的主要缺點(diǎn),Dropout被證明是全連接網(wǎng)絡(luò)的有效策略,但在特征空間相關(guān)的卷積層中效果不佳。DropBlock技術(shù)在稱為塊的相鄰相關(guān)區(qū)域中丟棄特征。這樣既可以實(shí)現(xiàn)生成更簡(jiǎn)單模型的目的,又可以在每次訓(xùn)練迭代中引入學(xué)習(xí)部分網(wǎng)絡(luò)權(quán)值的概念,對(duì)權(quán)值矩陣進(jìn)行補(bǔ)償,從而減少過擬合。如下圖:

DropBlock論文中作者最終在ImageNet分類任務(wù)上,使用Resnet-50結(jié)構(gòu),將精度提升1.6%個(gè)點(diǎn),在COCO檢測(cè)任務(wù)上,精度提升1.6%個(gè)點(diǎn)。
DropBlock論文: https://arxiv.org/pdf/1810.12890.pdf
3.3 類標(biāo)簽平滑
對(duì)于分類問題,特別是多分類問題,常常把向量轉(zhuǎn)換成one-hot-vector,而one-hot帶來的問題:
對(duì)于損失函數(shù),我們需要用預(yù)測(cè)概率去擬合真實(shí)概率,而擬合one-hot的真實(shí)概率函數(shù)會(huì)帶來兩個(gè)問題:
無法保證模型的泛化能力,容易造成過擬合; 全概率和 0概率鼓勵(lì)所屬類別和其他類別之間的差距盡可能加大,而由梯度有界可知,這種情況很難適應(yīng)。會(huì)造成模型過于相信預(yù)測(cè)的類別。
對(duì)預(yù)測(cè)有100%的信心可能表明模型是在記憶數(shù)據(jù),而不是在學(xué)習(xí)。標(biāo)簽平滑調(diào)整預(yù)測(cè)的目標(biāo)上限為一個(gè)較低的值,比如0.9。它將使用這個(gè)值而不是1.0來計(jì)算損失。這個(gè)概念緩解了過度擬合。說白了,這個(gè)平滑就是一定程度縮小label中min和max的差距,label平滑可以減小過擬合。所以,適當(dāng)調(diào)整label,讓兩端的極值往中間湊湊,可以增加泛化性能。
4.BackBone推理策略
這里主要從Mish激活函數(shù),MiWRC策略方面進(jìn)行闡述BackBone推理策略。
4.1 Mish激活函數(shù)
對(duì)激活函數(shù)的研究一直沒有停止過,ReLU還是統(tǒng)治著深度學(xué)習(xí)的激活函數(shù),不過,這種情況有可能會(huì)被Mish改變。Mish是另一個(gè)與ReLU和Swish非常相似的激活函數(shù)。正如論文所宣稱的那樣,Mish可以在不同數(shù)據(jù)集的許多深度網(wǎng)絡(luò)中勝過它們。公式如下:
Mish是一個(gè)平滑的曲線,平滑的激活函數(shù)允許更好的信息深入神經(jīng)網(wǎng)絡(luò),從而得到更好的準(zhǔn)確性和泛化;在負(fù)值的時(shí)候并不是完全截?cái)啵试S比較小的負(fù)梯度流入。實(shí)驗(yàn)中,隨著層深的增加,ReLU激活函數(shù)精度迅速下降,而Mish激活函數(shù)在訓(xùn)練穩(wěn)定性、平均準(zhǔn)確率(1%-2.8%)、峰值準(zhǔn)確率(1.2% - 3.6%)等方面都有全面的提高。如下圖:

Mish論文: https://arxiv.org/pdf/1908.08681.pdf
4.2 MiWRC策略
MiWRC是Multi-input weighted residual connections的簡(jiǎn)稱, 在BiFPN中,提出了用MiWRC來執(zhí)行標(biāo)尺度級(jí)重加權(quán),添加不同尺度的特征映射。我們已經(jīng)討論了FPN和PAN作為例子。下面的圖(d)顯示了另一種被稱為BiFPN的neck設(shè)計(jì),根據(jù)BiFPN的論文,該設(shè)計(jì)具有更好的準(zhǔn)確性和效率權(quán)衡。

上圖中 (a)FPN引入自頂向下的路徑,將多尺度特征從3級(jí)融合到7級(jí)(P3-P7);(b)PANET在FPN之上增加一個(gè)額外的自下而上的路徑;(c)NAS-FPN使用神經(jīng)網(wǎng)絡(luò)搜索找到一個(gè)不規(guī)則的特征拓?fù)渚W(wǎng)絡(luò),然后重復(fù)應(yīng)用同一塊拓?fù)浣Y(jié)構(gòu);(d)是這里的BiFPN,具有更好的準(zhǔn)確性和效率權(quán)衡。將該neck放到整個(gè)整個(gè)網(wǎng)絡(luò)的連接中如下圖:

上圖采用EfficientNet作為骨干網(wǎng)絡(luò),BiFPN作為特征網(wǎng)絡(luò),共享class/box預(yù)測(cè)網(wǎng)絡(luò)。 基于不同的資源約束,BiFPN層和類/盒網(wǎng)層都被重復(fù)多次。
BiFPN論文: https://arxiv.org/pdf/1911.09070.pdf
5.檢測(cè)頭訓(xùn)練策略
前面介紹BackBone訓(xùn)練策略的時(shí)候,以及學(xué)習(xí)過DropBlock正則化,Mosaic數(shù)據(jù)增強(qiáng)的方法了,這兩種方法在檢測(cè)頭訓(xùn)練的過程中也有用到這里不在贅述。我們一起看下檢測(cè)頭訓(xùn)練中采用的其他策略。
5.1 CIoU-loss
損失函數(shù)給出了如何調(diào)整權(quán)重以降低loss。所以在我們做出錯(cuò)誤預(yù)測(cè)的情況下,我們期望它能給我們指明前進(jìn)的方向。但如果使用IoU,考慮兩個(gè)預(yù)測(cè)都不與ground truth重疊,那么IoU損失函數(shù)不能告訴哪一個(gè)是更好的,或者哪個(gè)更接近ground truth。這里順帶看下常用的幾種loss的形式,如下:
經(jīng)典IoU loss:
IoU算法是使用最廣泛的算法,大部分的檢測(cè)算法都是使用的這個(gè)算法。
GIoU:Generalized IoU
GIoU考慮到,當(dāng)檢測(cè)框和真實(shí)框沒有出現(xiàn)重疊的時(shí)候IoU的loss都是一樣的,因此GIoU就加入了C檢測(cè)框(C檢測(cè)框是包含了檢測(cè)框和真實(shí)框的最小矩形框),這樣就可以解決檢測(cè)框和真實(shí)框沒有重疊的問題。但是當(dāng)檢測(cè)框和真實(shí)框之間出現(xiàn)包含的現(xiàn)象的時(shí)候GIoU就和IoU loss是同樣的效果了。
其中,C是指能包含predict box和Ground Truth box的最小box。
DIoU:Distance IoU
DIoU考慮到GIoU的缺點(diǎn),也是增加了C檢測(cè)框,將真實(shí)框和預(yù)測(cè)框都包含了進(jìn)來,但是DIoU計(jì)算的不是框之間的交并,而是計(jì)算的每個(gè)檢測(cè)框之間的歐氏距離,這樣就可以解決GIoU包含出現(xiàn)的問題。
其中是指predict box和GT box中心點(diǎn)的距離的平方,而是指剛好能包含predict box和GT box的最小box的對(duì)角線長(zhǎng)度平方。
CIoU:Complete IoU
CIoU就是在DIoU的基礎(chǔ)上增加了檢測(cè)框尺度的loss,增加了長(zhǎng)和寬的loss,這樣預(yù)測(cè)框就會(huì)更加的符合真實(shí)框。
實(shí)際上,CIOU只是在DIOU基礎(chǔ)上增加了一項(xiàng)。
其中:
5.2 CmBN策略
BN就是僅僅利用當(dāng)前迭代時(shí)刻信息進(jìn)行norm,而CBN在計(jì)算當(dāng)前時(shí)刻統(tǒng)計(jì)量時(shí)候會(huì)考慮前k個(gè)時(shí)刻統(tǒng)計(jì)量,從而實(shí)現(xiàn)擴(kuò)大batch size操作。同時(shí)作者指出CBN操作不會(huì)引入比較大的內(nèi)存開銷,訓(xùn)練速度不會(huì)影響很多,但是訓(xùn)練時(shí)候會(huì)慢一些,比GN還慢。
CmBN是CBN的改進(jìn)版本,其把大batch內(nèi)部的4個(gè)mini batch當(dāng)做一個(gè)整體,對(duì)外隔離。CBN在第t時(shí)刻,也會(huì)考慮前3個(gè)時(shí)刻的統(tǒng)計(jì)量進(jìn)行匯合,而CmBN操作不會(huì),不再滑動(dòng)cross,其僅僅在mini batch內(nèi)部進(jìn)行匯合操作,保持BN一個(gè)batch更新一次可訓(xùn)練參數(shù)。

BN:無論每個(gè)batch被分割為多少個(gè)mini batch,其算法就是在每個(gè)mini batch前向傳播后統(tǒng)計(jì)當(dāng)前的BN數(shù)據(jù)(即每個(gè)神經(jīng)元的期望和方差)并進(jìn)行Nomalization,BN數(shù)據(jù)與其他mini batch的數(shù)據(jù)無關(guān)。CBN:每次iteration中的BN數(shù)據(jù)是其之前n次數(shù)據(jù)和當(dāng)前數(shù)據(jù)的和(對(duì)非當(dāng)前batch統(tǒng)計(jì)的數(shù)據(jù)進(jìn)行了補(bǔ)償再參與計(jì)算),用該累加值對(duì)當(dāng)前的batch進(jìn)行Nomalization。好處在于每個(gè)batch可以設(shè)置較小的size。CmBN:只在每個(gè)Batch內(nèi)部使用CBN的方法,個(gè)人理解如果每個(gè)Batch被分割為一個(gè)mini batch,則其效果與BN一致;若分割為多個(gè)mini batch,則與CBN類似,只是把mini batch當(dāng)作batch進(jìn)行計(jì)算,其區(qū)別在于權(quán)重更新時(shí)間點(diǎn)不同,同一個(gè)batch內(nèi)權(quán)重參數(shù)一樣,因此計(jì)算不需要進(jìn)行補(bǔ)償。
5.3 自對(duì)抗訓(xùn)練(SAT)
SAT為一種新型數(shù)據(jù)增強(qiáng)方式。在第一階段,神經(jīng)網(wǎng)絡(luò)改變?cè)紙D像而不是網(wǎng)絡(luò)權(quán)值。通過這種方式,神經(jīng)網(wǎng)絡(luò)對(duì)其自身進(jìn)行一種對(duì)抗式的攻擊,改變?cè)紙D像,制造圖像上沒有目標(biāo)的假象。在第二階段,訓(xùn)練神經(jīng)網(wǎng)絡(luò)對(duì)修改后的圖像進(jìn)行正常的目標(biāo)檢測(cè)。

Self-Adversarial Training是在一定程度上抵抗對(duì)抗攻擊的數(shù)據(jù)增強(qiáng)技術(shù)。CNN計(jì)算出Loss, 然后通過反向傳播改變圖片信息,形成圖片上沒有目標(biāo)的假象,然后對(duì)修改后的圖像進(jìn)行正常的目標(biāo)檢測(cè)。需要注意的是在SAT的反向傳播的過程中,是不需要改變網(wǎng)絡(luò)權(quán)值的。
使用對(duì)抗生成可以改善學(xué)習(xí)的決策邊界中的薄弱環(huán)節(jié),提高模型的魯棒性。因此這種數(shù)據(jù)增強(qiáng)方式被越來越多的對(duì)象檢測(cè)框架運(yùn)用。
5.4 消除網(wǎng)格敏感度
邊界框b的計(jì)算方式為:

對(duì)于和的情況,我們需要分別具有很大的負(fù)值和正值。但我們可以將與一個(gè)比例因子(>1.0)相乘,從而更輕松地實(shí)現(xiàn)這一目標(biāo)。
5.5 單目標(biāo)使用多Anchor
如果 IoU(ground truth, anchor) > IoU threshold,則為單個(gè)基本真值使用多個(gè)錨點(diǎn)。(注:作者沒有更多地說明該方法在 YOLOv4 中的作用。)
5.6 余弦模擬退火
余弦調(diào)度會(huì)根據(jù)一個(gè)余弦函數(shù)來調(diào)整學(xué)習(xí)率。首先,較大的學(xué)習(xí)率會(huì)以較慢的速度減小。然后在中途時(shí),學(xué)習(xí)的減小速度會(huì)變快,最后學(xué)習(xí)率的減小速度又會(huì)變得很慢。

這張圖展示了學(xué)習(xí)率衰減的方式(下圖中還應(yīng)用了學(xué)習(xí)率預(yù)熱)及其對(duì)mAP的影響。可能看起來并不明顯,這種新的調(diào)度方法的進(jìn)展更為穩(wěn)定,而不是在停滯一段時(shí)間后又取得進(jìn)展。

余弦模擬退火論文: https://arxiv.org/pdf/1608.03983.pdf
5.7 遺傳算法優(yōu)化超參
關(guān)于遺傳算法的文章,我們之前也有學(xué)過:遺傳算法如何模擬大自然的進(jìn)化?
遺傳算法論文: https://arxiv.org/pdf/2004.10934.pdf
5.8 隨機(jī)形狀訓(xùn)練
許多單階段目標(biāo)檢測(cè)器是在固定的輸入圖像形狀下訓(xùn)練的。為了提高泛化效果,我們可以對(duì)不同圖像大小的模型進(jìn)行訓(xùn)練。(在YOLO中進(jìn)行多尺度訓(xùn)練)。
6.檢測(cè)頭推理策略
在檢測(cè)頭推理中除了用了上面講的Mish, SPP, PAN技術(shù)外,還用了SAM和DIoU-NMS,如下:
6.1 SAM模塊
注意力機(jī)制在DL設(shè)計(jì)中被廣泛采用。在SAM中,最大值池化和平均池化分別用于輸入feature map,創(chuàng)建兩組feature map。結(jié)果被輸入到一個(gè)卷積層,接著是一個(gè)Sigmoid函數(shù)來創(chuàng)建空間注意力。

將空間注意掩模應(yīng)用于輸入特征,輸出精細(xì)的特征圖。

在YOLOv4中,使用修改后的SAM而不應(yīng)用最大值池化和平均池化。

在YOLOv4中,FPN概念逐漸被實(shí)現(xiàn)/替換為經(jīng)過修改的SPP、PAN和PAN。
6.2 DIoU-NMS
NMS過濾掉預(yù)測(cè)相同對(duì)象的其他邊界框,并保留具有最高可信度的邊界框。

DIoU(前面討論過的) 被用作非最大值抑制(NMS)的一個(gè)因素。該方法在抑制冗余框的同時(shí),采用IoU和兩個(gè)邊界盒中心點(diǎn)之間的距離。這使得它在有遮擋的情況下更加健壯。
7.YOLOv4小結(jié)
為了提升準(zhǔn)確度,可以針對(duì)訓(xùn)練過程進(jìn)行一些優(yōu)化,比如數(shù)據(jù)增強(qiáng)、類別不平衡、成本函數(shù)、軟標(biāo)注…… 這些改進(jìn)不會(huì)影響推理速度,可被稱為「Bag of freebies」。另外還有一些改進(jìn)可稱為「bag of specials」,僅需在推理時(shí)間方面做少許犧牲,就能獲得優(yōu)良的性能回報(bào)。這類改進(jìn)包括增大感受野、使用注意力機(jī)制、集成跳過連接(skip-connection)或 FPN等特性、使用非極大值抑制等后處理方法。
本文從YOLOv4介紹,YOLOv4框架原理,BackBone訓(xùn)練策略,BackBone推理策略,檢測(cè)頭訓(xùn)練策略,檢測(cè)頭推理策略這幾個(gè)大方面進(jìn)行詳細(xì)的闡述了YOLOv4中所用到的各種策略,希望對(duì)大家有所幫助。
?點(diǎn)個(gè)贊再走唄?
