YOLOv4,它到底做了什麼?

2021-10-05 13:12:05 字數 3583 閱讀 3683

還沒有看過yolov4的朋友可以看一下我們另外一篇部落格:yolov4全文翻譯

想要訓練自己的資料集的朋友可以關注我的這篇部落格:yolov4訓練自己的資料集

需要在windows下進行編譯的朋友,可以關注我的這篇部落格:windows下編譯yolov4

需要在windows下使用yolov4的動態鏈結庫的,可以關注我的這篇部落格:windows下使用yolov4動態鏈結庫

yolov4它到底做了些什麼,才能得到這麼高的精度和速度,並且能夠在一塊1080ti的gpu上就可以進行訓練和測試?

yolov4其實並沒有提出什麼特別大的創新點,它的主要內容可以概括為三個方面:目標檢測演算法綜述+最新演算法的大量實驗+最優的演算法組合。這三者是相互聯絡,層層遞進的。在相關工作部分,作者將目標檢測的整體框架分成三個部分:backbone、neck以及head。這三個部分對整個檢測器的作用是各有偏重的,這其實也就是意味著我們可以使用不同的演算法,分別提公升這三個部分的檢測效果,進而提公升檢測器整體的效能。因此,作者從這個思路出發,研究了目前最近的演算法,分別對其進行對比試驗,最終得到了乙個最優的組合,這個組合所帶來的整體增益最高。

作者將整個目標檢測器分成三個部分:

從上圖,我們可以看這三個部分的分工各有偏重:我們將backbone放在imagenet上進行預訓練,先得到乙個比較好的網路權重,常見的backbone有vgg, restnet等等;在**類別資訊以及邊界框位置上,我們使用head進行**,它分為one-stage和two-stage兩個系列的演算法。在head和backbone之間,常常會使用neck來收集低階和高階的特徵圖進行融合,低階的特徵圖通常保留著物體的紋理資訊,而高階的特徵圖包含這大量的語義資訊,為了能夠讓網路更有效地做出**,通常會將兩類資訊進行融合,常見的neck包括fpn (feature pyramid network) 和pan (path aggregation network)。

作者根據演算法對網路檢測的準確率以及推理時間的損耗,將最新的演算法分為兩類:一類是能夠增加網路的整體效能,但是基本上沒有增加檢測器的推理時間的損耗,我們稱之為bag of freebies(加量不加價:效能的提公升就像是商品的贈品)。另一類雖然會增加推理時間,但是也能夠大幅度的提高網路的整體效能,我們稱之為bag of specials(**:少量的推理損耗能夠大幅度提供網路的新能)

bag of freebies主要包括解決四個問題:如何實現資料增廣如何解決樣本不均衡的問題、如何解決one-hot型別標籤中類別關聯度難以描述的問題以及如何設計邊界框回歸的目標函式

bag of speicals主要包括兩個部分:使用即插即拔的模組載入到網路中,提高網路的整體效能;對檢測器**的結果進行有效的過濾

作者在總結檢測器的主要部分以及兩類不同的演算法之後,作者分別對相關的演算法進行了對比實驗,然後研究每個演算法對網路效能的影響,然後選出那個最優的演算法組合

3.1 backbone的選擇

作者提供了兩個可選的backbone:cspdarknet53和cspresnext-50。作者通過實驗發現,前者在分類任務上要差於後者,但是在檢測任務上,前者的效能要優於後者。這說明在分類任務上最優的backbone在檢測任務上並不一定是最優的。作者由將bof和mish演算法應用到兩個backbone之後發現,cspresnext-50雖然增加了分類精度但是降低了檢測的精度;而cspdarknet53不僅增加了分類精度,而且還增加了精測的精度。這說明cspdarknet53的魯棒性比前者更優,cspdarknet53更適合作為yolov4的backbone。

3.2 neck

為了增加網路的感受野,並且能夠將網路中不同的特徵圖進行融合,作者選用了spp(spatial pyramid pooling)作為額外的外掛程式模組,並且使用pan(path aggregation network)進行特徵圖的融合。

3.3 bof和bos的選擇

a. bof的選擇

確定了網路基本的架構之後,作者可是選擇最合適的bof組合。作者通過對邊實驗發現了幾個化學反應比較好的組合:s(eliminate grid sensitivity) +m(mosaic data augmentation) +it(iou threshod) +ga(genetic algorithms) +oa(optimized anchors) +giou/ciou

b. bos的選擇

通過實驗發現,spp+pan+sam一起使用之後,檢測器得到了乙個最好的效果(sam: spatial attention module),其中pan和sam都是進行了改進。

yolov4使用到的技巧:

改進的部分

使用的技巧

activation

mish

bounding box regression loss

giou/ciou

data augmentation

mosaic

self-adversarial training(sat)

regularization method

dropblock

normalization

improved cross mini-batch normalization(cmbn)

通過上面我們發現,作者雖然沒有提出什麼特別亮眼的模型和演算法,但是,作者集百家之長,通過大量的實驗分析每個演算法對檢測效能的影響,從而找到最優的演算法組合。

Yolov4煙火檢測

作者開源的資料集 以上資料集包含煙霧影象,但是標註只有1類 開源模型只有fire類,如果要同時檢測煙霧,需要自己在影象上標註煙霧類別。採用yolov5煙霧 火災2類檢測模型,為自己的資料預標註,然後修正即可!煙火檢測資料集包含的場景型別 大火 小火,建築 草原 森林 車輛 汽車 卡車 電單車 電動車...

YOLOv4閱讀筆記

中英對照翻譯參考 中首先總結了目標檢測的一般性結構 通常,傳統的目標檢測器是離線訓練的。因此,研究人員總是喜歡利用這一優勢,開發更好的訓練方法,使目標檢測器在不增加推理成本的情況下獲得更好的精度。我們將這些方法稱為 bag of freebies 這些方法僅改變訓練策略或僅增加訓練成本。資料擴充 資...

YOLOv4學習資源

redmon寫完yolov3,退出計算機視覺領域之後,又有其他大佬推動著這一目標檢測神器的發展。yolov4我沒有看原 而是找了一些部落格資源進行學習,現在把我找到的部落格資源分享在此。看完這些部落格之後,yolov4其實並沒有引入特別創新的idea,作者的目標就是為了設計乙個用於實際工作環境的快速...