【数据竞赛】AI在垃圾分类中的应用小侃(海华大赛获奖者系列分享一)
文章來源于網絡人工智能園地,作者劉迎飛
我們團隊汪汪隊,團隊成員分別來自中科院空天信息研究院和浙江大學,有幸在biendata與海華交叉信息研究院舉辦的垃圾分類比賽中收獲第三名的成績,在這里簡單跟大家分享下比賽方案。
一、賽題背景
生活垃圾的分類和處理是目前整個社會都在關注的熱點,如何對生活垃圾進行簡潔高效的分類與檢測對垃圾的運輸處理至關重要。海華垃圾分類挑戰賽是一項針對204種垃圾的檢測任務,很好切合了當下垃圾分類的熱點。
此次比賽,數據和訓練的模型都非常龐大,對算力的要求非常高,好在比賽得到了華為NAIE訓練平臺的算力支持,免費為各個選手V100和P100顯卡進行訓練,平臺將環境的部署進行了大量精簡,并提供專業人員的答疑,我花了大概一天左右的時間,就能夠熟練使用該平臺開發模型。
二、數據探索
海華垃圾分類挑戰賽數據包括單類垃圾數據集以及多類垃圾數據集。單類垃圾數據集包含80,000張單類生活垃圾圖片,每張單類垃圾圖片中僅有一個垃圾實例。多類垃圾數據集包括4998張圖像,其中2,998張多類垃圾圖片作為訓練集數據,A榜和B榜各包含1000張測試圖像,每張多類垃圾圖片中包含至多20類垃圾實例。我們將對兩種數據集分別進行介紹。
●1.多類別垃圾●
圖1 多類垃圾數據類別分布
如圖1所示,多類別垃圾涵蓋了204類垃圾,但這204類的數據非常不均衡,有一些類別數目非常少甚至沒有出現。
圖2 多類垃圾數據可視化
圖2中兩張圖是訓練集中的兩張圖像,垃圾目標主要集中在圖像的中心區域重疊度較高,此外可以看到很一些目標往往會以不同的角度姿態在另一張圖像中出現。
從圖1與圖2的觀察與統計我們可以得出幾個結論:
1)???? 由于一個物體經常在多張圖像中出現,因此過擬合這些目標非常有效,這也是為什么這個比賽AP能訓到90以上的原因。因此可以考慮參數量更大的backbone,比如ResNext101 X64+DCN。
2)???? 圖像是俯視拍攝的,水平和垂直翻轉都很有效。
3)???? 雖然類別非常不均衡,但是由于目標的重復出現,經常幾個目標的訓練,再見到同一個目標就能100%的檢測到。類別不均衡主要對數據極少的物體有影響,因此只需要對這些目標進行擴充,主要包括墨盒、螺螄、話梅核、貝類等。
4)???? 重疊度較高可以使用mixup等方法,人為地制造一些重疊度高的目標進行訓練。
表1 數據統計
平均物體長度 | 平均長寬比 | 每類物體數量 | |
Mean | 212.5 | 1.6 | 196.9 |
Std | 126.3 | 1.0 | 180.9 |
Min | 14.7 | 1.0 | 1.0 |
25% | 118.2 | 1.1 | 60 |
50% | 191.6 | 1.3 | 147 |
Max | 950.6 | 29.6 | 897 |
除了圖像級別的宏觀統計,我們對數據集中的目標也做了詳細分析。表1為目標大小、以及長寬比層面的統計。首先物體長度按照coco的劃分,大于96的屬于大物體,75%的目標都是大物體,這意味著針對小物體的提升方法是基本無效的。其次長寬比很少有大比例物體的出現,這些給予我們anchor方面的參數調整很多啟發。
●2.單類別垃圾●
單類別垃圾主要包含80000張圖像,每張1個目標,如左邊兩張圖所示單類別垃圾的目標都較大。單類的使用主要有兩種思路,一種是對類別少的數據擴充,另一種是使用單類數據集訓練得到一個較好的預訓練模型。
圖3數據對比
數據擴充時我們發現,和多類別垃圾相比,同一類的目標并不是完全一致的,單類的小龍蝦是小龍蝦,多類的小龍蝦實際標的是牛奶盒,二極管標的是塑料管。這一點說明想用單類做數據擴充是行不通的,因為數據不是同源的。我們嘗試了這種方案,但是精度保持不變。
針對預訓練模型,由于目標較大,我們將圖像按照4*4進行拼接,減少了數據量,提升了單張圖像的目標數,也能取得一定的效果。但是當與其他增強方法結合時基本沒有效果,因此我們也放棄了這種方案。
三、模型方案:
●1.Baseline●
圖4? baseline方案
我們baseline選用的是mmdetection所實現的Cascade RCNN,backbone選用的是ResNeXt101 X64+DCN。因為此次比賽采用的是coco的評測指標AP50:95,因此Cascade RCNN通過設置不同的閾值進行回歸可以取得非常好的效果。此外較大的backbone在這個數據集上往往能取得更好的效果。
●2. 參數調整●
在比賽的初期,我們將訓練集的數據選取2500張訓練,498張本地驗證,在此基礎上進行調參。由于目標重疊度較高,在使用softnms閾值為0.001、max_per_img =300、翻轉測試時效果較好,相比不使用這些參數大約能提升0.02左右。受到顯存的限制從圖像中隨機裁剪(0.8w,0.8h)的圖像區域,然后將短邊隨機限制在[640,960]之間,長邊限制到1800進行多尺度訓練,測試時圖像適度放大短邊設置為1200,精度可以訓練到88.3%, 結合OHEM精度訓練到88.6%左右,將本地驗證的498張圖像也輸入進去訓練能提升0.5%到89.2%左右。
針對數量較少的類別,我們在多類訓練集中對貝類去硬殼、螺螄、二極管、話梅核這幾個類別進行補充標注,把一些模棱兩可的目標都進行標注提高召回率,大約標記了100多個目標,在A榜能提升到90%左右。
如圖5所示,針對anchor的調整,我們調整anchor 的比例從【0.5,1.0,2.0】改為【2.0/3.0,1.0,1.5】。此外為了提升大物體的檢測能力,我們調整FPN的層次劃分從56改為了70,相當于將FPN各層所分配的目標都調大,然后我們將anchor的尺度由8改為12對這些大物體進行檢測。
圖5? anchor 修改
如圖6所示參數調整后可以發現FPN中目標數量的分布更加接近正態分布,我們認為這樣的一種分布對檢測會有所幫助。從ResNet的幾個stage的卷積數量我們可以看到,FPN中間層所對應的ResNet的stage參數較多應檢測較多目標,FPN兩側對應到backbone的參數較少檢測目標數不宜過多。
?
? ? ? ? ? ? ?圖6 目標在FPN上的數量分布變化
在圖像增強時,我們加入在線的mixup進行24個epoch的訓練可以提升到91.2%~91.3%,不過只有12個epoch的時候沒有提升。Mixup我們設置的比較簡單,兩張圖像分別以0.5的比例進行融合,因此沒必要對loss進行加權。
圖7 mixup 效果圖
●3.模型融合●
之前的測試過程中,我們認為1080Ti與2080速度應該相差不大,每次1080Ti上測試大約需要40分鐘,因此我們只選用3個模型左右,這一點是比較吃虧的,在B榜的測試時我們發現2080居然比1080Ti快很多,我們單個模型加翻轉測試只使用了25分鐘,如果用更多模型可能會進一步提高分數。我們使用基于ResNext101 x32+gcb+DCN的Cascade RCNN,基于ResNext101 x64 +DCN的Cascade RCNN,基于ResNext101 x64 +DCN的Guided anchor Cascade RCNN。對于融合所使用的方法,不同的方法所能取得的效果都相差不大,我們采用的方法是論文《Weighted Boxes Fusion: ensembling boxes for object detection models》所提供的方法,融合閾值設置為0.8.
圖8 wbf效果圖
●4.參數效果●
表2 參數設置
Backbone | ResNext101 ? x64+DCN |
SoftNMS | 閾值0.001 |
max_per_img | 300 |
裁剪 | 隨機0.8w,0.8h |
多尺度 | 短邊[640,960],長邊1800 |
翻轉 | 水平+垂直 |
Anchor | [2.0/3.0,1.0,1.5],scale=12 |
ROI | finest_scale=70 |
OHEM | ü |
Mixup | 0.5概率,固定lamda=0.5 |
Epoch | 24個epoch,[16,22]下降 |
測試 | 水平翻轉,短邊1200 |
模型融合 | WBF,IOU=0.8,max,weight=[1.0,1.0, ? 1.0] |
圖9 A榜精度變化
四、NAIE平臺部署使用
●1.平臺理解●
個人理解NAIE平臺主要由三部分組成,本地調試區、云端存儲區、云端訓練區域,對這三部分各自地功能有所了解便可以很快上手。
本地調試區域基于vscode,關聯到一臺無GPU的服務器,可以在命令行像正常linux服務器一樣操作進行環境的初步部署調試。
云端存儲區域主要保存大的數據以及預訓練模型,像預訓練模型這些大文件是無法直接從本地調試區傳送到模型訓練區域的。
模型訓練區域調用GPU完成模型的訓練,并將訓好的參數模型copy到云端進行存儲,只有存至云端的模型才可下載。
●2. 模型部署●
這里以mmdetection的部署為例進行介紹。
1)?????? 代碼上傳
代碼上傳通過右鍵選取NAIE upload,代碼上傳時有大小限制,大約不能超過100M,因此建議將預訓練模型以及一些無關的文件刪除只保留核心代碼。
2)?????? 環境部署
環境部署需要在本地代碼區寫一個requirements.txt的文件,上面寫明所需要的python庫和版本號。
3)?????? 模型運行
平臺不支持sh文件的運行,因此需要寫一個py比如叫model.py ,里面使用os.system()仿照命令行進行執行。
此外在model.py中還要調用moxing 包,將訓好的模型存至云端。
在模型訓練區域,選中model.py 以及所需的GPU規格進行訓練。
4)?????? 額外補充
直接通過NAIE upload是無法完成大文件上傳的,因此可以在本地調試區域寫一個程序比如叫debug.py, 在程序中調用wget下載文件,并通過moxing包傳至云端,訓練過程中可以在model.py中利用moxing包再將其傳輸到服務器中。
五、總結
雖然我們的名次不是特別好,和前面的隊伍相比還有一定差距,但還是通過比賽積累了很多經驗,希望通過這次分享能給大家提供一定借鑒。特別感謝NAIE提供的免費顯卡為我們科研以及參加比賽提供了很大的幫助,修改代碼和訓練都非常方便,前期熟悉平臺遇到的問題都能及時解答或者協助解決。不過仍有一些需要改進的地方,在這里提一點點小建議:代碼同步有一定的bug,有時候在本地修改的代碼在GPU服務器上未做修改,即便點了數據同步,實際上也并沒有同步。訓練日志顯示有一些不方便,如果日志較長中間的日志不好查閱,要往上翻好久,最好能有日志下載功能。
六、?? 參考文獻
[1].?? Cai Z , Vasconcelos N . Cascade R-CNN: Delving into High Quality Object Detection[J]. 2017.
[2].?? Zhang H , Cisse M , Dauphin Y N , et al. mixup: Beyond Empirical Risk Minimization[J]. 2017.
[3].?? Solovyev R , Wang W . Weighted Boxes Fusion: ensembling boxes for object detection models[J]. arXiv, 2019.
[4].??? P. Wang, X. Sun, W. Diao, and K. Fu, “Fmssd: Feature-merged single-shot detection for multiscale objects in large-scale remote sensing imagery,” IEEE Transactions on Geoscience and Remote Sensing, 2019.
[5].??? Zhang S , Chi C , Yao Y , et al. Bridging the Gap Between Anchor-based and Anchor-free Detection via Adaptive Training Sample Selection[J]. 2019.
[6].??? Pang J , Chen K , Shi J , et al. Libra R-CNN: Towards Balanced Learning for Object Detection[J]. 2019.
[7].??? Deng L , Yang M , Li T , et al. RFBNet: Deep Multimodal Networks with Residual Fusion Blocks for RGB-D Semantic Segmentation[J]. 2019.
[8].??? Ren S , He K , Girshick R , et al. Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks[J]. IEEE Transactions on Pattern Analysis and Machine Intelligence, 2015, 39(6).
[9].??? Lin T Y , Dollár, Piotr, Girshick R , et al. Feature Pyramid Networks for Object Detection[J]. 2016.
[10]. J. Dai, H. Qi, Y. Xiong, Y. Li, G. Zhang, H. Hu, and Y.Wei, “Deformable convolutional networks,” in Proceedings of the IEEE international conference on computer vision, 2017, pp. 764–773.
[11]. X. Zhu, H. Hu, S. Lin, and J. Dai, “Deformable convnets v2: More deformable, better results,” in Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition, 2019, pp. 9308–9316.
[12]. Z. Huang, X. Wang, L. Huang, C. Huang, Y. Wei, and W. Liu, “Ccnet: Criss-cross attention for semantic segmentation,” in Proceedings of the IEEE International Conference on Computer Vision, 2019, pp. 603–612.
[13]. Wang J , Chen K , Yang S , et al. Region Proposal by Guided Anchoring[J]. 2019.
往期精彩回顧適合初學者入門人工智能的路線及資料下載機器學習及深度學習筆記等資料打印機器學習在線手冊深度學習筆記專輯《統計學習方法》的代碼復現專輯 AI基礎下載機器學習的數學基礎專輯獲取一折本站知識星球優惠券,復制鏈接直接打開:https://t.zsxq.com/yFQV7am本站qq群1003271085。加入微信群請掃碼進群:總結
以上是生活随笔為你收集整理的【数据竞赛】AI在垃圾分类中的应用小侃(海华大赛获奖者系列分享一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Python基础】Pandas批量合并
- 下一篇: 【机器学习基础】通俗讲解集成学习算法!