摘要:
隨著深度學習的發展,目前已經出現了很多算法(或者訓練技巧,tricks)來提升神經網絡的準確率。在實際測試中評價一個算法的好壞優劣主要看兩點,一是能否在大規模的數據集中起作用(work),二是是否有理論依據。一些算法僅能在某些特定的模型上或者某類特定的問題上運行,亦或是適用于一些小規模的數據集。然而,還有一些算法,例如batch normalization(BN)或者殘差連接(residual-connections)已經被用在了不同的模型,任務以及不同的數據集中,已經被充分的證明了這些算法的普適性,是一個general的算法。我們假設這樣的general(or universal)的算法包括Weighted-residual-connection(WRC),cross-stage-partial-connections(SCP),cross mini-batch Normalization(CmBN),self-adversarial-training(SAT)以及mish-activation。此外,我們還加了一些其余的tricks,包括Mosaic data augmentation,DropBlock regularization,CIoU loss,設計了一個YOLO-V4,并且在MS coco數據集中取得了新的state-of-the-art的結果:在Tesla V100顯卡能達到43.5% AP(65.7% AP)的精度,且達到~65FPS的速度。目前代碼已經開源:
Introduction
Yolo-V4的主要目的在于設計一個能夠應用于實際工作環境中的快速目標檢測系統,且能夠被并行優化,并沒有很刻意的去追求理論上的低計算量(BFLOP)。同時,Yolo-V4的作者希望算法能夠很輕易的被訓練,也就是說擁有一塊常規了GTX-2080ti或者Titan-XP GPU就能夠訓練Yolo-V4, 同時能夠得到一個較好的結果(Yolo-V4 結果如上圖)。整個introduction可以總結為以下幾點:
研究設計了一個簡單且高效的目標檢測算法,該算法降低了訓練門檻,使得普通人員在擁有一塊1080TI或者2080TI的情況下就能夠訓練一個super fast and accurate 的目標檢測器
在訓練過程中,驗證了最新的Bag-of-Freebies和Bag-of-Specials對Yolo-V4的影響
簡化以及優化了一些最新提出的算法,包括(CBN,PAN,SAM),從而使Yolo-V4能夠在一塊GPU上就可以訓練起來。
Related work
首先解釋一下相關的名詞:
Input:算法的輸入,包括整個圖像,一個patch,或者是image pyramid
Backbone:可以理解為是提取圖像特征的部分,由于圖像中的淺層特征(low-level)是比較類似的,例如提取邊緣,顏色,紋理這些。因此這部分可以很好的借鑒一些設計好并且已經訓練好的網絡,例如(VGG16,19,ResNet-50, ResNeXt-101, Darknet53), 同時還有一些輕量級的backbone(MobilenetV1,2,3 ShuffleNet1,2)。
Neck:這部分我的理解是特征增強模塊,前面的backbone已經提取到了一些相關的淺層特征,由這部分對backbone提取到的淺層特征(low-level feature)進行加工,增強,從而使得模型學到的特征是我想要的特征。這部分典型的有(SPP,ASPP in deeplabV3+,RFB,SAM),還有一些(FPN, PAN, NAS-FPN, BiFPN, ASFF, SFAM)。
Head:檢測頭。這部分就到了算法最關鍵的部分,就是來輸出你想要的結果,例如想得到一個heatmap,(如在centernet中),那就增加一些反卷積層來一層一層反卷積回去。如果想直接得到bbox,那就可以接conv來輸出結果,例如Yolo,ssd這些。亦或是想輸出多任務(mask-RCNN)那就輸出三個head:classification,regression,segmentation(就是mask那部分)。
因此,一個檢測算法可以理解為:
Object Detection = Backbone + Neck + Head
2.1. Bag of freebies
什么叫Bag of freebies?字面上的意思就是免費贈品。在目標檢測中是指:用一些比較有用的訓練技巧來訓練模型,從而使得模型取得更好的準確率但是不增加模型的復雜度,也就不增加推理(inference)是的計算量(cost)。在目標檢測中,提到bag of freebies,首先會想到的 就是Data augmentation。
2.1.1 : Data augmentation 的目的在于增加訓練樣本的多樣性,使得檢測模型具有高的魯棒性。常見的不能再常見的數據增強方式包括兩個方面:幾何增強以及色彩增強。
幾何增強包括:隨機翻轉(水平翻轉較多,垂直翻轉較少),隨機裁剪(crop),拉伸,以及旋轉。
色彩增強包括:對比度增強,亮度增強,以及較為關鍵的HSV空間增強。
上述說的色彩以及幾何增強都是pixel-wise 的調整。此外還有一些數據增強方法被用來解決目標遮擋及不足的問題。
在圖像中隨機裁剪矩形區域,并用0來填充(random erase和CutOut算法)
隨機裁剪多個矩形區域(hide-and-seek, grid mask)
上述算法是在圖像中裁剪矩形區域并填充0,那么算法在heatmap上裁剪并填充的叫做(DropOut,DropConnect, DropBlock)
此外還有一個重要的data augmentation算法叫做MIX-UP。Mix-up在分類任務中,將兩個圖像按照不同的比例相加,例如A*0.1+B*0.9=C,那么C的label就是[0.1A, 0.9B]。在目標檢測中的做法就是將一些框相加,這些label中就多了一些不同置信度的框。
還有一類是style-transfer GAN做數據增強,例如在做街景分割和目標檢測的時候,將GTA-5的數據做一個style-transfer,擴充一些數據集。不過更多的是用在了Domain Adaptation上。
2.1.2 : 不同于上述說的data augmentation,第二類方法是要解決數據不均衡問題(imbalance problems in object detection),數據不均衡問題在目標檢測中是一個特別難的問題,Yolo-V4中沒有細說,但是最近的一篇PAMI綜述論文,用了30幾頁詳細介紹了這個問題,論文可以見我專欄的第一篇文章。下面我簡單說一下:數據不均衡包括了兩種一種是訓練的背景和我要識別的物體之間的不均衡,例如在two-stage的方法中,首先在RPN階段會生成了很多個ROI,這里面有太多的背景了,有用的框會很少。還有一類不均衡是類別之間的不均衡,例如在COCO數據集中一些常見的物體例如人就會很多,不常見的就會比較少,這樣類別之間還有不平衡,這就涉及到另外一個問題了,叫做長尾分布(long-tailed Data),也是比較棘手的問題。這里面比較經典的算法就是在two-stage 中使用hard negative example mining or online head example mining (OHEM)。還有一個比較經典的算法就是Focal-loss,來處理數據不均衡的問題。還有一個trick就是關于One-hot編碼之后label沒有關聯,針對這個問題進行label-smooth。
2.1.3: 第三個bag of freebies就是在loss function上進行改動,之前常用的計算bbox的loss 使用MSE,現在改為了計算IOU之間的loss,還有一個叫做GIoU loss。這里面有一個比較經典的算法就是在Mask-RCNN上改動的MASK SCoring RCNN中,這部分的邏輯是這樣的:在選擇ROI時,如果按照每個ROI的score來排序篩選ROI,會出現一個問題就是,置信度高的ROI并不一定BBOX的位置就準,后來作者嘗試了使用IoU來篩選ROI,發現效果要好。
2.2. Bag of specials
什么叫做bag of specials:就是指一些plugin modules(例如特征增強模型,或者一些后處理),這部分增加的計算量(cost)很少,但是能有效地增加物體檢測的準確率,我們將這部分稱之為Bag of specials。這部分插件模塊能夠增強網絡模型的一些屬性,例如增大感受域(ASFF,ASPP,RFB這些模塊),引入注意力機制(有兩種一種是spatial attention,另外一種是channel attention),增加特征集成能力(FPN,ASFF,BiFPN)。后處理算法是指用一些算法來篩選模型預測出來的結果
2.2.1 增大感受域
SPP:He提出了一個比較經典的算法,當時解決了一個問題就是我在測試的時候,輸入尺寸可以與訓練的時候 不一樣。但是當網絡中有FC的時候,尺寸必須是固定的,這時候,SPP作用就體現出來了,按照比例劃分pooling,最后輸出的結果就是一致的了。
ASPP:我記得是用在了DeepLabV3系列中,與SPP不同前面加了Atrous or dilated ,在Pooling中加入了dilated ratio。
RFB:就是說是在同一個featuremap下引入不同dilated ration的空洞卷積,這樣提取到了不同感受野的特征,最后進行融合。
2.2.2 引入注意力機制
Channel Attention:最經典的就是SEnet(Squeeze-and-Excitation),這個算法一開始獲得了imagenet分類任務中的冠軍,他的原理是這樣的,在featuremap層中同時引入一個1X1XC的weights,這樣對每個channel上的特征加入不同的權重,這樣提高特征學習能力,注意:SE module是在channel 這個維度上進行加入權重。后來又有一篇CVPR用SE module做了分割任務,從側面證明了SE module很好用。
Spatial Attention Module:從字面意思上來理解,就是在HW維度上加入attention,上述是在Channel維度上加入Attention。
Channel+Spatial:一個featuremap的維度:NCHW,N:batch size,C:channel,H:height,W:weight。Channel attention 和spatial attention 是從兩個不同的方法對feature進行增強,接著又有一篇paper對二者進行融合,channel attention+spatial attention
2.2.3 特征融合or特征集成
Skip connection:用在encoder-decoder中比較多,例如最經典的Unet,融入了low-level和high-level的信息,在目標檢測中主要用在了類似于pose這一類的檢測任務中,例如DLA,Hourglass,以及最近的CenterNet
hyper-column:最經典的就要屬于InceptionV1-4結構了,使用不同的kernel-size的convolution來集成特征。
FPN,ASFF,BiFPN:在我看來都屬于一類,屬于將不同stage下不同scale的特征進行融合,只是連接融合的方式不一樣,FPN是最經典的,efficientdet中的BiFPN連接的最密集。
2.2.4 激活函數
一個好的激活函數能夠使得梯度傳播的更高效,并且不會占用額外的計算資源。常見的激活函數有以下:(由于我對激活函數沒有研究過,所以這邊就不畫蛇添足了,直接把論文中的摘錄下來)
ReLU
LRelu, PReLU, SELU,ReLu6, Swish, hard-Swish Mish
2.2.5 后處理
經典的后處理包含了NMS,soft NMS,DIoU NMS
-
神經網絡
+關注
關注
42文章
4777瀏覽量
100976 -
gpu
+關注
關注
28文章
4762瀏覽量
129164 -
算法
+關注
關注
23文章
4625瀏覽量
93132
原文標題:YOLO-V4解讀:速度與精度的完美結合[已開源]
文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論