點擊上方「CVer」,選擇加"星標"或「置頂」
重磅乾貨,第一時間送達
作者:許出山
https://zhuanlan.zhihu.com/p/73823115
本文已由作者授權,未經允許,不得二次轉載
最近參加了ICIP上的一個比賽拿了個第一名,然後把相關的心得寫了個論文,投了一下稿,然後reject了,哈哈哈哈。那就在這裡把比賽心得分享一下,確實沒有太多的新意。
比賽連結:https://aidea-web.tw/icip
這個比賽全名叫做Mosquito Breeding Site Hunting for Dengue Fever Control。首先這個比賽就是一個檢測的比賽,然後它最後只要求在小物體上做評估,小物體的標準遵守COCO,是小於1024pixels的物體。代碼這邊我用了mmdetection。它所謂的積水容器就是瓶瓶罐罐,輪胎,塑膠袋什麼的。
一開始是想只訓練小物體的,發現不行,然後就試著拿所以數據跑了一個帶fpn的基於resnet101的faster rcnn,後來發現效果不如resnet50好。於是就是50做基礎模型了,這部分的原因我沒有做細究。
然後就是一些小技巧(tricks):
凍結batch normalization
把選box的threshold調小,本來默認設定是大於0.05的,我改成了0.01,其實我試過更小的,都會有提升,但是提交的結果數量會大大上升,而且我看不到val的gt,所以我不知道這樣調整對precision和recall的影響。
多尺度測試。這部分我發現如果我用多尺度訓練,再加多尺度測試的效果不如單獨多尺度測試。雖然單獨多尺度訓練會有mAP的提升。
反轉圖片,我發現把原圖和反轉的圖片的結果合併在一起,然後NMS,很多時候在val上會掉點。不過感覺這樣結果更穩健,所以還是用了。
用了上面除掉反轉以外的技巧後,mAP就到了0.3407。
這個0.3407就比第二名高了,不過最後的結果還更高一點,一方面我集合(ensemble)了另外的model,另一方面我用了類似SNIP的技巧。
我後來發現雖然說單獨訓練小物體效果不好,但是這樣做會有提升。首先你用所有數據訓練,然後把RCNN的部分凍結,把RPN的anchor size改小,然後在小物體上微調(fine-tuning)RPN,這樣會有提升,不過最後沒有用這個。
我參考了SNIP的做法,用了多尺度訓練,然後訓練的時候,如果這個box大於一定大小我們才用來做訓練。這個大小得按照數據集的分布,原圖大小,多尺度訓練的選擇還有評測的尺度的選擇來綜合決定。這邊我叫他box selection。這邊就不細寫了,一句話表達就是,你要讓你在訓練時被用來訓練的box大小,在最後測試時在原圖上是能落入1024pixels的。比如說你原圖100x100,但是你訓練放大到了1000x1000,那麼這時小於10240pixels的box都是小box。
這邊還是用了flip testing。可以看到faster rcnn用了這個方法後,就算flip,也有0.3503,比剛才最好的0.3407還好。然後我就直接在Cascaded R-CNN和Libra R-CNN上試了,沒有做對比試驗。其實和FPN沒有太大區別。最後Ensemble了一下,這邊ensemble就是合併結果然後做NMS,結果到了0.3779。這個是publicboard的結果,相當於是val。最後在private board上的結果,我是0.374227,第二名是0.321927。
我一開始以為我就是提交一個比賽的心得這樣,就寫了個文提交了,說是published under ICIPC(challenge),我以為就像workshop一樣蠻容易的,我也就是抱著分享方法的心態,沒想到審稿時感覺當做是ICIP。比賽結束之後我也沒辦法再添加實驗,本來也沒辦法看具體的precision和recall。加上我寫論文水平一般,就被reject了。所以直接在這邊分享一下了。
重磅!CVer-目標檢測交流群成立啦
掃碼添加CVer助手,可申請加入CVer-目標檢測學術交流群。一定要備註:研究方向+地點+學校/公司+暱稱(如目標檢測+上海+上交+卡卡)
▲長按加群
▲長按關注我們
麻煩給我一個在看!