架構
整體來說,yolov4架構與Yolov3差不多,不過多加了很多tricks在其中,以下將分4個部分介紹yolov4的創新點:
- Input:Moasic、CmBN、SAT自對抗網路
- Backbone:CSP、Mish、Dropblock
- Neck:SPP、FPN+PAN
- Prediction:DIoU NMS、CIoU Loss
- Input
Yolov4在input方面的創新大概有三項:1) Moasic Data augmentation、2) CmBN、3) SAT自對抗網路
Moasic
Data augmentation的一種手法,隨機將4張圖裁切拼貼在一起。這樣模型能學習去偵測在不同情境(背景)下的相同物體,而且batch normalization在計算時會用到4張圖的訊息,這樣mini-batch size就不用設太大,對單張GPU訓練有一定的幫助。
CmBN
Cross mini-Batch Normalization,BN在batch size很小時,會因為資料量太少發生偏誤,為了改進這點,CBN(Cross-iteration Batch Normalization)使用了當下iteration和前k-1個iterations的樣本參數(平均數和標準差)做標準化,k可以稱為window size。CmBN是差不多的概念,只是每個batch獨立算,不能參考跨batch的參數,例如第i個batch的第1個mini-batch不能參考第i-1個batch的最後幾個mini-batch的參數。
SAT
Self-Adversarial Training,自對抗網路,也是一種data augmentation的方法,使用對抗網路的概念來強迫模型學到更不一樣的特徵,分成2個stage:
- forward:將圖片輸入網路,網路會根據weights得到特徵,並修改原圖(扣掉那些特徵)。例:如果模型已學會透過人眼來偵測人,那將原圖輸入網路後,會得到人眼的特徵,再從原圖扣掉人眼特徵,產生一張沒有眼睛的人的圖像。
- backward:網路會用新的圖再次進行訓練,強迫模型學到不一樣的特徵。例:模型會被強迫學習用人眼以外的特徵來偵測人。
- Backbone
Backbone的功能在於萃取有用的latent feature,創新點:1) CSPDarknet53、2) Mish activation function、3) Dropblock
CSPDarknet53
CSP全名為Cross Stage Partial Connection,CSPNet的主要功能是通過分割梯度流,實現更豐富的梯度組合,同時降低運算量,以及提升準確率。CSPNet的原論文是將CSP的結構套用在DenseNet上,看下圖(b),CSP將網路的訊息切成兩個部分,只有一半進入Dense Block的操作,最後再將兩個分流concat在一起,透過不讓part 1進入Dense Block,來節省運算量,而且也讓梯度組合更加豐富。
用下面兩張DenseNet的圖應該可以更好的理解,下圖左是一般的DenseNet操作,base layer的資訊直接進入Transition層。下圖右是CSP的結構,將base layer切成兩部分,只有一部分進入了Dense Block操作,另一部分在最後時再concat回來。
來看效能的提升,在AP上的表現有蠻顯著的提升,且同時降低運算以及memory的成本。
我們來看看它在yolov4中的應用,首先先看小的模塊,CBL結構如下,就是一般的Conv+BN+Leaky ReLU。
然後2個CBL模組可以構成Res Unit模塊:
而CSPX模塊是由3個CBL再加上X個Res Unit模塊構成,每個CSP模塊卷積都是3*3的下採樣,最後將這些特徵concat在一起。
yolov4使總共使用了5塊CSP模塊,所以維度變化:608->304->152->76->38->19,input 608*608的圖片,最終變成19*19的特徵圖。注意這裡CBL用的是Leaky ReLU,CBM用的是Mish,在Backbone的部分,2種激活函數都有用到。
總結CSP的優點就是,降低運算與內存成本的同時,還可以提升準確度。
Mish activation function
Mish激活函數是受Swish啟發,不過在很多項測試中,都顯示它比Swish, ReLU, Sigmoid…等函數表現更好。它的式子與圖形如下:
Mish函數的範圍是[-0.31, ∞),整理優點如下:
- 無上界,這點對激活函數來說很重要,因為能有效解決梯度消失的問題,並且加快收斂速度,訓練變得更快。
- 有下界,在≤0時給予很接近0的負權重,有助於降低over-fitting的發生。
- ReLU在<=0時神經元就死了,沒辦法再復活。但Mish函數在≤0時非單調的特性,保持了神經元很微小的負權重,此點在更深的網路中讓Mish表現得比ReLU和Swish好。
- 平滑特性,且它的1階、2階導數也具有平滑特性,讓訊息傳播的更好,可以參考下圖,具有平滑性的Mish所產生出來的output更加平滑,不像ReLU的很尖銳粗糙。
不過Mish還是有缺點的,它的計算成比ReLU...等其他函數還要高,不過考量到效果,Mish還是更好的選擇。
Dropblock
與Dropout功能相似,是用來防止over-fitting的一種手法。一般dropout使用在全連接層效果很好,但是用在卷積結構中,就算隨機捨棄一些訊息,但是一般卷積層的操作為:Conv+Activation+Pool,在池化時會借用到鄰近區域的訊息,導致卷積結構對於dropout不敏感。
因此該算一次drop掉整塊區域,於是作者將cutout手法運用在feature map上,隨機丟掉某塊訊息。下圖是cutout在input上的運用,是data augmentation的一種方式。
下圖(c)是Dropblock,可以看出它是把Dropout (b)改成是丟棄一整塊區域的訊息,以此防止over-fitting。而且Dropblock捨棄區域的頻率是隨著訓練次數而跟著增加的,慢慢增加訓練難度,也強迫網路不能只學到單一的特徵。
- Neck
Neck的功能在於特徵融合,主要是2點創新:1) SPP、2) FPN + PAN
SPP
SPP全名Spatial Pyramid Pooling,其實在yolov3中就有提供SPP模塊可以選用,它透過了各種不同大小的池化,來實現局部、全域特徵級別的特徵融合,豐富的feature map提高了mAP表現。
FPN+PAN
FPN是yolov3本來就有的結構,以淺藍底表示,紫線是上採樣,從上到下傳達語意特徵。在yolov4加入了PAN的結構,以淺綠底表示,橘線是下採樣,由下到上傳遞精準的定位特徵,兩種特徵融合相輔相成。特別的是yolov4中使用了黃色底的3個feature map,使用FPN的76x76的feature map還有PAN產生出來的38x38和19x19。
另外,yolov4修改了PAN的結構,變成了concat:
- Prediction
Yolov4使用了CIOU_Loss來處理迴歸的部分,然後使用DIoU NMS來取代傳統的NMS。
DIoU Loss全名是Distance IoU Loss,它考量了2個因素:
1) 重疊面積、2) bbox中心點距離
公式如下,紅框內的是比IoU多考慮的懲罰項:
一般的IoU只考量到了重疊面積,在紅框的式子考量到了prediction與gt的bbox的中心點距離,並且以兩bbox的對角線做標準化的動作,以免大框產生較大的loss,小框產生較小的loss。下面是圖示這個式子。
Yolov4用它來改良NMS,使得鄰近的物體也能夠被偵測到而不會被NMS消滅。如下,可以看到被遮擋的摩托車,也被偵測出來了。
CIoU Loss全名是Complete IoU Loss,它考量了3個因素:
1) 重疊面積、2) bbox中心點距離、3)長寬比
比DIoU Loss多考慮了長寬比,紅框內的是比IoU多考量到的懲罰項部分:
多考量長寬比的部分如下:
alpha是控制衡量長寬比的權重,與重疊面積有關,重疊越多,對長寬比的重越高,反之亦然。
v是長寬比的懲罰,可以看到它衡量gt與prediction bbox的長寬比差異,差越多,loss越大。
參考文獻
- YOLOv4: Optimal Speed and Accuracy of Object Detection: https://arxiv.org/pdf/2004.10934.pdf
- 深入淺出yolov3和yolov4: https://kknews.cc/zh-tw/tech/3yzxlza.html
- yolov4如何變強:https://medium.com/@linnil1/yolov4%E5%A6%82%E4%BD%95%E8%AE%8A%E5%BC%B7-%E7%9B%B8%E9%97%9C%E7%B4%B0%E7%AF%80%E4%BB%8B%E7%B4%B9-2cb3c4404849
- CBN: https://arxiv.org/pdf/2002.05712.pdf
- CSPNet: https://arxiv.org/pdf/1911.11929.pdf
- Mish: https://arxiv.org/pdf/1908.08681.pdf
- Dropblock: https://arxiv.org/pdf/1810.12890.pdf
- SPPNet: https://arxiv.org/pdf/1406.4729.pdf
- PANet: https://arxiv.org/pdf/1803.01534.pdf
- CIoU Loss與DIoU Loss: https://arxiv.org/pdf/1911.08287.pdf