YOLO v4分析
YOLO v4 的作者共有三位:Alexey Bochkovskiy、Chien-Yao Wang 和 Hong-Yuan Mark Liao。其中一作 Alexey Bochkovskiy 是位俄羅斯開發者,此前曾做出 YOLO 的 windows 版本。
那麼,YOLOv4 性能如何呢?
在實際研究中,有很多特性可以提高卷積神經網絡(CNN)的準確性。需要在大型數據集上對這些特徵的組合進行實際測試,並需要對其結果進行理論上的證明。某些特性僅在某些模型上運行,並且僅在某些問題上運行,或者僅在小型數據集上運行;而某些特性(例如批歸一化和殘差連接)適用於大多數模型,任務和數據集。我們假設此類通用屬性包括加權殘差連接(WRC),跨階段部分連接(CSP),交叉小批量標準化(CmBN),自對抗訓練(SAT)和Mish激活。我們使用以下新功能:WRC,CSP, CmBN,SAT,Mish激活,馬賽克數據增強,CmBN,DropBlock正則化和CloU丟失,並結合其中一些特性來實現最新結果:在MSCOCO數據集以Tesla V10以65FPS的實時速度獲得43.5%AP(AP50爲65.7%)。
在相關論文中,研究者對比了 YOLOv4 和當前最優目標檢測器,發現 YOLOv4 在取得與 EfficientDet 同等性能的情況下,速度是 EfficientDet 的二倍!此外,與 YOLOv3 相比,新版本的 AP 和 FPS 分別提高了 10% 和 12%。
接下來,我們看下 YOLO V4 的技術細節。
許多特徵可以提高 CNN 的準確率,然而真正實行起來,還需要在大型數據集上對這些特徵組合進行實際測試,並且對測試結果進行理論驗證。某些特徵僅在某些模型上運行,並且僅限於特定的問題,或是只能在小型數據集上運行;而另外有些特徵(如批歸一化和殘差連接)則適用於大多數模型、任務和數據集。
那麼,如何利用這些特徵組合呢?
YOLOv4 使用了以下特徵組合,實現了新的 SOTA 結果:
·
加權殘差連接(WRC)
·
Cross-Stage-Partial-connection,CSP
·
Cross mini-Batch Normalization,CmBN
·
自對抗訓練(Self-adversarial-training,SAT)
·
Mish 激活(Mish-activation)
·
Mosaic 數據增強
·
DropBlock 正則化
·
CIoU 損失
據介紹,YOLOv4 在 MS COCO 數據集上獲得了 43.5% 的 AP 值 (65.7%
AP50),在 Tesla V100 上實現了 ∼65 FPS 的實時速度。
該研究的主要貢獻如下:
-
建立了一個高效強大的目標檢測模型。它使得每個人都可以使用 1080Ti 或 2080Ti 的 GPU 來訓練一個快速準確的目標檢測器。
-
驗證了當前最優 Bag-of-Freebies 和 Bag-of-Specials 目標檢測方法在檢測器訓練過程中的影響。
-
修改了 SOTA 方法,使之更加高效,更適合單 GPU 訓練。這些方法包括 CBN、PAN、SAM 等。
YoloV4 如何實現這麼好的效果?
YoloV4 的基本目標是提高生產系統中神經網絡的運行速度,同時爲並行計算做出優化,而不是針對低計算量理論指標(BFLOP)進行優化。YoloV4 的作者提出了兩種實時神經網絡:
· 對於 GPU,研究者在卷積層中使用少量組(1-8 組):CSPResNeXt50 / CSPDarknet53;
· 對於 VPU,研究者使用了分組卷積(grouped-convolution),但避免使用
Squeeze-and-excitement(SE)塊。具體而言,它包括以下模型:EfficientNet-lite / MixNet / GhostNet / MobileNetV3。
在模型結構選擇時,主要考慮了三個問題:爲了檢測較小的物體,輸入圖片需要較高的分辨率,爲了更大的感受野需要更多層的網絡,爲了網絡的容量需要更多的參數。其中關於感受野作者分析了三種不同level的感受野:能看到整個目標的感受野,能看到整個圖像的感受野,大於整個圖像的感受野。作者選擇了CSPDarknet53作爲主幹網絡,SPP與modified-PAN作爲Neck,沿用了yolov3的Head。
YOLOv4 包含以下三部分:
· 骨幹網絡:CSPDarknet53
· Neck:SPP、PAN
· Head:YOLOv3
具體而言,YOLO v4 使用了:
bag-of-freebies:不會對測試過程的時間造成影響的方法。這裏主要包括數據增強,dropout等正則化方法,對數據不平衡問題進行處理的方法(focal loss等),最後就是bbox迴歸問題進行處理的方法(改變mse loss 爲IOU loss等)。
bag-of-specials:在網絡中插入模塊使得網絡的測試過程的時間輕微增加的方法。這裏主要包括上面講到的各種用於提取並組合特徵的Neck,在網絡中加入attention module(注意力模塊),以及一些類似NMS(非最大值抑制)的後處理方法。
· 用於骨幹網絡的 Bag of Freebies(BoF):CutMix 和 Mosaic
數據增強、DropBlock 正則化和類標籤平滑;
· 用於骨幹網絡的 Bag of Specials(BoS):Mish 激活、CSP 和多輸入加權殘差連接(MiWRC);
· 用於檢測器的 Bag of Freebies(BoF):CIoU-loss、CmBN、DropBlock 正則化、Mosaic 數據增強、自對抗訓練、消除網格敏感性(Eliminate grid sensitivity)、針對一個真值使用多個錨、餘弦退火調度器、優化超參數和隨機訓練形狀;
· 用於檢測器的 Bag of Specials(BoS):Mish 激活、SPP 塊、SAM 塊、PAN 路徑聚合塊和
DIoU-NMS。
架構選擇
該研究的目標是找出輸入網絡分辨率、卷積層數量、參數量(濾波器大小濾波器通道/組)和層輸入數量(濾波器)四者之間的最優平衡。
次要目標則是挑選能夠增加感受野的額外塊(additional block),以及針對不同級別的檢測器從不同骨幹層中挑選最佳的參數聚合方法,如 FPN、PAN、ASFF 和 BiFPN 網絡。
研究者在 CSPDarknet53 上添加了 SPP 塊,因爲它能夠極大地增加感受野,分離出最顯著的上下文特徵,並且幾乎沒有降低網絡運行速度。他們針對不同級別的檢測器從不同骨幹層中挑選 PANet 作爲參數聚合方法,而放棄了 YOLOv3 中使用的 FPN 網絡。
最後,研究者選擇了 CSPDarknet53 骨幹網絡、SPP
額外模塊、PANet 路徑聚合 neck 和 YOLOv3(基於錨的)head 作爲
YOLOv4 的整體架構。
BoF 和 BoS 的選擇
爲了提升目標監測的訓練效果,CNN 使用了以下方法:
·
激活函數:ReLU、 leaky-ReLU、parametric-ReLU、ReLU6、SELU、Swish、Mish;
·
邊界框迴歸損失(Bounding box regression loss):MSE、IoU、GIoU、CIoU、DIoU;
·
數據增強:CutOut、MixUp、CutMix;
·
正則化方法:DropOut,、DropPath、Spatial DropOut、DropBlock;
·
通過均值和方差的歸一化網絡激活函數:批歸一化(BN)、跨 GPU 批歸一化 (CGBN 或 SyncBN)、濾波器響應歸一化(FRN)、交叉迭代批歸一化(CBN);
·
跳躍連接方式:殘差連接、加權殘差連接、多輸入加權殘差連接、Cross stage 局部連接(CSP)。
在訓練激活函數時,因爲 PReLU 和 SELU 更難訓練,ReLU6 是專爲量化網絡設計的,所以從候選列表裏刪除了這幾個函數。
額外改進
爲了使檢測器更適合在單個 GPU 上進行訓練,研究者還做出了以下額外的設計與改進:
·
提出新型數據增強方法 Mosaic 和自對抗訓練(SAT);
·
在應用遺傳算法時選擇最優超參數;
·
修改現有方法,使新方法實現高效訓練和檢測——modified SAM、modified PAN 和 Cross mini-Batch
Normalization (CmBN)。
新型數據增強方法 Mosaic 混合了 4 張訓練圖像,而 CutMix 只混合了兩張輸入圖像,具體如下圖 3 所示:
圖 3:Mosaic 表示的一種新型數據增強方法。
自對抗訓練(SAT)也是一種新的數據增強方法,它包括兩個階段。第一個階段中,神經網絡更改原始圖像;第二階段中,訓練神經網絡以正常方式在修改後的圖像上執行目標檢測任務。
CmBN 是 CBN 的改進版,它僅收集單個批次內
mini-batch 之間的統計數據。
圖 4:CmBN 圖示。
研究者還將 SAM 從空間注意力機制(spatial-wise
attention)修改爲點注意力機制(point-wise attention),並將 PAN 中的捷徑連接替換爲級聯,如下圖 5、6 所示:
圖 5:Modified SAM。
圖 6:Modified PAN。
實驗結果
YOLO v4 與其他 SOTA 目標檢測器的對比結果如下圖 7 所示。從圖上可以看出,YOLOv4 位於帕累托最優曲線上,並在速度和準確性上都優於最快和最精準的檢測器。
圖 7:不同目標檢測器的速度和準確性對比結果。