1. 基于大尺寸圖像的小目標檢測競賽經(jīng)驗總結(jié)

        共 5082字,需瀏覽 11分鐘

         ·

        2021-02-21 14:00

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

        重磅干貨,第一時間送達

        僅作學術(shù)分享,不代表本公眾號立場,侵權(quán)聯(lián)系刪除
        轉(zhuǎn)載于:作者丨清風明月@知乎(已授權(quán))
        來源丨h(huán)ttps://zhuanlan.zhihu.com/p/345657476

        目錄

        • 數(shù)據(jù)分析
        • 比賽思路
        • 模型
        • Tricks
        • 很好的參考資料
        • 總結(jié)

        前言:作為一個沒有計算資源,沒有接觸過目標檢測的渣碩第一次參加2021廣東工業(yè)大賽的比賽:

        2021廣東工業(yè)智造創(chuàng)新大賽-智能算法賽-天池大賽-阿里云天池

        1、資源:租了一張2080ti(五百多租一周好貴啊,有資源的大佬可以一起組隊參加其他比賽啊);

        2、成績:初賽 90/4432(進復賽啦),成績一般,受制于資源以及后期單打獨斗參加比賽。

        3、最終方案:Cascade R-CNN, Backbone: ResNet-50, 在線切圖策略訓練,測試時使用分水嶺算法去了一下黑邊(很簡單,很多tricks都沒嘗試,最簡單的模型融合也沒做,時間和資源都不夠用啊。)

        4、悄悄告訴大家,在github中搜tianchi defect detection即可搜到很多開源的冠軍方案(我可真是個機靈鬼skr),同理,搜kaggle + 領(lǐng)域也能搜到很多方案。

        https://github.com/search?q=tianchi+defect+detection

        5、聲明:第一次寫文章以及接觸目標檢測,若有錯誤還請善意指正哈,感謝。

        接下來講講思路以及分享我花了大量時間收集的資料(后面有XMIND總結(jié),分享給大家),一句話概括這個任務(wù):超大尺寸圖像的極小目標檢測

        一、數(shù)據(jù)分析

        數(shù)據(jù)集圖像的尺寸是8192*6000,而目標object則特別?。ú恢来蠹夷懿荒苷业娇梢暬鰜淼募t色bbox,注意:這張圖一共有三個bbox)

        訓練集里面的一張圖像以及其三個bbox

        看不到就放大它吧

        放大好幾倍,截圖出來的結(jié)果(還是那么小啊)

        并且每張圖的object特別少(即稀疏)

        做一個統(tǒng)計:

        每張圖的bbox的數(shù)量大部分集中在1-5個

        看看bbox的面積大小吧:

        面積都很小啊

        EDA的代碼參考(ps,第一次看到EDA這三個字母我也是懵逼的,查了一下就是探索性數(shù)據(jù)分析(Exploratory Data Analysis,簡稱EDA),可能這樣看起來更牛):

        https://github.com/Kouin/TianCHI_guangdong/blob/main/eda.ipynb?spm=5176.12282029.0.0.26b21aaa83A2vL&file=eda.ipynb

        二、比賽思路

        對于這種超大尺寸圖像的極小目標的檢測,第一時間想到衛(wèi)星圖像中的目標檢測,查了一下相關(guān)資料

        圖源《You Only Look Twice: Rapid Multi-Scale Object Detection InSatellite Imagery》,該論文以YOLT代稱。

        https://arxiv.org/pdf/1805.09512v1.pdf

        YOLT算法筆記_AI之路-CSDN博客:

        https://blog.csdn.net/u014380165/article/details/81556805

        參考這篇論文的思路:將原輸入圖像切塊,分別輸入模型進行檢測,然后再融合結(jié)果。

        具體切塊策略(記切圖的大小是1333*800):

        1、離線切圖(先把訓練集切圖,然后再讓網(wǎng)絡(luò)訓練);2、在線切圖(訓練時使用RandomCrop等)

        因為就一塊2080ti,想要做到每天都可以有兩次結(jié)果提交,就先考慮的是離線切圖策略。

        離線切圖的三種策略:

        1.1、做滑動窗口切圖:bbox面積特別小,又很稀疏,因此注意排除沒有bbox的切圖(這會引入很多正常的樣本,注意這里,是個坑,后面再講)。注意需要考慮是否做有overlap的滑動窗口切圖。

        1.2、遍歷每個bbox,然后以該bbox作為切圖中心坐標,做中心切圖;如果其他bbox的坐標滿足在該切圖范圍內(nèi),則加入該bbox。例如紅色切圖是以bbox#1作為中心的,但是bbox#2在紅色切圖范圍內(nèi),則該紅色切圖則會有兩個bbox。

        對于中心切圖策略,切圖個數(shù)應(yīng)該等于bbox的個數(shù)(手殘黨畫的切圖框示意)

        中心切圖可能存在的問題:對于bbox很密集的情況,有大量的幾乎相差不大的切圖(這個對于這個比賽影響不大)。

        1.3、遍歷每個bbox然后隨機進行坐標偏移:考慮到中心切圖引入了先驗信息,即每個切圖的中心一定會有一個bbox,因此引入隨機性。具體的:遍歷每個bbox,生成該bbox在切圖坐標系中的隨機坐標,例如生成的隨機坐標是(0,0),該bbox則在切圖的左上角,隨機坐標是(1333,800),則該bbox在切圖的右下角。注意:細節(jié)上還需要考慮該bbox的長寬,引入長寬后隨機坐標會有一個進一步的約束(即切圖大小和bbox的長寬來共同限制隨機坐標)。同樣的,對于隨機切圖策略,切圖個數(shù)應(yīng)該等于bbox的個數(shù)。和中心切圖一樣會包含在切圖范圍內(nèi)的所有bbox。

        兩個細節(jié)需要考慮:1、切圖要不要避免把bbox一分為幾。滑動窗口切圖策略加入overlap即可;其他兩種策略肯定會包括每個完整的bbox(只要bbox的大小不超過切圖設(shè)定的大小,即1333*800)。2、一般的backbone的下采樣率(stride)是32,也就是到最后的feature map的一個特征點對應(yīng)原圖的32*32的區(qū)域;而大多數(shù)bbox的area基本都在100左右,最小的bbox面積為9。YOLT的做法是將stride變?yōu)?6。

        對于隨機偏移的離線切圖,可以做多次即可得到多倍的數(shù)據(jù)。離線切圖的代碼比較簡單,我就不開源了,有需要私信我即可。

        在線切圖(我用的是mmdetection,在線切圖的GPU利用率低啊,所以訓練起來就比較慢):

        2.1、使用RandomCrop

        2.2、使用RandomCenterCropPad

        這兩個在線切圖策略的不同請自己看mmdet的官方實現(xiàn),提醒一個細節(jié),RandomCrop有參數(shù)允許切圖中不包括bbox,而RandomCenterCropPad不允許。我理解的是RandomCrop這種設(shè)置可以引入不包含bbox的負樣本,避免最終結(jié)果的誤檢較多。

        總結(jié):離線切圖相當于網(wǎng)絡(luò)模型只能看到你給的這些數(shù)據(jù)了,在線切圖每次都用random,數(shù)據(jù)更多樣吧。在線切圖的結(jié)果會比離線切圖的結(jié)果好,就是訓練慢了一點。

        回復上面提及到的那個坑:離線切圖均考慮的是切圖中必須包含bbox才行,在線切圖的RandomCenterCropPad得到的切圖也是必須包括bbox。但是根據(jù)驗證集上的可視化結(jié)果來看,誤檢比較多。因此加入沒有bbox的切圖進行訓練是很有必要的。但是呢,細看官方實現(xiàn)RandomCenterCropPad和RandomCrop時(此時已經(jīng)是比賽最后一天了),發(fā)現(xiàn)后者就只需要設(shè)置alllow__neg__positive = True即可,由于時間關(guān)系沒有嘗試該策略。

        測試:因為計算資源受限,使用原圖做inference顯存不夠啊(原圖大概需要19G,而2080ti就11G),那沒辦法啊,把測試集也切圖唄。比如切成3600*3600的,再把結(jié)果融合到原圖的坐標系即可。

        三、模型:

        列出幾個重要的

        • 沒有速度要求的話,通用就是Cascade R-CNN + Big backbone + FPN (Bbox長寬比例極端的話考慮加入DCN以及修改anchor的比例值,默認是0.5,1,2,比如可以修改為[0.2, 0.5, 1, 2, 5]),有速度要求就可以嘗試YOLO系列(聽說YOLO v5在kaggle的小麥檢測上霸榜,可以看看他們的notebook),anchor的比例設(shè)置還是要多EDA分析得到一個合適的選擇。
        • 多尺度訓練和測試,參考這個關(guān)于多尺度的解釋

        https://linzhenyuyuchen.github.io

        https://posts.careerengine.us/p/5f94519f324fe34f723bcbed

        • fp16精度訓練可以減少訓練時間
        • 偽標簽策略(在kaggle小麥檢測上可以提三個點),請參考如下

        https://www.kaggle.com/nvnnghia/yolov5-pseudo-labeling

        https://www.kaggle.com/nvnnghia/fasterrcnn-pseudo-labeling

        模型總結(jié)

        Anchor的設(shè)置總結(jié)

        四、Tricks:

        列出幾個重要的:

        • WBF,TTA是漲點神器
        • 比賽中無腦降低score的閾值會提升mAP,會有較多誤檢
        • 兩個重要的數(shù)據(jù)增強策略:Mixup以及填鴨式,下面是一個簡單的實現(xiàn)

        https://github.com/chuliuT/Tianchi_Fabric_defects_detection/blob/master/final_commit/Duck_inject.py

        總結(jié)的一些tricks

        很好的參考資料:

        目標檢測比賽中的 trick | 極市高質(zhì)量視覺算法開發(fā)者社區(qū)(https://bbs.cvmart.net/topics/1500)

        https://cloud.tencent.com/developer/article/1486440

        http://spytensor.com/index.php/archives/53/?aazqne=u9pzg2&lktala=z15jb3

        初識CV:目標檢測比賽中的tricks(已更新更多代碼解析)(https://zhuanlan.zhihu.com/p/102817180

        目標檢測比賽提高mAP的方法 - 駿騰 - 博客園(https://www.cnblogs.com/zi-wang/p/12537034.html

        最后:

        1、參加比賽可以學到很多東西,尤其是在不懂該領(lǐng)域時。這會讓你去了解一些細節(jié)而不是單純看paper時的囫圇吞棗。但是呢,現(xiàn)在detection有很多集成得很好的庫了(例如mmdetection),很多細節(jié)也是只需要改一些參數(shù),配置一些configs即可。若想細致的了解,還需要看具體的實現(xiàn)。

        2、參加比賽很重要的一點是團隊。作為隊長你想要取得什么樣的成績,同時隊友也有致力于這個目標的自驅(qū)動力,即設(shè)置一個合理的目標。如何激發(fā)每個成員的主觀能動性是很重要的!作為隊長,對于整個比賽的進度把控是很重要的,什么時候出一個baseline,基于baseline結(jié)果的各種可能細分為各種方向,每個成員在哪些方向進行探索(數(shù)據(jù)處理/模型等),定期的頭腦碰撞很重要。

        3、實驗設(shè)置/結(jié)果記錄,實驗結(jié)果的管理也很重要,推薦使用一些共享文檔來記錄(例如騰訊文檔,石墨文檔)。學會利用身邊的一切資源(能找到有卡的隊友真是太幸福了),在比賽群里看到有同樣思路的其他隊伍積極交流?。ㄟ@個對我來說幫助很大),避免局部最優(yōu),閉門造車嘛。

        4、自己的總結(jié)是參考了很多其他的博客以及知乎文章,因此有一些‘抄襲’吧。若原作者看見了請聯(lián)系我,可以刪除或者加上你的文章鏈接。感謝!

        5、知乎圖片應(yīng)該會有壓縮,因此上傳一個Xmind源文件給大家,有需要的下載即可。里面不僅有上面那些圖片的總結(jié)源文件,還有mmdetection的使用總結(jié)(因為我是一個愛寫筆記的人,所以啥都總結(jié)),還有一些服務(wù)器的使用總結(jié)等等,關(guān)于Xmind中一些是我加工處理過的,信息傳遞會存在gap嘛甚至會存在錯誤,所以歡迎批評指正

        end



        個人微信(如果沒有備注不拉群!
        請注明:地區(qū)+學校/企業(yè)+研究方向+昵稱



        下載1:何愷明頂會分享


        AI算法與圖像處理」公眾號后臺回復:何愷明,即可下載。總共有6份PDF,涉及 ResNet、Mask RCNN等經(jīng)典工作的總結(jié)分析


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


        AI算法與圖像處理」公眾號后臺回復:c++,即可下載。歷經(jīng)十年考驗,最權(quán)威的編程規(guī)范!



        下載3 CVPR2020

        AI算法與圖像處公眾號后臺回復:CVPR2020,即可下載1467篇CVPR?2020論文


        覺得不錯就點亮在看吧


        瀏覽 403
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
          
          

            1. 国产超碰人人爽人人做人人爱 | 色人天堂| 特黄AAAAAAA片免费视频 | 色欲天香综合 | 黄色片国产 |