YOLOv4論文筆記詳解

論文作者不再是YOLO 之父 Joseph Redmon,而是來自俄羅斯的 Alexey Bochkovskiy和兩位臺灣開發者Chien-Yao Wang、Hong-Yuan Mark Liao。

論文地址:YOLOv4: Optimal Speed and Accuracy of Object Detection (Optimal :最優的)

Github上已經有了一些代碼:

  1. YOLOv4 的 TensorFlow 2.0 實現:https://github.com/xiao9616/yolo4_tensorflow2

  2. YOLOv4 的 TensorFlow 實現(持續更新):https://github.com/rrddcc/YOLOv4_tensorflow

  3. YOLOv4 的 TensorFlow 實現:https://github.com/klauspa/Yolov4-tensorflow

  4. YOLOv4 的 PyTorch 實現:https://github.com/GZQ0723/YoloV4

  5. YOLOv4(TensorFlow後端)的 Keras 實現:https://github.com/Ma-Dan/keras-yolo4

  6. YOLOv4 的 PyTorch 實現:https://github.com/Tianxiaomo/pytorch-YOLOv4

下面簡單介紹下論文的方法,遇到新的點會說明下。

摘要

原文翻譯:


有大量的技巧可以提高卷積神經網絡(CNN)的精度。需要在大數據集下對這種技巧的組合進行實際測試,並對結果進行理論論證要求。某些技巧僅在某些模型上使用和專門針對某些問題,或只針對小規模的數據集;而一些技巧,如批處理歸一化、殘差連接等,適用於大多數的模型、任務和數據集。

我們假設這種通用的技巧包括:Weighted-Residual-Connection(WRC)、Cross-Stage-Partial-connections (CSP)、跨小型批量連接(CSP)、Cross mini-Batch Normalization(CmBN),Self-adversarial-trainin(SAT)和Mish-activation。

我們在本文中使用這些新的技巧:WRC、CSP、CmBN、SAT,Mish-activation,Mosaic data augmentation、CmBN、DropBlock正則化和CIoU損失,以及組合技巧,以達到最好的效果。在MS COCO數據集中的AP43.5%(65.7% AP50),在實際應用中,Tesla V100上速度可達到65FPS。


摘要說明了:摘要一下子出現很多詞彙,這些都是YOLOv4引進的各種技巧(論文涉及的技巧達20多個),正文會有說明。這些技巧一般來自頂會論文,有的技巧是在過擬合數據,而有些技巧則是真的適合通用模型。同時作者也做了大量大量的實驗,可以說YOLOv4是一篇效果顯著的實驗報告了,也可以看作各種技巧的綜述吧,因爲論文引用量達到102篇。

同時論文也說明了最後選用了哪些技巧。

Tips:技巧類的論文還有李沐老師的兩篇論文,分別是

1 引言

這一部分主要是說明論文的目的:設計生產系統中目標檢測器的快速運行速度,優化並行計算,而不是低計算量理論指標 (BFLOP)。作者希望設計的對象能夠輕鬆訓練和使用。例如,任何使用傳統 GPU 進行訓練和測試的人都可以獲得實時、高質量和令人信服的目標檢測結果。

同時說明了文章的貢獻點

  1. 我們開發一種高效、強大的物體檢測模型。它使每個人都可以使用1080 Ti或2080 Ti GPU來訓練超快速和準確的目標檢測器。
  2. 在檢測器訓練期間,我們驗證最先進的我們驗證了最先進的Bag-of-FreebiesBag-of-Specials檢測方法的影響。
  3. 我們修改最先進的方法,使其更高效,適合單次 GPU 訓練,包括 CBN 、PAN 、SAM 等。

分析

  • 第1點表示我們用單卡就能完成檢測訓練過程。
  • 第2點中Bag-of-Freebies 和Bag-of-Specials翻譯是免費包特殊包
    • Bag-of-Freebies 可以理解爲數據增擴、標籤軟化等外在訓練方法,即不需要改變網絡模型。
    • Bag-of-Specials我理解的是用最新最先進的方法(網絡模塊)來魔改檢測模型。
  • 第3點表示除了在模型上進行魔改,作者還加了其他的技巧。

2 相關工作

這部分主要解釋Bag-of-Freebies 和Bag-of-Specials,分三個部分。

2.1 目標檢測模型

主要是看論文這張圖:
在這裏插入圖片描述
作者把檢測模型分成:輸入骨幹結構頸部(Neck)頭部。每個部位都能玩出花來。

  • 其中骨幹結構主要是提取特徵,去掉頭部也可以做分類任務。

  • 頸部(Neck)主要是對特徵進行融合,這就有很多技巧在裏面了。

2.2 Bag of freebies

“bag of freebies” 是指目標檢測器在不增加推理損耗的情況下達到更好的精度,這些方法稱爲只需轉變訓練策略或只增加訓練量成本。也就是說數據增擴、標籤軟化、Focal Loss等這些不用改變網絡結構的方法。

2.3 Bag of specials

“Bag of specials”是指插入模塊是用來增強某些屬性的,顯著提高目標檢測的準確性。比如SE模塊等注意力機制模塊,還有特徵融合FPN等模塊。

3 方法

此部分是論文的核心部分。

基本目標是加快神經網絡的運行速度,在生產系統中優化並行計算,而不是低計算量理論指標(BFLOP)。(這句話在論文第二次出現)

3.1 網路結構選擇

原文:我們的目標是在輸入網絡分辨率、卷積層數、參數編號(濾波器大小 2 + 濾波器 + 通道/組)和圖層輸出數(篩選器)之間找到最佳平衡。(這句話很類似EfficientDet中如何學習參數,也是在分辨率、卷積層數、通道數等做選擇)

作者採用的是CSPResNeXt50 / CSPDarknet53作爲網絡骨幹結構。


CSP是可以增強CNN學習能力的新型backbone,論文發表2019年11月份,地址:CSPNET

主要技巧是:CSPNet將底層的特徵映射分爲兩部分,一部分經過密集塊和過渡層,另一部分與傳輸的特徵映射結合到下一階段。
在這裏插入圖片描述
CSPDarknet53結構也是類似。


研究表明:CSPResNeXt50在分類方面優於CSPDarkNet53,而在檢測方面反而表現要差。

作者認爲檢測模型需要選擇具有更大感受野、更大參數的模型作爲backbone。作者實驗對比了CSPResNext50、CSPDarknet53和EfficientNet-B3。從理論與實驗角度表明:CSPDarkNet53更適合作爲檢測模型的Backbone。(還是自家的網絡結構好用)
在這裏插入圖片描述
最後,我們選擇CSPDarknet53主幹,SPP添加模塊,PANet path-aggregation neck和YOLOv3(anchor based)頭作爲YOLOv4架構。

總結:YOLOv4模型 = CSPDarkNet53 + SPP + PANet(path-aggregation neck) + YOLOv3-head

  • 上面SPP來源於Kaiming He的SPP Net,主要因爲它顯著增加了感受野,分離出最重要的上下文功能,並且幾乎不降低網絡操作速度。

  • PANet來源於https://arxiv.org/abs/1803.01534,主要是特徵融合的改進(neck)。
    在這裏插入圖片描述

  • YOLOv3-head,因爲是anchor-base方法,因此分類、迴歸分支沒有改變。

接下來論文大幅講解擴展 (BoF) 的內容,可以解決一些問題並增加檢測器準確性,並順序檢查每個功能的影響。

論文指出:我們不使用Cross-GPU Batch Normalization(CGBN或SyncBN)或昂貴的專用設備。

接就是說作者用單卡訓練,就無需採用SyncBN方法,SyncBN是在更多的卡上同步BN,論文出自:MegDet: A Large Mini-Batch Object Detector也就是說你的單卡遊戲本就可以訓練。

3.2 BoF和BoS的選擇

BoF是指Bag of Freebies,BoS是指Bag of specials。這一部分就是各種技巧(Tricks)的選擇了。

爲了改進目標檢測訓練,CNN 通常使用以下內容:


  1. 激活:ReLU, leaky-ReLU, parametric-ReLU, ReLU6, SELU, Swish,or Mish

  2. 邊界框迴歸損失: MSE, IoU, GIoU, CIoU, DIoU

  3. 數據增強:CutOut, MixUp, CutMix

  4. 正化方法:DropOut, DropPath, Spatial DropOut ,or DropBlock

  5. 網絡歸一化:Batch Normalization (BN) , Cross-GPU Batch Normalization (CGBN or SyncBN) , Filter Response Normalization (FRN) , or Cross-Iteration Batch Normalization (CBN)

  6. 跳轉連接: Residual connections, Weighted residual connections, Multi-input weighted residual connections, or Cross stage partial connections (CSP)

原文:至於訓練激活函數,由於PRELU和SELU的訓練難度較大,而ReLU6是專門的量化網絡的設計,因此,我們不從候選列表中選擇上述激活函數。(所以只是科普下?最後選擇了Mish)對於正則化方法,發表了DropBlock的人將他們的方法與其他方法進行了比較,在細節上,他們的正則化方法贏得了很多。我們毫不猶豫地選擇了DropBlock作爲我們正則化方法。


解讀:

  • ReLU6:relu6, y= min(max(0,x), 6),鼓勵網絡學習到稀疏特徵。
  • Mish :Mish=x * tanh(ln(1+e^x))
  • IoU->GIoU->DIoU->CIoU,從最開始引用IoU損失函數,到改進如何更好優化,一系列方法。
  • MixUp、CutMix :這個是打比賽都會用到的方法。
  • CBN:解決BN批次太小的問題,batch不想調大,但是有希望能達到batch很大的效果,就採用統計前幾個迭代的均值和方差。CBN屬於利用不同的iter數據來變相擴大batchsize從而改進模型的效果。論文:Cross-Iteration Batch Normalization
  • DropOut系列:
    • Dropout :整體隨機扔
    • Spatial Dropout:按通道隨機扔
    • DropBlock:每個特徵圖上按spatial塊隨機扔
    • Cutout :在輸入層按spatial塊隨機扔
    • DropConnect:只在連接處扔,神經元不扔。
  • SyncBN: 多卡同步BN。
  • 跳轉連接: 這裏的方法有如Resnet裏面skip連接,如果對連接加上權重就是Weighted residual connections(WRC)這個來自論文EfficientDet,如果將特徵映射分爲兩部分就是CSP。

3.3 額外提升

爲了使設計的檢測器更適合於單 GPU 的訓練,我們進行了如下其他設計和改進:

  • 新的數據擴增馬賽克和自我對抗訓練(SAT)的方法
  • 在應用遺傳算法時,我們選擇最佳的超參數
  • 修改了一些外在方法,修改SAM、 PAN 和CmBN

解讀:

  • 馬賽克是一種新的數據擴增方法,它混合了4個訓練圖像。

  • 自我對抗訓練 (SAT)也是一種新的數據擴增方法,前向和反向傳播都有。在第一階段,神經網絡會更改原始圖像,而不是網絡權重。這樣,神經網絡通過改變原始圖像,從而創造了一種圖像上沒有想要目標的假象,對其自身執行了對抗攻擊。在第二階段,訓練神經網絡以正常方式檢測此修改圖像上的目標。類似樣本生成

  • CmBN 是CBN的修改版。CBN上面簡單介紹過了。

    也就是說僅收集單個batch中的mini-batches之間的統計信息。

  • 從空間上的注意力到點注意力來修改SAM。

  • 將 PAN 的快捷方式連接改爲串聯。

3.4. YOLOv4

這部分總結歸納YOLOv4的結構了。

YOLOv4由以下組成:

  • 骨架網絡: CSPDarknet53
  • 頸部: SPP、PAN
  • 頭部: YOLOv3

YOLOv4的技巧:

  1. Bag of Freebies 外在引入技巧: CutMix和馬賽克數據增強,DropBlock正則化,類標籤平滑 。
  2. Bag of Specials 網絡改進技巧: Mish激活函數,跨階段部分連接(CSP),多輸入加權殘差連接 (MiWRC)。
  3. Bag of Freebies 外在檢測器引入技巧:CIoU損失函數, CmBN, DropBlock正則化,馬賽克數據增強,自對抗訓練(SAT),Eliminate grid sensitivity,爲每個真實標籤使用多個錨點,Cosine annealing scheduler,優化的超參數,隨機的訓練形狀。
  4. Bag of Specials檢測器網絡改進技巧:Mish激活函數,SPP模塊,SAM模塊,路徑聚合模塊(PAN), DIoU-NMS 。

4 實驗

論文做了大量的實驗,因爲包含的Tticks太多了。論文驗證了大量的BoF,包括grid sensitivity elimination, mosaic data augmentation, IoU threshold, genetic algorithm,class label smoothing, cross mini-batch normalization, self adversarial training, cosine annealing scheduler, dynamic mini-batch size, DropBlock, Optimized Anchors, different kind of IoU losses。我們還對各種BoS驗證,包括Mish、SPP、SAM、RFB、BiFPN、BiFPN和Gaussian YOLO。對於所有的實驗,只使用一個GPU訓練。

4.3 不同技巧檢測訓練影響

作者做了大量的消融實驗,且用表格顯示出來。總結就是:
在這裏插入圖片描述
黑色表示有效,那麼可以看出:

有效:

  • M: Mosaic data augmentation - using the 4-image mosaic during training instead of single image
  • GA: Genetic algorithms - using genetic algorithms for selecting the optimal hyperparameters during network
  • CBN: CmBN - using Cross mini-Batch Normalization for collecting statistics inside the entire batch, instead of collecting statistics inside a single mini-batch
  • CA: Cosine annealing scheduler - altering the learning rate during sinusoid training
  • GIoU, CIoU, DIoU, MSE - using different loss algorithms for bounded box regression CIoU

無效:

  • IT: IoU threshold - using multiple anchors for a single ground truth IoU (truth, anchor) > IoU threshold training on the first 10% of time periods
  • S: Eliminate grid sensitivity
  • LS: Class label smoothing - using class label smoothing for sigmoid activation
  • DM: Dynamic mini-batch size - automatic increase of mini-batch size during small resolution training by using Random training shapes
  • OA: Optimized Anchors - using the optimized anchors for training with the 512x512 network resolution

測試階段方法對比

在這裏插入圖片描述
表格表示:

PANet、SPP、SAM均是有效的。

  • CSPDarknet53優於CSPResNeXt50
  • Mish 有效

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

結論:minibatch越大越好,CSPDarknet53對minibatch不敏感,利於單卡訓練

5 檢測結果

論文貼了和其他方法的對比表格,說明了YOLOv4強大的性能

6 結論

原文翻譯:我們提供了一種最先進的檢測器,其速度和準確度都比可用的檢測器高很多。所描述的檢測器可在普通的 GPU 上進行訓練和使用,這使得其廣泛使用成爲可能。單階段檢測器的最初概念已證明其可行性。我們已經驗證了大量的功能,並選擇用於這些功能,以提高分類器和檢測器的準確性。這些功能可用作未來研究和發展的最佳實踐。

7 個人總結

論文包含了大量的知識點,需要看很多論文才能知道很多Tricks是什麼,因此也可以作爲綜述類的論文來看。

Bag of freebies和Bag of specials對工業界或者打比賽也是十分有幫助的。YOLOv4意義不僅僅是一篇論文,更重要的是能在落地應用基礎上提高了性能。

YOLOv4模型 = CSPDarkNet53 + SPP + PANet(path-aggregation neck) + YOLOv3-head

YOLOv4使用這些新的技巧:WRC、CSP、CmBN、SAT,Mish-activation,Mosaic data augmentation、CmBN、DropBlock正則化和CIoU損失,以及組合技巧,以達到最好的效果。在MS COCO數據集中的AP43.5%(65.7% AP50),在實際應用中,Tesla V100上速度可達到65FPS。

網絡結構圖大致爲:
在這裏插入圖片描述

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