YOLOv4 論文閱讀筆記

    YOLOv4在結構上沒有額外的創新,但是收集了目標檢測中各種tricks,並進行實驗分析了各種tricks的有效性,相對於對近些年來目標檢測領域中從數據,網絡結構,和後處理等過程做了很好的總結。最終,在速度和準確性上達到了最好的balance。

論文:《YOLOv4: Optimal Speed and Accuracy of Object Detection》

論文鏈接:https://arxiv.org/pdf/2004.10934.pdf

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

 

摘要

    據說有許多特徵可以提高卷積神經網絡(CNN)的準確性。需要在大型數據集上對這些特徵的組合進行實際測試,並對結果進行理論證明。某些特徵僅在某些模型上運行,並且僅在某些問題上運行,或者僅在小型數據集上運行;而某些特徵(例如批歸一化和殘差連接)適用於大多數模型,任務和數據集。我們假設此類通用特徵包括加權殘差連接(Weighted-Residual-Connections,WRC),跨階段部分連接(Cross-Stage-Partial-connections, CSP),跨小批量標準化( Cross mini-Batch
Normalization, CmBN),自對抗訓練(Self-adversarial-training, SAT)和Mish激活。我們使用以下新特徵:WRC,CSP,CmBN,SAT,Mish激活,Mosaic數據增強,CmBN,DropBlock正則化和CIoU loss,並結合使用其中的一些特徵以實現最新的結果:43.5%的AP(65.7在Tesla V100上,MS COCO數據集的實時速度約爲65 FPS。源代碼位於https://github.com/AlexeyAB/darknet。

1 引言

    大多數基於CNN的目標檢測器僅適用於推薦系統。 例如,通過慢速精確模型執行通過城市攝像機搜索空閒停車位的過程,而汽車碰撞警告則與快速不準確的模型有關。 提高實時目標檢測器的準確性,不僅可以將它們用於提示生成推薦系統,還可以用於獨立的流程管理和減少人工輸入。 常規圖形處理單元(GPU)上的實時對象檢測器操作允許它們以可承受的價格進行大量使用。 最精確的現代神經網絡無法實時運行,並且需要大量的GPU來進行大量mini-batch size的訓練。 我們通過創建CNN來解決此類問題,該CNN在常規GPU上實時運行,並且訓練僅需要一個常規GPU。

    這項工作的主要目標是設計生產系統中目標檢測器的快速運行速度並優化並行計算,而不是低計算量理論指標(BFLOP)。 我們希望可以輕鬆地訓練和使用設計的對象。 例如,任何使用常規GPU進行訓練和測試的人都可以獲得實時,高質量和令人信服的目標檢測結果,使用YOLOv4結果如圖1所示。我們的貢獻總結如下:

圖1:提出的YOLOv4與其他最新對目標檢測器的比較。 YOLOv4的運行速度比EfficientDet快兩倍,並且性能相當。 將YOLOv3的AP和FPS分別提高了10%和12%


1,我們開發了一種高效而強大的物體檢測模型。 它使每個人都可以使用1080 Ti或2080 Ti GPU訓練超快速和準確的物體檢測器。
2,我們在探測器訓練過程中驗證了最新的Bag-of-Freebies和Bag-of-Specials方法的影響
3,我們修改了最先進的方法,使它們更有效且更適合單個GPU訓練,包括CBN [89],PAN [49],SAM [85]等。

2 相關工作

2.1 目標檢測模型

    現代檢測器通常由兩部分組成一個是在ImageNet上經過預訓練的backbone,另一個是用來預測物體的類別和邊界框的頭部。對於在GPU平臺上運行的那些檢測器,其backbone可能是VGG [68],ResNet [26],ResNeXt [86]或DenseNet [30]。對於在CPU平臺上運行的那些檢測器,其backbone可以是SqueezeNet [31],MobileNet [28、66、27、74]或ShuffleNet [97、53]。至於頭部,通常分爲兩類,即單階段目標檢測器兩階段目標檢測器。最有代表性的兩階段目標檢測器是R-CNN [19]系列,包括Fast R-CNN [18],Faster R-CNN [64],R-FCN [9]和Libra R-CNN [58]。也有可能使兩階段目標檢測器成爲anchor-free的目標檢測器,例如RepPoints [87]。對於單階段目標檢測器,最具代表性的模型是YOLO [61、62、63],SSD [50]和RetinaNet [45]。近年來,開發了anchor-free的單階段目標檢測器。這種檢測器是CenterNet [13],CornerNet [37、38],FCOS [78]等。近年來開發的目標檢測器通常在backbone和頭部之間插入一些層,這些層通常用於從不同的階段收集特徵圖。我們可以稱其爲目標檢測器的頸部(neck)。通常,頸部由幾個自下而上的路徑和幾個自上而下的路徑組成。配備此機制的網絡包括特徵金字塔網絡(FPN)[44],路徑聚合網絡(PAN)[49],BiFPN [77]和NAS-FPN [17]。

    除上述模型外,一些研究人員將重點放在直接構建用於目標檢測的新backbone(DetNet [43],DetNAS [7])或新的整個模型(SpineNet [12],HitDetector [20])上。
綜上所述,普通的目標檢測器由以下幾部分組成:


•輸入:images,patches,圖像金字塔
•backboneVGG16 [68],ResNet-50 [26],SpineNet [12],EfficientNet-B0 / B7 [75],CSPResNeXt50 [81],CSPDarknet53 [81]
• Neck:
    • 額外的blocks: SPP [25], ASPP [5], RFB[47], SAM [85]
    • Path-aggregation blocks: FPN [44], PAN [49],NAS-FPN [17], Fully-connected FPN, BiFPN[77], ASFF [48], SFAM [98]
• Heads:  
    •密集預測(單階段):
        ◦ RPN [64], SSD [50], YOLO [61], RetinaNet[45] (anchor based)
        ◦ CornerNet [37], CenterNet [13], MatrixNet[60], FCOS [78] (anchor free)
    •稀疏預測:
        ◦ Faster R-CNN [64], R-FCN [9], Mask RCNN [23] (anchor based)
        ◦ RepPoints [87] (anchor free)

                                                             圖2 目標檢測器 

2.2 Bag of freebies

    通常,常規的目標檢測器是離線訓練的。因此,研究人員總是喜歡利用這一優勢,並開發出更好的訓練方法,以使目標檢測器獲得更好的精度而又不增加推理成本。我們稱這些僅改變訓練策略或僅增加訓練成本方法爲“bag of freebies數據增強是目標檢測方法經常採用的並符合bag of freebies定義。數據增強的目的是增加輸入圖像的可變性,從而使設計的目標檢測模型對從不同環境獲得的圖像具有更高的魯棒性。例如,photometric distortions和geometric distortions是兩種常用的數據增強方法,它們無疑有益於目標檢測任務。在處理photomet如此 distortions時,我們會調整圖像的亮度,對比度,色度,飽和度和噪點。對於幾何變形,我們添加了隨機縮放,裁剪,翻轉和旋轉。

    上面提到的數據擴充方法都是逐像素調整,並且保留了調整區域中的所有原始像素信息。此外,一些從事數據增強的研究人員將重點放在模擬目標遮擋問題上。他們在圖像分類和目標檢測中取得了良好的效果。例如,隨機擦除[100]和CutOut [11]可以隨機選擇圖像中的矩形區域,並填充零的隨機或互補值。至於hide-and-seek[69]和grid mask[6],它們隨機或均勻地選擇圖像中的多個矩形區域並將其替換爲全零。如果類似的概念應用於特徵圖,則有DropOut [71],DropConnect [80]和DropBlock [16]方法。另外,一些研究人員提出了使用多個圖像一起執行數據增強的方法。例如,MixUp [92]使用兩個圖像以不同的係數比率進行乘法和疊加,然後使用這些疊加比率來調整標籤。對於CutMix [91],它是將裁切後的圖像覆蓋到其他圖像的矩形區域,並根據混合區域的大小調整標籤。除了上述方法之外,style transfer GAN [15]還用於數據擴充,這種用法可以有效地減少CNN所學習的紋理偏差。

    與上面提出的各種方法不同,其他一些bag of freebies方法專用於解決數據集中語義分佈可能存在偏差的問題。在處理語義分佈偏差問題時,一個非常重要的問題是,不同類之間存在數據不平衡的問題,而該問題在兩階段物體檢測器中通常可以通過以下方式來解決:硬負樣本挖掘[72]或在線硬挖掘[67]。但是樣本挖掘方法不適用於單階段目標檢測器,因爲這種檢測器屬於密集預測體系結構。因此林等。 [45]提出了focal loss以解決各種類別之間存在的數據不平衡問題。另一個非常重要的問題是,執行標記時很難用one-hot hard表示來表達不同類別之間的關聯度的關係。 [73]中提出的label smooth是將hard label轉換爲soft label以進行訓練,這可以使模型更健壯。爲了獲得更好的soft label,Islam等。 [33]介紹了知識蒸餾的概念來設計標籤細化網絡。


   最後個bag of freebies是邊界框(BBox)迴歸的目標函數。傳統的目標檢測器通常使用均方誤差(MSE)直接對BBox的中心點座標以及高度和寬度執行迴歸,即 {xcenter,ycenter,w,h}或左上點和右下點,即,,ybottom rightg}。對於anchor-base的方法,將估計相應的偏移量,例如{xcenter_offset,ycenter_offset,woffset,hoffsetg和fxtop left_offset,ytop_left_offset,xbottom_right_offset,ybottom_right_offset}。但是,直接估計BBox的每個點的座標值是將這些點視爲獨立變量,但實際上並未考慮目標本身的完整性。爲了使這個問題得到更好的處理,一些研究者最近提出了IoU loss[90],該方法考慮了預測的BBox區域和ground truth BBox區域的覆蓋範圍。 IoU loss計算過程將通過使用基本事實執行IoU,然後將生成的結果連接到整個代碼中,觸發BBox的四個座標點的計算。因爲IoU是尺度不變表示,所以可以解決傳統方法計算{x,y,w,h}的l1或l2損失時,損失會隨着尺度增加而增加的問題。最近,一些研究人員繼續改善IoU損失。例如,GioU loss[65]除了覆蓋區域外還包括對象的形狀和方向。他們建議找到可以同時覆蓋預測的BBox和ground truth BBox的最小面積BBox,並使用該BBox作爲分母來代替最初用於IoU loss的分母。至於DIoU loss[99],它還考慮了目標中心的距離,而CIoU loss[99]同時考慮了重疊區域,中心點之間的距離和縱橫比。 CIoU可以在BBox迴歸問題上實現更好的收斂速度和準確性。

2.3 Bag of specials

    對於那些僅增加少量推理成本但可以顯着提高目標檢測準確性的插件模塊和後處理方法,我們將其稱爲“bag of specials”。 一般而言,這些插件模塊用於增強模型中的某些屬性,例如擴大感受野,引入注意力機制增強特徵集成能力等,而後處理是用於篩選模型預測結果的方法。

    可以用來增強感受野的常用模塊是SPP [25],ASPP [5]和RFB [47]。 SPP模塊起源於空間金字塔匹配(SPM)[39],而SPM的原始方法是將特徵圖分割爲幾個d×d個相等的blocks,其中d可以爲{1, 2,3m ...},從而形成空間金字塔,然後提取bag-of-word特徵。 SPP將SPM集成到CNN中,並使用最大池操作而不是bag-of-word操作。由於He等人提出的SPP模塊 [25]將輸出一維特徵向量,在全卷積網絡(FCN)中應用是不可行的。因此,在YOLOv3的設計中[63],Redmon和Farhadi將SPP模塊用大小爲k×k的kernel改爲最大池輸出的級聯,其中k = {1, 5, 9, 13},stride等於1。在這種設計下,相對較大的k×k maxpooling有效地增加了backbone特徵的感受野。在添加了改進版本的SPP模塊之後,YOLOv3-608在MS COCO對目標測任務上將AP50升級了2.7%,而額外的計算代價爲0.5%。 ASPP [5]模塊和改進的SPP模塊之間在操作上的差異主要在於原始k×k內核大小,max-pooling的步幅等於1到幾個3×3內核大小,擴張比等於k,在dilated卷積運算中stride爲1。 RFB模塊將使用k×k kernel的幾個膨脹卷積,膨脹比等於k,步幅等於1,以獲得比ASPP更全面的空間覆蓋。 RFB [47]僅花費7%的額外推理時間,即可將MS COCO上SSD的AP50提高5.7%。

    目標檢測中經常使用的注意力模塊主要分爲channel-wise注意力和point-wise注意力,這兩種注意力模型的代表 分別是Squeeze-and-Excitation(SE)[29]和空間注意力模塊(SAM)[85]。 儘管SE模塊可以將ImageNet圖像分類任務中的ResNet50的功能提高1%至top-1精度,但其代價僅是將計算工作量增加2%,但在GPU上通常會增加大約10%的推理時間, 因此更適合在移動設備中使用。 但是對於SAM,它只需要支付0.1%的額外計算,就可以在ImageNet圖像分類任務上將ResNet50-SE的top-1準確性提高0.5%。 最好的是,它根本不影響GPU上的推理速度。

    在特徵集成方面,早期的實踐是使用skip connection[51]或hyper-colmn[22]將低層物理特徵集成到高層語義特徵。 由於諸如FPN的多尺度預測方法已變得流行,因此提出了許多集成了不同特徵金字塔的輕量級模塊。 這種模塊包括SFAM [98],ASFF [48]和BiFPN [77]。 SFAM的主要思想是使用SE模塊在多尺度級聯特徵圖上執行通道級重新加權。 對於ASFF,它使用softmax作爲逐點級別的權重,然後添加不同比例的特徵圖。 在BiFPN中,提出了多輸入加權殘差連接以執行按比例的級別重新加權,然後添加不同尺度的特徵圖

    在深度學習的研究中,有些人專注於尋找良好的激活函數。良好的激活函數可以使梯度更有效地傳播,同時不會引起過多的額外計算成本。 Nair和Hinton [56]在2010年提出ReLU來基本上解決傳統的tanh和sigmoid激活函數中經常遇到的梯度消失問題。隨後,LReLU [54],PReLU [24],ReLU6 [28],Scaled Exponential線性單元SELU)[35],Swish [59],hard-Swish [27]和Mish [55]等。還提出了用於解決梯度消失問題的方法。 LReLU和PReLU的主要目的是解決輸出小於零時ReLU的梯度爲零的問題。至於ReLU6和Hard-Swish,它們是專門爲量化網絡設計的。爲了對神經網絡進行自歸一化,提出了SELU激活函數來滿足這一目標。要注意的一件事是,Swish和Mish都是連續可區分的激活函數。

    基於深度學習的目標檢測中常用的後處理方法是NMS,它可以用來過濾那些不好地預測爲同一目標的BBox,並僅保留更高響應的候選BBox。 NMS嘗試改進的方法與優化目標函數的方法一致。 NMS提出的原始方法沒有考慮上下文信息,因此Girshick等。 [19]在R-CNN中添加了分類置信度得分作爲參考,並且根據置信度得分的順序,從高分到低分的順序執行了貪婪的NMS。對於soft NMS[1],它考慮到一個問題,即物體的遮擋可能會導致帶有IoU分數的貪婪的NMS的置信度得分下降。 DIoU NMS [99]開發人員的思維方式是在soft NMS的基礎上將中心點距離的信息添加到BBox篩選過程中。值得一提的是,由於上述後處理方法均未直接涉及捕獲的圖像特徵,因此在後續的anchor-free方法開發中不再需要後處理

3 方法


    對生產系統和並行計算的優化,基本目的是神經網絡的快速操作速度,而不是並優化並行計算,而不是低計算量理論指標(BFLOP)。 我們提供了實時神經網絡的兩種選擇

    •對於GPU,我們在卷積層中使用少量組(1-8):CSPResNeXt50 / CSPDarknet53

    •對於VPU-我們使用分組卷積,但不要使用Squeeze-and-Excitement(SE)blocks-具體來說,它包括以下模型:EfficientNet-lite / MixNet [76] / GhostNet [21] / MobileNetV3

3.1 結構選擇

    我們的目標是在輸入網絡分辨率卷積層數參數數(filter大 size^ 2 *fileter * channel/groups)和層輸出(filter)的數量之間找到最佳平衡。 例如,我們的大量研究表明,就ILSVRC2012(ImageNet)數據集上的目標分類而言,CSPResNext50與CSPDarknet53相比要好得多[10]。 但是,相反,在檢測MS COCO數據集上的目標方面,CSPDarknet53比CSPResNext50更好

    下一個目標是針對不同的檢測器level從不同的backbone level中選擇額外的blocks增加感受野和參數聚集:例如  FPNPANASFFBiFPN

    對於分類最佳的參考模型對於檢測器並非總是最佳的。 與分類器相比,檢測器需要滿足以下條件:

    •更高的輸入網絡size(分辨率)– 用於檢測多個小型物體
    •更多的 layers – 更高的感受野,以覆蓋輸入網絡size的增加
    •更多參數 – 具有更大的模型容量,可在單個圖像中檢測不同大小的多個目標

    假設說,我們可以假設應該選擇一個具有較大感受野大小(具有大量3×3卷積層)和大量參數的模型作爲backbone。 表1顯示了CSPResNeXt50,CSPDarknet53和EfficientNet B3的信息。 CSPResNext50僅包含16個3×3卷積層,一個425×425感受野和20.6 M參數,而CSPDarknet53包含29個3×3卷積層,一個725×725感受野和27.6 M參數。 這種理論上的論證,再加上我們的大量實驗,表明CSPDarknet53神經網絡是兩者的最佳模型,是檢測器的backbone

 

    不同 size 感受野的影響總結如下:
    • 達到目標size - 允許查看整個目標
    • 達到網絡size - 允許查看目標附近的背景
    • 超過網絡size-增加image-point和最終激活之間的連接數

    我們在CSPDarknet53上添加了SPP block,因爲它顯着增加了感受野,分離出最重要的上下文(contex)特徵,並且幾乎沒有降低網絡運行速度。 針對不同檢測器level,我們使用PANet作爲來自不同backbone level的參數聚合方法,而不是YOLOv3中使用的FPN。

    最後,我們選擇CSPDarknet53 的backboneSPP附加模塊PANet路徑聚合neckYOLOv3(基於anchor)head作爲YOLOv4的體系結構。

 

 

 


 

 

 

 

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