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

 

精彩內容

YOLOv4來了!43.5%mAP+65FPS 精度速度最優平衡, 各種調優手段釋真香!

作者團隊:Alexey Bochkovskiy&中國臺灣中央研究院

論文鏈接:

https://arxiv.org/pdf/2004.10934.pdf

代碼鏈接:

https://github.com/AlexeyAB/darknet

 

1 Introduction

 

/可以說有許多技巧可以提高卷積神經網絡(CNN)的準確性,但是某些技巧僅適合在某些模型上運行,或者僅在某些問題上運行,或者僅在小型數據集上運行;我們來碼一碼這篇文章裏作者都用了哪些調優手段:

  • 加權殘差連接(WRC)

  • 跨階段部分連接(CSP)

  • 跨小批量標準化(CmBN)

  • 自對抗訓練(SAT)

  • Mish激活

  • 馬賽克數據增強

  • CmBN

  • DropBlock正則化

  • CIoU丟失

 

有沒有被驚到!

經過一系列的堆料,終於實現了目前最優的實驗結果:43.5%的AP(在Tesla V100上,MS COCO數據集的實時速度約爲65FPS)。


這篇文章的貢獻如下:

  • 開發了一個高效、強大的目標檢測模型。它使每個人都可以使用1080 Ti或2080 TiGPU來訓練一個超級快速和準確的目標探測器。

  • 驗證了在檢測器訓練過程中,最先進的Bag-of-Freebies和Bag-of-Specials 的目標檢測方法的影響。

  • 修改了最先進的方法,使其更有效,更適合於單GPU訓練,包括CBN、PAN、SAM等。


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

 

2 Relate Works

 

作者對現有目標檢測算法進行了總結:


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

作者把所有的調優手段分爲了兩大類“Bag of freebies(免費禮包)”和“Bag of specials(特價包)”,細品 還真形象。

 

  • Bag of freebies

是指在離線訓練階段爲了提升精度而廣泛使用的調優手段,而這種技巧並不在推斷中使用,不會增加推斷時間。

  • 數據類:

數據增強(random erase/CutOut/hide-and-seek/grid mask/MixUp/CutMix/GAN)

數據分佈:two-stage的有難例挖掘,one-stage的有focal loss。

  • 特徵圖類:

DropOut/DropConnect/DropBlock

  • Bounding Box目標函數類:

MSE/ IoU loss/l1、l2 loss/GIoU loss/DIoU loss/CIoU loss

 

  • Bag of specials

是指在推斷過程中增加的些許成本但能換來較大精度提升的技巧。

  • 增大感受野類:

SPP/ASPP/RFB

  • 注意力類:

Squeeze-and-Excitation (SE)/Spa-tial Attention Module (SAM)

  • 特徵集成類:

SFAM/ASFF/BiFPN

  • 激活函數類:

ReLu/LReLU/PReLU/ReLU6/Scaled ExponentialLinear Unit (SELU)/Swish/hard-Swish/Mish 

  • 後處理類:

soft NMS/DIoU NMS 

 

 

3 YOLOv4 Method

 

3.1 架構選擇

作者選擇架構主要考慮幾方面的平衡:輸入網絡分辨率/卷積層數量/參數數量/輸出維度。

 

一個模型的分類效果好不見得其檢測效果就好,想要檢測效果好需要以下幾點:

  • 更大的網絡輸入分辨率——用於檢測小目標

  • 更深的網絡層——能夠覆蓋更大面積的感受野

  • 更多的參數——更好的檢測同一圖像內不同size的目標


假設符合上面幾點要求的backboone就是預期的backbone,作者對CSPResNext50和CSPDarknet53進行了比較,如表1所示,表明CSPDarknet53神經網絡是作爲目標檢測backbone的最優選擇。

爲了增大感受野,作者使用了SPP-block,使用PANet代替FPN進行參數聚合以適用於不同level的目標檢測。
 

最終YOLOv4的架構出爐:

  • backbone:CSPResNext50

  • additional block:SPP-block

  • path-aggregation neck:PANet

  • heads:YOLOv3的heads

 

3.2 BoF(免費禮包)和BoS(特價包)的選擇

 

CNN常用的通用技巧:

 

  • 對於訓練激活函數,由於PReLU和SELU更難訓練,而ReLU6是專門爲量化網絡設計的,因此將上述其餘激活函數從候選列表中刪除。

  • 在reqularization方法上,發表Drop-Block的人將其方法與其他方法進行了詳細的比較,其regularization方法取得了很大的成果。因此,作者毫不猶豫地選擇DropBlock作爲regularization方法。

  • 在歸一化方法的選擇上,由於關注的是隻使用一個GPU的訓練策略,所以沒有考慮syncBN。

 

3.3 其他改進


爲了使設計的檢測器更適合於單GPU上的訓練,作者做了如下的附加設計和改進:

  • 介紹了一種新的數據增強Mosaic法和Self-AdversarialTraining 
    自對抗訓練法。

  • 應用遺傳算法選擇最優超參數。

  • 改進SAM,改進PAN,和交叉小批量標準化(CmBN),使我們的設計適合於有效的訓練和檢測

 

  • Mosaic法

是一種將4張訓練圖片混合成一張的新數據增強方法,這樣可以豐富圖像的上下文信息。如下圖所示:

這種做法的好處是允許檢測上下文之外的目標,增強模型的魯棒性。此外,在每一層從4個不同的圖像批處理標準化計算激活統計,這大大減少了對大mini-batch處理size的需求。

 

  • AdversarialTraining自對抗訓練

這是一種新的數據擴充技術,該技術分前後兩個階段進行。

在第一階段,神經網絡改變原始圖像而不是網絡權值。通過這種方式,神經網絡對自身執行一種對抗性攻擊,改變原始圖像,從而造成圖像上沒有目標的假象。
在第二階段,訓練神經網絡對修改後的圖像進行正常的目標檢測。

 

  • CmBN

表示CBN的修改版本,如下圖所示,定義爲跨微批量標準化(CmBN)。這僅收集單個批中的小批之間的統計信息。

 

  • SAM改進

將SAM從空間上的attention修改爲點上的attention,並將PAN的short-cut連接改爲拼接,分別如圖5和圖6所示:

 

3.4 YOLOv4架構總結

 

  • YOLOv4 架構:

Backbone: CSPDarknet53

Neck: SPP [25], PAN 

Head: YOLOv3

 

  • YOLOv4 使用的調優技巧:

BoF

backbone:CutMix和mosaic數據增強,DropBlock正則化,類標籤平滑。

detector:ciu -loss,CmBN, DropBlock正則化,Mosaic數據增強,自對抗訓練,消除網格敏感性,爲單個groundtruth使用多個anchors,餘弦退火調度器,最優超參數,隨機訓練形狀

 

BoS

backbone:Mish激活、跨級部分連接(CSP)、多輸入加權剩餘連接(MiWRC)。

detector:Mish activation,SPP-block, SAM-block, PAN path-aggregation block,DIoU-NMS.

 

 

4 Experiments

 

  • 4.1 實驗建立

 

在ImageNet圖像分類實驗中,默認的超參數如下:

  • 訓練步驟爲8,000,000;

  • 批量尺寸爲128,

  • 小批量尺寸爲32;

  • 採用多項式衰減學習速率調度策略,

  • 初始學習速率爲0.1,

  • 熱身步驟爲1000;

  • momentum和weight衰減分別設置爲0.9和0.005。

 

在BoF實驗中,還增加了50%的訓練步驟,驗證了混合、切分、鑲嵌、模糊數據增強和標籤平滑正則化方法。

 

在BoS實驗中,使用與默認設置相同的超參數。比較了LReLU、Swish和Mish激活函數的作用。所有實驗均使用1080Ti或2080Ti GPU進行訓練。

 

MS COCO目標檢測實驗中,默認的超參數爲:

  • 訓練步驟爲500500;

  • 採用初始學習速率0.01的步長衰減學習速率策略,在400000步和450000步分別乘以因子0.1;

  • momentum衰減爲0.9,weight衰減爲0.0005。

  • 所有的架構都使用一個GPU來執行批處理大小爲64的多尺度訓練,而小批處理大小爲8或4取決於架構和GPU內存限制。

除了使用遺傳算法進行超參數搜索實驗外,其他實驗均使用默認設置。

  • 遺傳算法利用YOLOv3-SPP進行帶GIoU損失的訓練,搜索300個epoch的min-val5k集。

  • 遺傳算法實驗採用搜索學習率0.00261、momentum0.949、IoU閾值分配ground truth 0.213、損失歸一化器0.07。

 

對於所有實驗,只使用一個GPU訓練,因此不會使用syncBN等優化多個gpu的技術。

 

  • 4.2 不同特徵對分類器訓練的影響

 

具體來說,如Fugure7所示,類標籤平滑、不同數據增強技術、雙側模糊、MixUp、CutMix和Mosaic的影響,以及不同激活的影響,如Leaky-ReLU(默認)、Swish和Mish。結果如下表所示:

 

 

  • 4.3不同特徵對檢測器訓練的影響

進一步研究不同的Bag-of-Freebies (BoF-detector)對detector訓練精度的影響,如表4所示。通過研究在不影響FPS的情況下提高檢測精度的不同特徵。

 

進一步研究不同的bag-specials(boss-detector)對檢測器訓練精度的影響,包括PAN、RFB、SAM、Gaussian YOLO(G)、ASFF,如表5所示。

 

  • 4.4 不同的backbone和預先訓練的重量對檢波器訓練的影響

 

  • 4.5 不同的mini-batch size對檢測器訓練的影響

 

5 Results

 

  • 與目前較前沿檢測模型的比較:

由於不同的方法使用不同架構的gpu進行推理時間驗證,我們將yolov4運行在通常採用的Maxwell架構、Pascal架構和Volta架構的gpu上,並將其與其他最先進的方法進行比較。

 

 

  • 表8列出了使用Maxwell GPU的幀率比較結果,可以是GTX Titan X (Maxwell)或者Tesla M40 GPU。

 

  • 表9列出了使用Pascal GPU的幀率比較結果,可以是Titan X (Pascal)、Titan Xp、GTX 1080 Ti或Tesla P100 GPU。

 

  • 表10列出了使用VoltaGPU的幀率比較結果,可以是Titan Volta,也可以是Tesla V100 GPU。

 

 

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