選單

YOLO v4:速度效果雙提升

YOLO V4演算法分析

1。1 網路結構圖

YOLO v4:速度效果雙提升

Yolo v4的結構圖和Yolo v3相比,多了CSP結構,PAN結構。

藍色框中為網路中常用的幾個模組:

CBM:Yolo v4網路結構中的最小元件,其由Conv(卷積)+ BN + Mish**函式組成。

CBL:Yolo v4網路結構中的最小元件,其由Conv(卷積)+ BN + Leaky relu**函式組成。

Res unit:殘差元件,借鑑ResNet網路中的殘差結構,讓網路可以構建的更深。

CSPX:借鑑CSPNet網路結構,由三個CBM卷積層和X個Res unint模組Concat組成。

SPP:採用1×1,5×5,9×9,13×13的最大池化的方式,進行多尺度融合。

張量拼接與張量相加

Concat:張量拼接,會擴充兩個張量的維度,例如26×26×256和26×26×512兩個張量拼接,結果是26×26×768。

Add:張量相加,張量直接相加,不會擴充維度,例如104×104×128和104×104×128相加,結果還是104×104×128。

Backbone中卷積層的數量:

每個CSPX中包含3+2×X個卷積層,因此整個主幹網路Backbone中一共包含2+(3+2×1)+2+(3+2×2)+2+(3+2×8)+2+(3+2×8)+2+(3+2×4)+1=72。

1。2 YOLO V4的創新點

為了便於分析,將Yolov4的整體結構拆分成四大板塊:

YOLO v4:速度效果雙提升

(1)輸入端:這裡指的創新主要是訓練時對輸入端的改進,主要包括Mosaic資料增強、cmBN、SAT自對抗訓練。

(2)BackBone主幹網路:將各種新的方式結合起來,包括:CSPDarknet53、Mish**函式、Dropblock。

(3)Neck:目標檢測網路在BackBone和最後的輸出層之間往往會插入一些層,比如Yolov4中的SPP模組、FPN+PAN結構

(4)Prediction:輸出層的錨框機制和Yolov3相同,主要改進的是訓練時的損失函式CIOU_Loss,以及預測框篩選的nms變為DIOU_nms

1.2.1 輸入端的創新

(1)Mosaic資料增強

Yolov4中使用的Mosaic是參考2019年底提出的CutMix資料增強的方式,但CutMix只使用了兩張圖片進行拼接,而Mosaic資料增強則採用了4張圖片,隨機縮放、隨機裁剪、隨機排布的方式進行拼接。根據論文所說其擁有一個巨大的優點是**豐富檢測物體的背景!而且在BN計算的時候一下子會計算四張圖片的資料!

YOLO v4:速度效果雙提升

1。2。1 BackBone的創新

(1)CSPDarknet53

CSPDarknet53是在Yolov3主幹網路Darknet53的基礎上,借鑑2019年CSPNet的經驗,產生的Backbone結構,其中包含了5個CSP模組。

YOLO v4:速度效果雙提升

每個CSP模組前面的卷積核的大小都是3×3,步長為2,因此可以起到下采樣的作用。

因為Backbone有5個CSP模組,若輸入影象是608608,則特徵圖變化的規律是:608->304->152->76->38->19

經過5次CSP模組後得到1919大小的特徵圖。

YOLO v4:速度效果雙提升

Yolov4在主幹網路Backbone採用CSPDarknet53網路結構,主要有三個方面的優點:

優點一:增強CNN的學習能力,使得在輕量化的同時保持準確性。

優點二:降低計算瓶頸

優點三:降低記憶體成本

(2)Mish**函式

Mish**函式是2019年下半年提出的**函式,和leaky_relu**函式的圖形對比如下:

YOLO v4:速度效果雙提升

Yolov4的Backbone中都使用了Mish**函式,而後面的網路則還是使用Leaky_relu函式。

YOLO v4:速度效果雙提升

Yolov4作者實驗測試時,使用CSPDarknet53網路在ImageNet資料集上做影象分類任務,發現使用了Mish**函式的TOP-1和TOP-5的精度比沒有使用時都略高一些。

因此在設計Yolov4目標檢測任務時,主幹網路Backbone還是使用Mish**函式。

(3)Dropblock

Yolov4中使用的Dropblock,其實和常見網路中的Dropout功能類似,也是緩解過擬合的一種正則化方式。

傳統的dropout對FC層效果更好,對conv層效果較差,原因可能是conv層的特徵單元是空間相關的,使用dropout隨機丟棄一些特徵,網路仍舊能從相鄰區域獲取資訊,因而輸入的資訊仍舊能夠被送到下一層,導致網路過擬合。而DropBlock則是將在特徵圖上連續的資訊一起丟棄。

下圖是一個簡單示例。(a)為輸入影象,狗的頭、腳等區域具有相關性。(b)為以dropout的方式隨機丟棄資訊,此時能從臨近區域獲取相關資訊(帶x的為丟棄資訊的mask)。c為DropBlock的方式,將一定區域內的特徵全部丟棄。

YOLO v4:速度效果雙提升

Dropblock演算法框架

YOLO v4:速度效果雙提升

DropBlock有兩個引數:block_size(drop塊的大小),γ(伯努利分佈的引數)

YOLO v4:速度效果雙提升

2~4:若處於推理模式,則不丟棄任何特徵。

5:生成mask M,每個點均服從引數為γ的伯努利分佈(伯努利分佈,隨機變數x以機率γ和1-γ取1和0)。需要注意的是,只有mask的綠色有效區域內的點服從該分佈,如下圖a所示,這樣確保步驟6不會處理邊緣區域。

6:對於M中為0的點,以該點為中心,建立一個長寬均為block_size的矩形,該矩形內所有值均置0。如上圖b所示。

7:將mask應用於特徵圖上:A=AM

8 對特徵進行歸一化:A=Acount(M)/count_ones(M)。此處count指M的畫素數(即特徵圖的寬*高),count_ones指M中值為1的畫素數。

具體細節

block_size:所有特徵圖的block_size均相同,文中為7時大部分情況下最好。

γ:並未直接設定γ,而是從keep_prob來推斷γ,這兩者關係如下(feat_size為特徵圖的大小):

\gamma =\frac^}}\frac^}}{{{(feat\_size-block\_size+1)}^}}γ=block_size21−keep_prob(feat_size−block_size+1)2feat_size2

keep_prob:固定keep_prob時DropBlock效果不好,而在訓練初期使用過小的keep_prob會又會影響學習到的引數。因而隨著訓練的進行DropBlock將keep_prob從1線性降低到目標值(如0。9)