天池竞赛-津南数字制造算法挑战赛【赛场二】解决方案分享
天池競賽-津南數字制造算法挑戰賽【賽場二】解決方案分享
一、前言
競賽頁面
團隊名BugFlow,最終排名35/2157
雖然成績一般,但是作為一支目標檢測領域的新手隊伍,僅僅有一塊1070顯卡,從零開始拿到這個排名,也算有一些經驗可以拿出來分享,包括一些針對這個比賽我們想出的一些idea,算是拋磚引玉吧,期待能夠和排名靠前的大佬多多交流。
源碼下載
二、框架選擇
這個比賽實際上就是一個目標檢測比賽,初賽要求對圖像中的違禁品出現的位置進行檢測,復賽在有效檢測目標的同時要求輸出高質量的實例分割。
對于框架選擇,如我們的隊名BugFlow一樣,由于我們隊伍的成員都是以tensorflow作為工具的,我們最初選擇的框架是google開源的Tensorflow Object Detection API, 無奈訓練效果一直不理想。后面果斷切換了FaceBook開源的Detectron, 成績一下就上升不少,也是體會了一回判教一時爽,一直判教一直爽的感覺。
所以這里不得不說一下,一個好的目標檢測框架真的是事半功倍,從我們組的經歷來說,Detectron無論從準確性、易用性還是擴展性來說都是一個不錯的框架。不知道排名前5的大佬使用的是什么框架,望賜教!很想學習一下~
三、解決方案概述
3.1 模型選擇
復賽我們的選擇的是 End-to-End Mask R-CNN 作為的baseline, backbone 選擇的是 resnet101-FPN
之所以選擇FPN結構是因為本競賽中,待檢測違禁品的尺度大小不一,且包含很多小物體,我們認為feature pyramid networks能夠更好的解決這個問題。
3.2 數據增強
在我訓練分類網絡的經驗中,在合理的范圍內盡可能的進行豐富的數據增強能夠大幅提升模型的性能。
顯然,這個技能同樣能應用于目標檢測中,唯一的問題時,在變換圖像的同時,需要同時對 bounding box 或 mask 進行相應的變換。當然,這僅僅是一個稍有難度的編程任務,難不倒大家的。
需要注意的是,Detectron自帶了水平翻轉的數據增強。
我們的數據增強文件實現在/path/to/project/code/second_round_pyfile/data_augmentation_position_bak.py,其中實現了水平、豎直翻轉,放大(相當于crop操作),縮小這四個最基本的數據增強方法。
此外,我們還嘗試了兩種獨特的數據增強,一種是類似于隨機拼接兩種圖的增強,一種是隨機貼圖的增強,效果如下:
隨機拼接兩種圖的效果示例:
隨機使用違禁品進行貼圖的示例:
遺憾的是,雖然這兩種方法表面上極大的豐富了樣本集的規模,但并沒有取得很好的效果,我們認為這可能和一定程度的破壞了樣本原有的數據分布有關。最終我們也沒有使用這兩種方法。
3.3 使用二分類網絡輔助
比賽的過程中,我們發現有兩個類型,藍色小電池和大個的綠色鐵殼打火機,特征不太清晰,很容易混淆。
如果單純使用mask rcnn,模型會變得相對激進,將很多長相相似的物體誤判為違禁品,造成成績很低。
因此,為了權衡這個問題,我們考慮使用一個二分類網絡,首先對待檢測圖片進行判別,若認為包含違禁品,再交給mask rcnn模型進行預測。
有了這個想法之后,我直接使用之前積累的Keras實現的resnet50 demo進行驗證。
經過閾值的調試后,二分類能夠達到100%召回,98%準確率。這樣,大概率不會漏掉含違禁品的圖片的情況下,mask rcnn 虛警的概率大大的降低了,成績也提高了很多。
3.4 預處理
我們還對數據集進行了簡單的分析,發現我們的目標場景的圖片的像素值普遍偏高,類似下面這樣:
因此我們認為可以對數據進行預處理,大體思路是對像素值進行調整,使其更均勻的分布在0-255的范圍內。
為此,我設計了3種不同的預處理方法,其中最簡單的一個就是類似下圖的一個簡單映射:
它達到的效果類似下面這樣:
三種預處理的效果示例:
原圖:
預處理1:
預處理2:
預處理3:
其中,通過不斷地嘗試和提交測試分數,我們發現預處理1對于二分類的accuracy提升有明顯幫助,預處理3對mask rcnn的性能有微弱提升(也可能是隨機因素導致,還不敢確定)
至此,我已經將我們認為所有可能值得分享的信息介紹了,還望排名靠前的大佬不吝賜教~~~
對于大多數伙伴,讀到這里就可以了~
如果你對我們代碼的詳細信息甚至復現感興趣,請繼續往下看,我簡單的介紹一下。
四、安裝
我們代碼的運行環境及主要依賴為:
Ubuntu/Centos + CUDA9 + CUDNN7 + NCCL + Anaconda2 + Keras2.2.4 + PyTorch
初賽我們使用的顯卡是可憐的NVIDIA GTX1070,復賽有了阿里云代金卷使用的是P100
運行如下命令,自動安裝依賴環境及深度學習框架
$ cd /path/to/project/code/install $ ./install_requirements.sh詳見project/code/README.md,若由于各種沒有考慮到的情況安裝不能順利進行,還請大家簡單分析安裝腳本自行安裝環境。
五、復現
初賽時還處于摸索階段,成績也只有89名,初賽的復現就不做介紹了。大家有興趣可以看下初賽提交時我們編寫的 ROUND1_README,我們對如何復現我們的結果進行了說明。
復賽階段的代碼位于project/code/second_round_pyfile中,相應的運行腳本位于project/code/second_round_shell中,我們對這些腳本進行了編號,簡單的閱讀確定參數并依次執行即可~
六、聯系方式
參加比賽也是一個交流的過程,本人現在作業幫的反作弊團隊擔任算法工程師,期待和各位算法從業者進行技術上的交流~
加好友、技術交流、內推請聯系我,本人郵箱anshengmath@163.com。
此外,我們團隊一位靠譜的小伙伴正在打算找博導,希望大家幫忙推薦呀,他的聯系方式zhaoyh@ncepu.cn
總結
以上是生活随笔為你收集整理的天池竞赛-津南数字制造算法挑战赛【赛场二】解决方案分享的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 协议簇:TCP 解析: 连接断开
- 下一篇: 怎么调节电机启动值_开关式智能充电机-全