重磅干貨,第一時間送達
YOLOYOLO v4
1 介紹
將YOLOv3的AP和FPS分別提高10%和12%[5](淺藍(lán)色區(qū)域的模型被視為實時目標(biāo)檢測器)
可以看出,EfficientDet D4-D3比YOLO v4具有更好的AP,但是它們在V100 GPU上的運行速度低于30 FPS。另一方面,YOLO能以更高的速度(> 60 FPS)和非常好的精度運行。
2.目標(biāo)檢測器一般架構(gòu)
盡管YOLO是單階段目標(biāo)檢測器,但也有兩階段目標(biāo)檢測器,如R-CNN、Fast R-CNN和Faster R-CNN,它們準(zhǔn)確但速度慢。我們將專注于單階段目標(biāo)檢測器,讓我們來看看單階段目標(biāo)檢測器的主要組件:
2.1 骨干
骨干網(wǎng)絡(luò),如ResNet、DenseNet、VGG等,被用作特征提取器,它們在圖像分類數(shù)據(jù)集(如ImageNet)上進行了預(yù)訓(xùn)練,然后在檢測數(shù)據(jù)集上進行了微調(diào)。事實證明,這些骨干網(wǎng)絡(luò)隨著層數(shù)的加深能產(chǎn)生具有更高語義的不同級別的特征,對之后的目標(biāo)檢測發(fā)揮很大作用。
2.2 頸部
頸部在骨干和頭部之間的額外層,用于提取骨干網(wǎng)絡(luò)不同階段的不同特征圖,如FPN [1]、PANet[2]、Bi-FPN[3]。YOLO v3使用FPN從主干中提取不同比例的特征。
什么是特征金字塔網(wǎng)絡(luò)(FPN)?
通過自上而下的路徑和橫向連接來增強標(biāo)準(zhǔn)卷積網(wǎng)絡(luò),因此該網(wǎng)絡(luò)可以有效地從單分辨率輸入圖像構(gòu)造出豐富的多尺度特征金字塔[4]。
特征金字塔[1]網(wǎng)絡(luò)用于目標(biāo)檢測
(1)每個橫向連接將特征圖從下至上的路徑合并到自上而下的路徑,從而生成不同的金字塔層,在合并特征圖之前,對先前的金字塔層進行2倍上采樣,使兩個特征圖具有相同的空間分辨率大小。
(2)然后將分類/回歸網(wǎng)絡(luò)(頭部)應(yīng)用于金字塔的每個層,以幫助檢測不同大小的目標(biāo)。特征金字塔可以應(yīng)用于不同的骨干模型,例如最初的FPN[1]論文使用ResNets,還有許多以不同方式集成FPN的模塊,例如SFAM[7]、ASFF[9]和Bi-FPN[3]。
四種類型的特征金字塔。
圖像(a)顯示了如何在Single Shot Detector體系結(jié)構(gòu)(SSD)中從主干中提取特征,上圖還展示了其他三種不同類型的金字塔網(wǎng)絡(luò),它們背后的思想與它們的目的相同:緩解目標(biāo)實例之間比例變化引起的問題[3]。
2.3 頭部
實際負(fù)責(zé)執(zhí)行邊界框檢測(分類和回歸)的網(wǎng)絡(luò)。
輸出(取決于實現(xiàn)方式):1)4個值描述了預(yù)測的邊界框(x,y,h,w);2)k類的概率+ 1(背景額外一個)。
像YOLO一樣,基于anchor的目標(biāo)探測器也將頭部應(yīng)用于每個anchor box,其他流行的基于anchor的單階段檢測器包括:Single Shot Detector[6]和RetinaNet[4]。
下圖結(jié)合了上述三個模塊:
YOLO v4論文的作者[5]區(qū)分了用于提高目標(biāo)檢測器精度的兩類方法,分析了這兩種類別中的不同方法,以實現(xiàn)具有良好準(zhǔn)確性的快速運行的神經(jīng)網(wǎng)絡(luò),這兩個類別是:
3.1 Bag of freebies(BOF)
定義:僅改變訓(xùn)練策略或僅增加訓(xùn)練成本[5],使目標(biāo)檢測器獲得更準(zhǔn)確性而又不增加推理成本。
(1)數(shù)據(jù)增強:可以提高模型的泛化能力。可以進行光度畸變?nèi)纾赫{(diào)整亮度、飽和度、對比度和噪點,或者對圖像進行幾何變形,例如圖像旋轉(zhuǎn)、裁剪等。這些技術(shù)都是BoF的明顯示例,有助于提升檢測器的準(zhǔn)確性。
幾何變形示例(對于對象檢測任務(wù),邊界框也應(yīng)用相同的轉(zhuǎn)換)
其他有趣的技術(shù)可以增強圖像:1)CutOut[8]可以在訓(xùn)練過程中隨機掩蓋輸入的正方形區(qū)域,可以提高CNN的魯棒性和性能。2)類似地隨機擦除[10]選擇圖像中的矩形區(qū)域并使用隨機值擦除其像素。
用于目標(biāo)檢測的隨機擦除示例
(2)避免過度擬合的正則化技術(shù):如DropOut、DropConnect和DropBlock [13]。最后一個實際上在CNN中表現(xiàn)出非常好的結(jié)果,并用于YOLO v4主干中。
來自DropBlock論文
(3)回歸網(wǎng)絡(luò)的損失函數(shù):傳統(tǒng)的做法是應(yīng)用均方誤差對坐標(biāo)進行回歸,如本文所述將這些點視為獨立變量,但未考慮對象本身的完整性。
IoU [12]損失:考慮了預(yù)測邊界框(BBox)和真實邊界框的面積。
GIoU[11]損失:除了考慮覆蓋區(qū)域之外,還考慮了對象的形狀、方向、重疊區(qū)域和中心點之間的距離和寬高比。YOLO v4使用CIoU損失作為邊界框的損失,主要是因為與上述提到的其他損失相比,它導(dǎo)致更快的收斂和更好的性能。
(注意:可能引起混亂的一件事是,盡管許多模型將MSE用于BBox回歸損失,但它們使用IoU作為度量標(biāo)準(zhǔn),而不是如上所述的損失函數(shù)。)下圖比較了具有不同IoU損耗的相同模型:
損失比較
上述檢測來自Faster R-CNN(Ren等人,2015),該數(shù)據(jù)在相同的MS COCO數(shù)據(jù)集上訓(xùn)練,并帶有GIoU和CIoU損失??梢宰⒁獾紺IoU的性能要優(yōu)于GIoU。
3.2 Bag of specials(BOS)
定義:僅會增加少量推理成本,但可以顯著提升目標(biāo)檢測器準(zhǔn)確性的插件模塊和后處理方法[5]。此類模塊/方法通常包括:引入注意力機制(SE模塊與SAM模塊)、擴大模型的感受野范圍并增強特征集成能力等。
(1)引入注意力機制:主要是channel-wise注意力(如擠壓與激勵模塊SE)和point-wise注意力(如空間注意力模塊SAM)。YOLO v4選擇了空間注意力模塊SAM,但與該模塊的最初發(fā)布版本不完全相同,請注意以下幾點:
原始空間注意模塊[16]
原始SAM:給定一個特征圖F',沿通道執(zhí)行平均池化和最大池化操作,并將它們串聯(lián)起來,然后應(yīng)用卷積層(包含S型激活函數(shù))生成注意力圖(Ms),并將其應(yīng)用于原始F'。
YOLO v4修改的空間注意模塊,來源[5]
YOLO v4修改的SAM:不應(yīng)用最大池化和平均池化,而是F'通過卷積層(包含S型激活函數(shù))得到的結(jié)果與原始特征圖(F')相乘。
(2)改善感受野:常用模塊是SPP,ASPP和RFB(YOLO v4使用SPP)。早先討論過的特征金字塔(如SFAM[7],ASFF[9]和Bi-FPN[3])也屬于BoS。
(3)激活函數(shù):自ReLU問世以來,它已經(jīng)有很多變體,如LReLU、PReLU和ReLU6。ReLU6和hard-Swish之類的激活函數(shù)是專門為壓縮網(wǎng)絡(luò)設(shè)計(用于嵌入式設(shè)備),如Google Coral Edge TPU。YOLO v4 在主干中使用了很多Mish [14]激活函數(shù):
來源[14 ]
事實證明該激活函數(shù)顯示出非常好的結(jié)果。如與使用Swish或ReLU激活函數(shù)的Squeeze Excite網(wǎng)絡(luò)(CIFAR-100數(shù)據(jù)集)Mish激活函數(shù)分別使得測試精度提升0.494%、1.671%[14]。
其他一些圖形化的激活函數(shù)參考:https://www.desmos.com/calculator/rhx5tl8ygi
4.YOLO v4設(shè)計
已經(jīng)討論了用于提高模型精度和目標(biāo)檢測器不同部分(骨干、頸部、頭部)的方法?,F(xiàn)在我們討論一下YOLO中使用的新內(nèi)容。
(1)骨干:CSPDarknet53用作GPU版本的特征提取網(wǎng)絡(luò)。對于VPU(視覺處理單元),他們考慮使用EfficientNet-lite — MixNet — GhostNet或MobileNetV3。我們重點介紹GPU版本。
下表顯示了適用于GPU版本的不同候選的主干
來源[5]
某些主干與檢測相比更適合分類。對于檢測CSPDarknet53優(yōu)于CSPResNext50,對于圖像分類,CSPResNext50優(yōu)于CSPDarknet53。如本文所述用于目標(biāo)檢測的骨干模型需要更大的輸入網(wǎng)絡(luò)大小(以便對小目標(biāo)也能進行更好的檢測)、更多的層(得到更大的感受野)。
(2)頸部:使用空間金字塔池(SPP)和路徑聚合網(wǎng)絡(luò)(PAN)。
路徑聚合網(wǎng)絡(luò)(PAN):與原始PAN不同,修改后的版本用concat代替addition操作,如下圖
來源[5]
最初PAN將N4的尺寸減小到與P5相同的空間尺寸后,將這種縮小的N4與P5 相加,在所有Pi+ 1和Ni上重復(fù)此操作。在YOLO v4中,不是將Pi+1 和Ni加起來,而是concatenate連接起來(如上圖所示)。
路徑聚合網(wǎng)絡(luò)(PAN)源[2]
空間金字塔池(SPP):它使用不同的核大小k = {5,9,13}、same填充在19 * 19 * 512的特征圖上執(zhí)行最大池化,然后將四個對應(yīng)的特征圖連接起來形成19 * 19 * 2048的特征圖,這增加了頸部的感受野,在推理時間可以忽略不計的情況下提高了模型準(zhǔn)確性。
在yolov4.cfg中觀察到的SPP
如果您想可視化顯示 yolo中使用的不同層(如上圖所示),建議使用https://github.com/lutzroeder/netron(可以使用Web /桌面版本),然后使用它打開yolov4.cfg。
(3)頭部:用法與YOLO v3相同。
應(yīng)用在不同尺度的YOLO頭部
頭部應(yīng)用在網(wǎng)絡(luò)的不同尺度特征圖,用于檢測大小不同的物體通道數(shù)為255,因為(80個類別 + 1個對象 + 4個坐標(biāo))* 3個錨點。
5. BoF&BoS使用總結(jié)
骨干和YOLO v4檢測器中使用的BoF和BoS的不同模塊/方法可以總結(jié)如下:
6. 其他改進
(1)使用“”的數(shù)據(jù)增強新方法:將訓(xùn)練數(shù)據(jù)集的4張圖像合并為1張圖像:批量歸一化從每層的4張不同的圖像計算激活統(tǒng)計信息[5],因此極大地減少了選擇大型mini-batch批量進行訓(xùn)練的需求。
來自[5]的數(shù)據(jù)增強
示例:用于車牌檢測的增強
(2)使用自對抗訓(xùn)練(SAT):該訓(xùn)練分為兩個階段,第一階段:神經(jīng)網(wǎng)絡(luò)更改原始圖像,而不是網(wǎng)絡(luò)權(quán)重,以這種方式神經(jīng)網(wǎng)絡(luò)對其自身執(zhí)行對抗攻擊,從而改變原始圖像以產(chǎn)生對圖像上沒有所需物體的欺騙。第二階段:訓(xùn)練神經(jīng)網(wǎng)絡(luò)以正常方式檢測此修改圖像上的對象。[5]
7. Colab Demo
我制作了一個Colab,您可以在自己的視頻中測試YOLO v4及其微型版本,它使用了在MS COCO上訓(xùn)練的模型。地址為:https://colab.research.google.com/drive/1PuI9bYeM8O1OA82pI12oGopRJJrLWfs9?usp=sharing
8. 結(jié)論
更多詳細(xì)信息參考https://arxiv.org/abs/2004.10934。如果您想在自己的數(shù)據(jù)集上進行訓(xùn)練,請查看官方倉庫https://github.com/AlexeyAB/darknet。
YOLO v4達到了用于實時目標(biāo)檢測的最新結(jié)果(AP為43.5%),并且能夠在V100 GPU上以65 FPS的速度運行。如果您想降低精度但要提高FPS,請在官方倉庫中查看新的Yolo v4 Tiny版本https://github.com/AlexeyAB/darknet。
參考
[1] Feature Pyramid Networks for Object Detection
[2] Path Aggregation Network for Instance Segmentation
[3] EfficientDet: Scalable and Efficient Object Detection
[4] Focal Loss for Dense Object Detection
[5] YOLOv4: Optimal Speed and Accuracy of Object Detection
[6] Single Shot MultiBox Detector (SSD)
[7] A Single-Shot Object Detector based on Multi-Level Feature Pyramid Network
[8] Improved Regularization of Convolutional Neural Networks with Cutout
[9] Learning Spatial Fusion for Single-Shot Object Detection
[10] Random Erasing Data Augmentation
[11] Generalized Intersection over Union: A Metric and A Loss for Bounding Box Regression
[12] UnitBox: An Advanced Object Detection Network
[13] DropBlock: A regularization method for convolutional networks
[14] Mish: A Self Regularized Non-Monotonic Neural Activation Function
[15] Squeeze-and-Excitation Networks
[16] CBAM: Convolutional Block Attention Module
交流群
聯(lián)系客服