一、什么是YOLOV4
YOLOV4是基於原有YOLO目標檢測架構,采用了近年來CNN領域最優秀的優化策略。
從數據處理,主干網絡,模型訓練,激活函數,損失函數等各個方面都有着不同程度的優化。
二、YOLOV4的改進總結
1、開發了一個簡單高效的目標檢測算法,降低了訓練門檻:僅使用一塊GPU:1080TI,就可以訓練一個又快又准的檢測器;
2、驗證了最新的Bag-of-Freebies和Bag-of-Specials在訓練過程中對YOLOV4的影響;
3、優化了一些最新提出的算法:CBN,PAN,SAM,使YOVOV4可在一塊GPU上訓練。
三、常用改進方法介紹
1、模型結構
一個完整的網絡模型一般包含四部分:
1)輸入部分:算法的輸入,整個圖像,一個PATCH或圖像金字塔
2)主干網絡:提取圖像的特征,淺層特征如:邊緣,顏色,紋理等。可以使用設計好並訓練好的網絡:VGG16,19,RESNET50,RexNeXt101,Darknet53,當然,還有一些輕量級的網絡:MobileNet1,2,3 ,ShuffleNet1,2
3)瓶頸部分:特征增強,對主干網提取到的特征進行加工,增強。典型的有:SPP,ASPP,RFB,SAM,還有FPN,PAN,NAS-FPN,BiFPN,ASFF,SFAM。
4)檢測頭:算法項的輸出。
如想得到HeatMap(CenterNet),就增加一些反卷積;
如想得到BBOX,就接CONV來輸出結果,如:YOLO,SSD;
如想輸出多任務(MaskRCNN)那就輸出三個Head:分類Classification ,回歸Regression ,分割Segmentation
2、訓練策略
2.1 Bag-of-freebies
在不增加模型復雜度的情況下,使用一些比較有用的訓練策略來提升准確率,如:Data augmentation
2.1.1 數據增強
增加訓練樣本的多樣性,使模型有更高的魯棒性。
[1]逐像素pixel-wise
(1)幾何增強:隨機翻轉,隨機裁剪,拉伸,旋轉
(2)色彩增強:對比度增強,亮度增強,HSV空間增強(較關鍵)
[2]逐塊block-wise
(1) 在圖像中隨機裁剪矩形區域,用0填充(cutout)
(2) 隨機裁剪多個矩形區域(grid mask)
(3)在Heatmap上裁剪並填充(dropout,dropconnect,dropblock)
[3] Mixup
將兩個圖像按不同比例相加,a*0.1+b*0.9=c。
2.1.2 解決數據不平衡
數據不平衡分兩種:
一、背景和要識別物體之間的不均衡
如:在兩階段方法中,RPN階段會生成很多ROI,里面有太多背景,有用的框很少;
二、類別不平衡
識別物體間不同類別間的不平衡,涉及到一個長尾分布。需要使用OHEM(困難樣本挖掘)或Focal loss,或Label smooth
2.1.3 修改Loss函數
最早是MSE,現在是NMS(IOU),然后是GIOU Loss。
2.2 Bag-of=Specials
通過增加少量的計算,能有效增加物體檢測的准確率。
2.2.1 增大感受野
SPP:解決輸入尺寸不一致,按比例1,2,4或1,2,3三個尺度划分Pooling,輸出相同大小FeatureMap
ASPP:在SPP前加了Atrous或Dilated
RFB:在同一個FeatureMap下,引入不同dilated ratio的空洞卷積,提取到不同的感受野,最后進行融合
2.2.2 注意力機制
channel attention:SENet,在FeatureMap層中同時引入一個1x1xC的weights,可以對每個channel上的特征加入不同權重,提高特征學習能力。
Spatial attention:在HW維度上加入attention。
Channel+Spatial:channel attention和spatial attention融合。
2.2.3 特征融合或特征集成
skip connection:在Encoder-decoder中比較多,如:UNet,融合底層和高層的特征信息;
hyper-column:就像InceptionV4結構,使用不同的kernel-size的卷積來集成特征;
FPN,ASFF,BiFPN:將不同階段的不同尺度的特征進行融合。EfficientDet中BiFPN連接最密集;
2.2.4 激活函數
一個好的激活函數既能使得梯度傳播更高效,同時不會占用額外的計算資源。
ReLU
LReLU、PreLU、 SELU、ReLU6、Swish、Hard-Swish、Mish
2.2.5后處理
NMS,SoftNMS,DIoU NMS
四、本文改進方法
1、 數據增強:Mosaic
將4張訓練圖片混合成一張的新的數據增強方法,可以豐富圖像的上下文信息,增強模型的魯棒性,另外也減少了對Mini-batch處理size的需求。
2、自對抗訓練 Adversarial training
一種新的數據擴充技術,分兩階段:第一階段,神經網絡先改變原始圖像而不是網絡權值,對自身執行對抗性攻擊,改變原始圖像,從而造成圖像上沒有目標的假象;第二階段,訓練神經網絡對修改后的圖像進行正常的目標檢測。
3、CmBN
是CBN的修改版本,定義為跨微批量標准化,僅收集單個批次中的小批之間的統計信息
4、SAM(Spatial Attention Module)改進
將SAM從空間上的attention修改為點上的attention,並將PAN的short-cut連接改為拼接,如下圖:
五、YOLOV4的架構
Backbone:CSPDarknet53
Neck:SPP,PAN
Head:YOLOV3
YOLOV4的調試Trick:
BoF:
Bakbone:CutMix和Mosaic數據增強,DropBlock正則化,類標簽平滑;
Detector:CIoU Loss,DropBlock正則化,自對抗訓練,最優超參數;
BoS:
Bakbone:Mish,CSP(跨級部分連接),MiWRC(多輸入加權殘差連接)
Detector:SPPBlock,SAMBlock,PAN(路徑聚合網絡),DIOU-NMS
六、實驗與超參數
1、分類
ImageNet圖像分類,超參數如下:
訓練步驟:8,000,000
批量尺寸:128,小批量尺寸:32
采用多項式衰減學習速率調整策略,初始學習率為:0.1
warmup:1000
momentum:0.9,weight decay:0.005
2、檢測
訓練步驟:500500
初始學習率:0.01,4,000,000步后和4,500,000步后分別乘以0.1
momentum:0.9,weight:0.0005
批量大小:64,小批量大小:8或4
七、原作信息
論文鏈接:
https://arxiv.org/pdf/2004.10934.pdf
代碼鏈接:
https://github.com/AlexeyAB/darknet
已訓練好的模型文件:
https://pan.baidu.com/s/189L8HHBIUpQ5tzleKw1BvA 提取碼: kd6b
上一篇:
下一篇:
YOLOV5,待更新。。。