Kaggle競賽中使用YoloV5將物體檢測的性能翻倍的心路歷程

點擊上方AI算法與圖像處理”,選擇加"星標"或“置頂”

重磅乾貨,第一時間送達


作者:Mostafa Ibrahim

編譯:ronghuaiyang 來源:AI公園

導讀

作者在kaggle比賽中從建立基線到一步一步的優化過程,最終將performance提升了一倍,非常好的競賽經驗總結文章。

我花了三個月的時間深入研究物體檢測。我嘗試了很多方法,從實現最先進的模型,如YoloV5、VFNets、DETR,到將目標檢測模型與圖像分類模型融合以提高性能。在比賽的早期階段,我努力提高基準模型的分數,但我找不到有用的在線資源,這就是我寫這篇文章的原因。我想帶你們踏上一段從頭到尾的旅程,簡要地向你們展示我所走的每一步,我的成績幾乎翻了一倍。

官方的競賽指標是(mean) Average Precision,這是最常用的目標檢測指標之一。爲了向你展示每一步的進步,我將在旁邊加上它的分數。

1、第一步是建立一個簡單的基線,0.126 mAP

我敢肯定,這是大量數據科學家早前落入的陷阱。我們總是很興奮地用我們能想到的每一種技術來做最複雜的模型。這是一個巨大的錯誤,你最終會感到沮喪並離開ML項目,即使你不這樣做,你也很可能會過擬合。

我經歷了慘痛的教訓,但最終還是用以下規範構建了一個初始模型:

  • YoloV5-XL
  • 圖像的分辨率從3K調整爲512

我知道這聽起來很簡單,一開始我也是這麼想的。但是,實際上,構建基線可能是最煩人的步驟之一。因爲有很多步驟,比如將輸出處理成競賽的格式等等(我不想深入討論)。

另外,我實際的初始YoloV5-XL模型只有0.064(上面的一半),我花了2周的時間調試它,結果發現我沒有正確地歸一化輸入數據!

2、去掉一個輸入類別!0.143 mAP (+13%)

這個trick當時對我來說沒有多大意義。14個輸入類別,13種不同疾病,1個“No Finding”類別。大約70%的數據集屬於“No Finding”類,只有30%屬於其他類。有個參賽者發現,你可以去掉這個類,並使用“2 class filter”技巧來預測它(見下文)。這使得數據集的傾斜度大大降低。此外,它允許訓練明顯更快(因爲你將訓練更少的圖像)。

3、增加訓練和推理圖像的分辨率,0.169 mAP (+18%)

第二步是將圖像分辨率從512提高到1024。這是一個微不足道的改進,但我想在這裏傳達的重點是,如果我以這個分辨率開始,我可能不會進一步提高我的分數。原因很簡單,因爲在這個更高的分辨率上進行訓練會導致批大小從16減少到4(爲了不耗盡GPU內存),這大大減慢了訓練過程。這意味着更慢的實驗,你不會想用更慢的實驗來比賽……

4、融合EfficientNet和YoloV5,0.196 mAP (+16%)

這不是我的主意,我是從一個public kernel中得到的想法。但是,這是我在Kaggle比賽中遇到的最好的主意之一。我想強調的是,在Kaggle上進行比賽的一個主要好處是你可以從社區中學到很多東西。

這裏的主要思想是訓練一個圖像分類模型(EfficientNet),它可以實現非常高的AUC(約0.99),並找到一種方法將其與目標檢測模型融合。這被稱爲“2 class filter”,比賽中的每個人都採用了這個方法,因爲它大大提高了分數。我會在下一篇文章中介紹。

5、加權框融合(WBF)後處理,0.226 mAP (+15%)

這對我來說也是一個全新的想法,在網上很難找到。加權框融合是一種對目標檢測模型產生的框進行過濾,從而使結果更加準確和正確的技術。它的性能超過了現有的類似方法,如NMS和soft-NMS。具體內容我會在另一篇文章介紹。

應用WBF的結果是這樣的:

6、用5折交叉驗證使用WBF融合,0.256 mAP (+13%)

我犯過的一個最大的錯誤是我忘記做交叉驗證,這也是我寫這篇文章的主要原因之一,就是爲了強調ML基礎知識的重要性。我太專注於應用新技術和提高性能,以至於忘記了應用這個基本的ML技術。

如果你想知道我是如何得到0.256的,那是因爲我讀了一些在競賽結束後發佈的解決方案,這是在類似於我的模型的交叉驗證後他們大多數能得到的結果。最終的pipeline可以在這裏看到:

7、我嘗試過的其他的東西,但是沒有成功

  1. DETR訓練。DETR是一個了不起的目標檢測transformer ,我想把它實踐,但是,我沒有發現他們提供的代碼文檔有什麼幫助,我也找不到很多有用的資源。此外,我花了大約3周的時間(大約是比賽持續時間的四分之一)嘗試讓它工作。我這麼說的原因是,雖然離開你一直在研究的解決方案可能很難,但在實驗性ML的世界裏,這有時不得不做,說實話,我希望我可以早一點離開。但是,好的一面是,我發現另一個名爲 MMDetection 的庫提供了DETR,而且使用起來容易得多。
  2. WBF預處理,雖然很多競爭對手都說這提高了他們的分數,但並沒有提高我的分數。這就是ML的特點,並不是所有的技術都能以同樣的方式使不同的模型受益。

我最終的代碼:https://github.com/mostafaibrahim17/VinBigData-Chest-Xrays-Object-detection-


END

英文原文:https://towardsdatascience.com/a-journey-of-building-an-advanced-object-detection-pipeline-doubling-yolov5s-performance-b3f1559463bf

  
     
     
     
個人微信(如果沒有備註不拉羣!
請註明: 地區+學校/企業+研究方向+暱稱



下載1:何愷明頂會分享


AI算法與圖像處理」公衆號後臺回覆:何愷明,即可下載。總共有6份PDF,涉及 ResNet、Mask RCNN等經典工作的總結分析


下載2:終身受益的編程指南:Google編程風格指南


AI算法與圖像處理」公衆號後臺回覆:c++,即可下載。歷經十年考驗,最權威的編程規範!




   
   
   
下載3 CVPR2021

AI算法與圖像處公衆號後臺回覆: CVPR 即可下載1467篇CVPR 2020論文 和 CVPR 2021 最新論文

點亮 ,告訴大家你也在看



本文分享自微信公衆號 - AI算法與圖像處理(AI_study)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章