1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        目標檢測算法YOLOv4詳解

        共 8353字,需瀏覽 17分鐘

         ·

        2020-11-19 12:03

        一句話總結:速度差不多的精度碾壓,精度差不多的速度碾壓!

        YOLOv4是精度速度最優(yōu)平衡, 各種調(diào)優(yōu)手段是真香,本文主要從以下幾個方面進行闡述:

        • YOLOv4介紹
        • YOLOv4框架原理
        • BackBone訓練策略
        • BackBone推理策略
        • 檢測頭訓練策略
        • 檢測頭推理策略

        1.YOLOv4介紹

        YOLOV4其實是一個結合了大量前人研究技術,加以組合并進行適當創(chuàng)新的算法,實現(xiàn)了速度和精度的完美平衡??梢哉f有許多技巧可以提高卷積神經(jīng)網(wǎng)絡(CNN)的準確性,但是某些技巧僅適合在某些模型上運行,或者僅在某些問題上運行,或者僅在小型數(shù)據(jù)集上運行;我們來碼一碼這篇文章里作者都用了哪些調(diào)優(yōu)手段:加權殘差連接(WRC),跨階段部分連接(CSP),跨小批量標準化(CmBN),自對抗訓練(SAT),Mish激活,馬賽克數(shù)據(jù)增強,CmBN,DropBlock正則化,CIoU Loss等等。經(jīng)過一系列的堆料,終于實現(xiàn)了目前最優(yōu)的實驗結果:43.5%AP(在Tesla V100上,MS COCO數(shù)據(jù)集的實時速度約為65FPS)。

        YOLOv4的貢獻如下:

        • 開發(fā)了一個高效、強大的目標檢測模型。它使每個人都可以使用1080 Ti2080 TiGPU來訓練一個超級快速和準確的目標探測器。
        • 驗證了在檢測器訓練過程中,最先進的Bag-of-FreebiesBag-of-Specials 的目標檢測方法的影響。
        • 修改了最先進的方法,使其更有效,更適合于單GPU訓練,包括CBN、PAN、SAM等。

        總之一句話:速度差不多的精度碾壓;精度差不多的速度碾壓。

        YOLOV4論文: https://arxiv.org/pdf/2004.10934.pdf

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

        2.YOLOv4框架原理

        我們主要從通用框架,CSPDarknet53SPP結構,PAN結構和檢測頭YOLOv3出發(fā),來一起學習了解下YOLOv4框架原理。

        2.1 目標檢測器通用框架

        目前檢測器通常可以分為以下幾個部分,不管是two-stage還是one-stage都可以劃分為如下結構,只不過各類目標檢測算法設計改進側(cè)重在不同位置:


        如上圖,除了輸入,一般one-stage的目標檢測算法通常由提取特征的backbone,傳輸?shù)綑z測網(wǎng)絡的Neck部分和負責檢測的Head部分。而two-stage的算法通常還包括空間預測部分。網(wǎng)絡中常用的模塊為:

        • 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-stageYOLO網(wǎng)絡主要由三個主要組件組成:

        • Backbone -在不同圖像細粒度上聚合并形成圖像特征的卷積神經(jīng)網(wǎng)絡。
        • Neck:一系列混合和組合圖像特征的網(wǎng)絡層,并將圖像特征傳遞到預測層。
        • Head:對圖像特征進行預測,生成邊界框和并預測類別。

        這里先直接上YOLOv4的整體原理圖(來源網(wǎng)絡)如下:

        如上圖,整體框架跟我們之前學的YOLOv3很是類似。這里先大致看下,接下來我們將逐步分析各個部分,首先,我們先看特征提取網(wǎng)絡Backbone.

        2.2 CSPDarknet53

        我們前面知道在YOLOv3中,特征提取網(wǎng)絡使用的是Darknet53,而在YOLOv4中,對Darknet53做了一點改進,借鑒了CSPNet,CSPNet全稱是Cross Stage Partial Networks,也就是跨階段局部網(wǎng)絡。CSPNet解決了其他大型卷積神經(jīng)網(wǎng)絡框架Backbone中網(wǎng)絡優(yōu)化的梯度信息重復問題,將梯度的變化從頭到尾地集成到特征圖中,因此減少了模型的參數(shù)量和FLOPS數(shù)值,既保證了推理速度和準確率,又減小了模型尺寸。如下圖:

        CSPNet實際上是基于Densnet的思想,復制基礎層的特征映射圖,通過dense block發(fā)送副本到下一個階段,從而將基礎層的特征映射圖分離出來。這樣可以有效緩解梯度消失問題(通過非常深的網(wǎng)絡很難去反推丟失信號) ,支持特征傳播,鼓勵網(wǎng)絡重用特征,從而減少網(wǎng)絡參數(shù)數(shù)量。CSPNet思想可以和ResNet、ResNeXtDenseNet結合,目前主要有CSPResNext50CSPDarknet53兩種改造Backbone網(wǎng)絡。

        考慮到幾方面的平衡:輸入網(wǎng)絡分辨率/卷積層數(shù)量/參數(shù)數(shù)量/輸出維度。一個模型的分類效果好不見得其檢測效果就好,想要檢測效果好需要以下幾點:

        • 更大的網(wǎng)絡輸入分辨率——用于檢測小目標
        • 更深的網(wǎng)絡層——能夠覆蓋更大面積的感受野
        • 更多的參數(shù)——更好的檢測同一圖像內(nèi)不同size的目標

        這樣最終的CSPDarknet53結構就如下圖:

        CSPNet論文: https://arxiv.org/pdf/1911.11929v1.pdf

        為了增大感受野,作者還使用了SPP-block,使用PANet代替FPN進行參數(shù)聚合以適用于不同level的目標檢測。

        2.3 SPP結構

        SPP-Net結構我們之前也有學過,SPP-Net全稱Spatial Pyramid Pooling Networks,當時主要是用來解決不同尺寸的特征圖如何進入全連接層的,直接看下圖,下圖中對任意尺寸的特征圖直接進行固定尺寸的池化,來得到固定數(shù)量的特征。

        如上圖,以3個尺寸的池化為例,對特征圖進行一個最大值池化,即一張?zhí)卣鲌D得取其最大值,得到1*d(d是特征圖的維度)個特征;對特征圖進行網(wǎng)格劃分為2x2的網(wǎng)格,然后對每個網(wǎng)格進行最大值池化,那么得到4*d個特征;同樣,對特征圖進行網(wǎng)格劃分為4x4個網(wǎng)格,對每個網(wǎng)格進行最大值池化,得到16*d個特征。 接著將每個池化得到的特征合起來即得到固定長度的特征個數(shù)(特征圖的維度是固定的),接著就可以輸入到全連接層中進行訓練網(wǎng)絡了。用到這里是為了增加感受野。

        2.4 PAN結構

        YOLOv4使用PANet(Path Aggregation Network)代替FPN進行參數(shù)聚合以適用于不同level的目標檢測, PANet論文中融合的時候使用的方法是Addition,YOLOv4算法將融合的方法由加法改為Concatenation。如下圖:

        是一種特征圖融合方式。

        2.5 檢測頭YOLOv3

        對于檢測頭部分,YOLOv4繼續(xù)采用YOLOv3算法的檢測頭,不再贅述。

        3.BackBone訓練策略

        這里我們主要從數(shù)據(jù)增強,DropBlock正則化,類標簽平滑方面來學習下BackBone訓練策略。

        3.1 數(shù)據(jù)增強

        • CutMix

        YOLOv4選擇用CutMix的增強方式,CutMix的處理方式也比較簡單,同樣也是對一對圖片做操作,簡單講就是隨機生成一個裁剪框Box,裁剪掉A圖的相應位置,然后用B圖片相應位置的ROI放到A圖中被裁剪的區(qū)域形成新的樣本,ground truth標簽會根據(jù)patch的面積按比例進行調(diào)整,比如0.6像狗,0.4像貓,計算損失時同樣采用加權求和的方式進行求解。這里借CutMix的地方順帶說下幾種類似的增強方式:上圖是CutMix論文中作者對幾種增強方式做的對比,結果顯而易見,CutMix的增強方式在三個數(shù)據(jù)集上的表現(xiàn)都是最優(yōu)的。其中Mixup是直接求和兩張圖,如同附身,鬼影一樣,模型很難學到準確的特征圖響應分布。Cutout是直接去除圖像的一個區(qū)域,這迫使模型在進行分類時不能對特定的特征過于自信。然而,圖像的一部分充滿了無用的信息,這是一種浪費。在CutMix中,將圖像的一部分剪切并粘貼到另一個圖像上,使得模型更容易區(qū)分異類。

        CutMix論文: https://arxiv.org/pdf/1905.04899v2.pdf

        • Mosaic

        Yolov4Mosaic數(shù)據(jù)增強是參考CutMix數(shù)據(jù)增強,理論上類似。區(qū)別在于Mosaic是一種將4張訓練圖像合并成一張進行訓練的數(shù)據(jù)增強方法(而不是CutMix中的2張)。這增強了對正常背景(context)之外的對象的檢測,豐富檢測物體的背景。此外,每個小批包含一個大的變化圖像(4倍),因此,減少了估計均值和方差的時需要大mini-batch的要求,降低了訓練成本。如下圖:

        3.2 DropBlock正則化

        正則化技術有助于避免數(shù)據(jù)科學專業(yè)人員面臨的最常見的問題,即過擬合。對于正則化,已經(jīng)提出了幾種方法,如L1L2正則化、DropoutEarly Stopping和數(shù)據(jù)增強。這里YOLOv4用了DropBlock正則化的方法。

        DropBlock方法的引入是為了克服Dropout隨機丟棄特征的主要缺點,Dropout被證明是全連接網(wǎng)絡的有效策略,但在特征空間相關的卷積層中效果不佳。DropBlock技術在稱為塊的相鄰相關區(qū)域中丟棄特征。這樣既可以實現(xiàn)生成更簡單模型的目的,又可以在每次訓練迭代中引入學習部分網(wǎng)絡權值的概念,對權值矩陣進行補償,從而減少過擬合。如下圖:

        DropBlock論文中作者最終在ImageNet分類任務上,使用Resnet-50結構,將精度提升1.6%個點,在COCO檢測任務上,精度提升1.6%個點。

        DropBlock論文: https://arxiv.org/pdf/1810.12890.pdf

        3.3 類標簽平滑

        對于分類問題,特別是多分類問題,常常把向量轉(zhuǎn)換成one-hot-vector,而one-hot帶來的問題: 對于損失函數(shù),我們需要用預測概率去擬合真實概率,而擬合one-hot的真實概率函數(shù)會帶來兩個問題:

        • 無法保證模型的泛化能力,容易造成過擬合;
        • 全概率和0概率鼓勵所屬類別和其他類別之間的差距盡可能加大,而由梯度有界可知,這種情況很難適應。會造成模型過于相信預測的類別。

        對預測有100%的信心可能表明模型是在記憶數(shù)據(jù),而不是在學習。標簽平滑調(diào)整預測的目標上限為一個較低的值,比如0.9。它將使用這個值而不是1.0來計算損失。這個概念緩解了過度擬合。說白了,這個平滑就是一定程度縮小labelminmax的差距,label平滑可以減小過擬合。所以,適當調(diào)整label,讓兩端的極值往中間湊湊,可以增加泛化性能。

        4.BackBone推理策略

        這里主要從Mish激活函數(shù),MiWRC策略方面進行闡述BackBone推理策略。

        4.1 Mish激活函數(shù)

        對激活函數(shù)的研究一直沒有停止過,ReLU還是統(tǒng)治著深度學習的激活函數(shù),不過,這種情況有可能會被Mish改變。Mish是另一個與ReLUSwish非常相似的激活函數(shù)。正如論文所宣稱的那樣,Mish可以在不同數(shù)據(jù)集的許多深度網(wǎng)絡中勝過它們。公式如下:

        Mish是一個平滑的曲線,平滑的激活函數(shù)允許更好的信息深入神經(jīng)網(wǎng)絡,從而得到更好的準確性和泛化;在負值的時候并不是完全截斷,允許比較小的負梯度流入。實驗中,隨著層深的增加,ReLU激活函數(shù)精度迅速下降,而Mish激活函數(shù)在訓練穩(wěn)定性、平均準確率(1%-2.8%)、峰值準確率(1.2% - 3.6%)等方面都有全面的提高。如下圖:

        Mish論文: https://arxiv.org/pdf/1908.08681.pdf

        4.2 MiWRC策略

        MiWRCMulti-input weighted residual connections的簡稱, 在BiFPN中,提出了用MiWRC來執(zhí)行標尺度級重加權,添加不同尺度的特征映射。我們已經(jīng)討論了FPNPAN作為例子。下面的圖(d)顯示了另一種被稱為BiFPNneck設計,根據(jù)BiFPN的論文,該設計具有更好的準確性和效率權衡。


        上圖中 (a)FPN引入自頂向下的路徑,將多尺度特征從3級融合到7級(P3-P7);(b)PANETFPN之上增加一個額外的自下而上的路徑;(c)NAS-FPN使用神經(jīng)網(wǎng)絡搜索找到一個不規(guī)則的特征拓撲網(wǎng)絡,然后重復應用同一塊拓撲結構;(d)是這里的BiFPN,具有更好的準確性和效率權衡。將該neck放到整個整個網(wǎng)絡的連接中如下圖:

        上圖采用EfficientNet作為骨干網(wǎng)絡,BiFPN作為特征網(wǎng)絡,共享class/box預測網(wǎng)絡。 基于不同的資源約束,BiFPN層和類/盒網(wǎng)層都被重復多次。

        BiFPN論文: https://arxiv.org/pdf/1911.09070.pdf

        5.檢測頭訓練策略

        前面介紹BackBone訓練策略的時候,以及學習過DropBlock正則化,Mosaic數(shù)據(jù)增強的方法了,這兩種方法在檢測頭訓練的過程中也有用到這里不在贅述。我們一起看下檢測頭訓練中采用的其他策略。

        5.1 CIoU-loss

        損失函數(shù)給出了如何調(diào)整權重以降低loss。所以在我們做出錯誤預測的情況下,我們期望它能給我們指明前進的方向。但如果使用IoU,考慮兩個預測都不與ground truth重疊,那么IoU損失函數(shù)不能告訴哪一個是更好的,或者哪個更接近ground truth。這里順帶看下常用的幾種loss的形式,如下:

        • 經(jīng)典IoU loss:

        IoU算法是使用最廣泛的算法,大部分的檢測算法都是使用的這個算法。

        • GIoU:Generalized IoU

        GIoU考慮到,當檢測框和真實框沒有出現(xiàn)重疊的時候IoUloss都是一樣的,因此GIoU就加入了C檢測框(C檢測框是包含了檢測框和真實框的最小矩形框),這樣就可以解決檢測框和真實框沒有重疊的問題。但是當檢測框和真實框之間出現(xiàn)包含的現(xiàn)象的時候GIoU就和IoU loss是同樣的效果了。

        其中,C是指能包含predict boxGround Truth box的最小box

        • DIoU:Distance IoU

        DIoU考慮到GIoU的缺點,也是增加了C檢測框,將真實框和預測框都包含了進來,但是DIoU計算的不是框之間的交并,而是計算的每個檢測框之間的歐氏距離,這樣就可以解決GIoU包含出現(xiàn)的問題。

        其中是指predict boxGT box中心點的距離的平方,而是指剛好能包含predict boxGT box的最小box的對角線長度平方。

        • CIoU:Complete IoU

        CIoU就是在DIoU的基礎上增加了檢測框尺度的loss,增加了長和寬的loss,這樣預測框就會更加的符合真實框。

        實際上,CIOU只是在DIOU基礎上增加了一項。 其中:

        5.2 CmBN策略

        BN就是僅僅利用當前迭代時刻信息進行norm,而CBN在計算當前時刻統(tǒng)計量時候會考慮前k個時刻統(tǒng)計量,從而實現(xiàn)擴大batch size操作。同時作者指出CBN操作不會引入比較大的內(nèi)存開銷,訓練速度不會影響很多,但是訓練時候會慢一些,比GN還慢。

        CmBNCBN的改進版本,其把大batch內(nèi)部的4mini batch當做一個整體,對外隔離。CBN在第t時刻,也會考慮前3個時刻的統(tǒng)計量進行匯合,而CmBN操作不會,不再滑動cross,其僅僅在mini batch內(nèi)部進行匯合操作,保持BN一個batch更新一次可訓練參數(shù)。

        BN:無論每個batch被分割為多少個mini batch,其算法就是在每個mini batch前向傳播后統(tǒng)計當前的BN數(shù)據(jù)(即每個神經(jīng)元的期望和方差)并進行Nomalization,BN數(shù)據(jù)與其他mini batch的數(shù)據(jù)無關。CBN:每次iteration中的BN數(shù)據(jù)是其之前n次數(shù)據(jù)和當前數(shù)據(jù)的和(對非當前batch統(tǒng)計的數(shù)據(jù)進行了補償再參與計算),用該累加值對當前的batch進行Nomalization。好處在于每個batch可以設置較小的sizeCmBN:只在每個Batch內(nèi)部使用CBN的方法,個人理解如果每個Batch被分割為一個mini batch,則其效果與BN一致;若分割為多個mini batch,則與CBN類似,只是把mini batch當作batch進行計算,其區(qū)別在于權重更新時間點不同,同一個batch內(nèi)權重參數(shù)一樣,因此計算不需要進行補償。

        5.3 自對抗訓練(SAT)

        SAT為一種新型數(shù)據(jù)增強方式。在第一階段,神經(jīng)網(wǎng)絡改變原始圖像而不是網(wǎng)絡權值。通過這種方式,神經(jīng)網(wǎng)絡對其自身進行一種對抗式的攻擊,改變原始圖像,制造圖像上沒有目標的假象。在第二階段,訓練神經(jīng)網(wǎng)絡對修改后的圖像進行正常的目標檢測。

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

        5.4 消除網(wǎng)格敏感度

        邊界框b的計算方式為:

        對于的情況,我們需要分別具有很大的負值和正值。但我們可以將與一個比例因子(>1.0)相乘,從而更輕松地實現(xiàn)這一目標。

        5.5 單目標使用多Anchor

        如果 IoU(ground truth, anchor) > IoU threshold,則為單個基本真值使用多個錨點。(注:作者沒有更多地說明該方法在 YOLOv4 中的作用。)

        5.6 余弦模擬退火

        余弦調(diào)度會根據(jù)一個余弦函數(shù)來調(diào)整學習率。首先,較大的學習率會以較慢的速度減小。然后在中途時,學習的減小速度會變快,最后學習率的減小速度又會變得很慢。

        這張圖展示了學習率衰減的方式(下圖中還應用了學習率預熱)及其對mAP的影響??赡芸雌饋聿⒉幻黠@,這種新的調(diào)度方法的進展更為穩(wěn)定,而不是在停滯一段時間后又取得進展。

        余弦模擬退火論文: https://arxiv.org/pdf/1608.03983.pdf

        5.7 遺傳算法優(yōu)化超參

        關于遺傳算法的文章,我們之前也有學過:遺傳算法如何模擬大自然的進化?

        遺傳算法論文: https://arxiv.org/pdf/2004.10934.pdf

        5.8 隨機形狀訓練

        許多單階段目標檢測器是在固定的輸入圖像形狀下訓練的。為了提高泛化效果,我們可以對不同圖像大小的模型進行訓練。(在YOLO中進行多尺度訓練)。

        6.檢測頭推理策略

        在檢測頭推理中除了用了上面講的Mish, SPP, PAN技術外,還用了SAMDIoU-NMS,如下:

        6.1 SAM模塊

        注意力機制在DL設計中被廣泛采用。在SAM中,最大值池化和平均池化分別用于輸入feature map,創(chuàng)建兩組feature map。結果被輸入到一個卷積層,接著是一個Sigmoid函數(shù)來創(chuàng)建空間注意力。

        將空間注意掩模應用于輸入特征,輸出精細的特征圖。

        YOLOv4中,使用修改后的SAM而不應用最大值池化和平均池化。

        YOLOv4中,FPN概念逐漸被實現(xiàn)/替換為經(jīng)過修改的SPP、PANPAN。

        6.2 DIoU-NMS

        NMS過濾掉預測相同對象的其他邊界框,并保留具有最高可信度的邊界框。

        DIoU(前面討論過的) 被用作非最大值抑制(NMS)的一個因素。該方法在抑制冗余框的同時,采用IoU和兩個邊界盒中心點之間的距離。這使得它在有遮擋的情況下更加健壯。

        7.YOLOv4小結

        為了提升準確度,可以針對訓練過程進行一些優(yōu)化,比如數(shù)據(jù)增強、類別不平衡、成本函數(shù)、軟標注…… 這些改進不會影響推理速度,可被稱為「Bag of freebies」。另外還有一些改進可稱為「bag of specials」,僅需在推理時間方面做少許犧牲,就能獲得優(yōu)良的性能回報。這類改進包括增大感受野、使用注意力機制、集成跳過連接(skip-connection)或 FPN等特性、使用非極大值抑制等后處理方法。

        本文從YOLOv4介紹,YOLOv4框架原理,BackBone訓練策略,BackBone推理策略,檢測頭訓練策略,檢測頭推理策略這幾個大方面進行詳細的闡述了YOLOv4中所用到的各種策略,希望對大家有所幫助。

        ?點個贊再走唄?

        瀏覽 316
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            伊人天堂午夜精品福利网 | 最新操逼网 | 亚洲高清无码视频在线观看 | 高清韩国一级婬片A片 | 91人妻视频蝌蚪视频 | 国产护士v骚护士 | 动漫美女被到爽流男男 | 高清无码www | 免费成人在线观看视频 | 新激情五月网 |