YOLO V4演算法分析
1。1 網路結構圖
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的整體結構拆分成四大板塊:
(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計算的時候一下子會計算四張圖片的資料!
1。2。1 BackBone的創新
(1)CSPDarknet53
CSPDarknet53是在Yolov3主幹網路Darknet53的基礎上,借鑑2019年CSPNet的經驗,產生的Backbone結構,其中包含了5個CSP模組。
每個CSP模組前面的卷積核的大小都是3×3,步長為2,因此可以起到下采樣的作用。
因為Backbone有5個CSP模組,若輸入影象是608608,則特徵圖變化的規律是:608->304->152->76->38->19
經過5次CSP模組後得到1919大小的特徵圖。
Yolov4在主幹網路Backbone採用CSPDarknet53網路結構,主要有三個方面的優點:
優點一:增強CNN的學習能力,使得在輕量化的同時保持準確性。
優點二:降低計算瓶頸
優點三:降低記憶體成本
(2)Mish**函式
Mish**函式是2019年下半年提出的**函式,和leaky_relu**函式的圖形對比如下:
Yolov4的Backbone中都使用了Mish**函式,而後面的網路則還是使用Leaky_relu函式。
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的方式,將一定區域內的特徵全部丟棄。
Dropblock演算法框架
DropBlock有兩個引數:block_size(drop塊的大小),γ(伯努利分佈的引數)
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)