【数据竞赛】AI在垃圾分类中的应用小侃(海华大赛获奖者系列分享一)
文章來源于網(wǎng)絡(luò)人工智能園地,作者劉迎飛
我們團(tuán)隊(duì)汪汪隊(duì),團(tuán)隊(duì)成員分別來自中科院空天信息研究院和浙江大學(xué),有幸在biendata與海華交叉信息研究院舉辦的垃圾分類比賽中收獲第三名的成績,在這里簡單跟大家分享下比賽方案。
一、賽題背景
生活垃圾的分類和處理是目前整個社會都在關(guān)注的熱點(diǎn),如何對生活垃圾進(jìn)行簡潔高效的分類與檢測對垃圾的運(yùn)輸處理至關(guān)重要。海華垃圾分類挑戰(zhàn)賽是一項(xiàng)針對204種垃圾的檢測任務(wù),很好切合了當(dāng)下垃圾分類的熱點(diǎn)。
此次比賽,數(shù)據(jù)和訓(xùn)練的模型都非常龐大,對算力的要求非常高,好在比賽得到了華為NAIE訓(xùn)練平臺的算力支持,免費(fèi)為各個選手V100和P100顯卡進(jìn)行訓(xùn)練,平臺將環(huán)境的部署進(jìn)行了大量精簡,并提供專業(yè)人員的答疑,我花了大概一天左右的時間,就能夠熟練使用該平臺開發(fā)模型。
二、數(shù)據(jù)探索
海華垃圾分類挑戰(zhàn)賽數(shù)據(jù)包括單類垃圾數(shù)據(jù)集以及多類垃圾數(shù)據(jù)集。單類垃圾數(shù)據(jù)集包含80,000張單類生活垃圾圖片,每張單類垃圾圖片中僅有一個垃圾實(shí)例。多類垃圾數(shù)據(jù)集包括4998張圖像,其中2,998張多類垃圾圖片作為訓(xùn)練集數(shù)據(jù),A榜和B榜各包含1000張測試圖像,每張多類垃圾圖片中包含至多20類垃圾實(shí)例。我們將對兩種數(shù)據(jù)集分別進(jìn)行介紹。
●1.多類別垃圾●
圖1 多類垃圾數(shù)據(jù)類別分布
如圖1所示,多類別垃圾涵蓋了204類垃圾,但這204類的數(shù)據(jù)非常不均衡,有一些類別數(shù)目非常少甚至沒有出現(xiàn)。
圖2 多類垃圾數(shù)據(jù)可視化
圖2中兩張圖是訓(xùn)練集中的兩張圖像,垃圾目標(biāo)主要集中在圖像的中心區(qū)域重疊度較高,此外可以看到很一些目標(biāo)往往會以不同的角度姿態(tài)在另一張圖像中出現(xiàn)。
從圖1與圖2的觀察與統(tǒng)計我們可以得出幾個結(jié)論:
1)???? 由于一個物體經(jīng)常在多張圖像中出現(xiàn),因此過擬合這些目標(biāo)非常有效,這也是為什么這個比賽AP能訓(xùn)到90以上的原因。因此可以考慮參數(shù)量更大的backbone,比如ResNext101 X64+DCN。
2)???? 圖像是俯視拍攝的,水平和垂直翻轉(zhuǎn)都很有效。
3)???? 雖然類別非常不均衡,但是由于目標(biāo)的重復(fù)出現(xiàn),經(jīng)常幾個目標(biāo)的訓(xùn)練,再見到同一個目標(biāo)就能100%的檢測到。類別不均衡主要對數(shù)據(jù)極少的物體有影響,因此只需要對這些目標(biāo)進(jìn)行擴(kuò)充,主要包括墨盒、螺螄、話梅核、貝類等。
4)???? 重疊度較高可以使用mixup等方法,人為地制造一些重疊度高的目標(biāo)進(jìn)行訓(xùn)練。
表1 數(shù)據(jù)統(tǒng)計
平均物體長度 | 平均長寬比 | 每類物體數(shù)量 | |
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 |
除了圖像級別的宏觀統(tǒng)計,我們對數(shù)據(jù)集中的目標(biāo)也做了詳細(xì)分析。表1為目標(biāo)大小、以及長寬比層面的統(tǒng)計。首先物體長度按照coco的劃分,大于96的屬于大物體,75%的目標(biāo)都是大物體,這意味著針對小物體的提升方法是基本無效的。其次長寬比很少有大比例物體的出現(xiàn),這些給予我們anchor方面的參數(shù)調(diào)整很多啟發(fā)。
●2.單類別垃圾●
單類別垃圾主要包含80000張圖像,每張1個目標(biāo),如左邊兩張圖所示單類別垃圾的目標(biāo)都較大。單類的使用主要有兩種思路,一種是對類別少的數(shù)據(jù)擴(kuò)充,另一種是使用單類數(shù)據(jù)集訓(xùn)練得到一個較好的預(yù)訓(xùn)練模型。
圖3數(shù)據(jù)對比
數(shù)據(jù)擴(kuò)充時我們發(fā)現(xiàn),和多類別垃圾相比,同一類的目標(biāo)并不是完全一致的,單類的小龍蝦是小龍蝦,多類的小龍蝦實(shí)際標(biāo)的是牛奶盒,二極管標(biāo)的是塑料管。這一點(diǎn)說明想用單類做數(shù)據(jù)擴(kuò)充是行不通的,因?yàn)閿?shù)據(jù)不是同源的。我們嘗試了這種方案,但是精度保持不變。
針對預(yù)訓(xùn)練模型,由于目標(biāo)較大,我們將圖像按照4*4進(jìn)行拼接,減少了數(shù)據(jù)量,提升了單張圖像的目標(biāo)數(shù),也能取得一定的效果。但是當(dāng)與其他增強(qiáng)方法結(jié)合時基本沒有效果,因此我們也放棄了這種方案。
三、模型方案:
●1.Baseline●
圖4? baseline方案
我們baseline選用的是mmdetection所實(shí)現(xiàn)的Cascade RCNN,backbone選用的是ResNeXt101 X64+DCN。因?yàn)榇舜伪荣惒捎玫氖莄oco的評測指標(biāo)AP50:95,因此Cascade RCNN通過設(shè)置不同的閾值進(jìn)行回歸可以取得非常好的效果。此外較大的backbone在這個數(shù)據(jù)集上往往能取得更好的效果。
●2. 參數(shù)調(diào)整●
在比賽的初期,我們將訓(xùn)練集的數(shù)據(jù)選取2500張訓(xùn)練,498張本地驗(yàn)證,在此基礎(chǔ)上進(jìn)行調(diào)參。由于目標(biāo)重疊度較高,在使用softnms閾值為0.001、max_per_img =300、翻轉(zhuǎn)測試時效果較好,相比不使用這些參數(shù)大約能提升0.02左右。受到顯存的限制從圖像中隨機(jī)裁剪(0.8w,0.8h)的圖像區(qū)域,然后將短邊隨機(jī)限制在[640,960]之間,長邊限制到1800進(jìn)行多尺度訓(xùn)練,測試時圖像適度放大短邊設(shè)置為1200,精度可以訓(xùn)練到88.3%, 結(jié)合OHEM精度訓(xùn)練到88.6%左右,將本地驗(yàn)證的498張圖像也輸入進(jìn)去訓(xùn)練能提升0.5%到89.2%左右。
針對數(shù)量較少的類別,我們在多類訓(xùn)練集中對貝類去硬殼、螺螄、二極管、話梅核這幾個類別進(jìn)行補(bǔ)充標(biāo)注,把一些模棱兩可的目標(biāo)都進(jìn)行標(biāo)注提高召回率,大約標(biāo)記了100多個目標(biāo),在A榜能提升到90%左右。
如圖5所示,針對anchor的調(diào)整,我們調(diào)整anchor 的比例從【0.5,1.0,2.0】改為【2.0/3.0,1.0,1.5】。此外為了提升大物體的檢測能力,我們調(diào)整FPN的層次劃分從56改為了70,相當(dāng)于將FPN各層所分配的目標(biāo)都調(diào)大,然后我們將anchor的尺度由8改為12對這些大物體進(jìn)行檢測。
圖5? anchor 修改
如圖6所示參數(shù)調(diào)整后可以發(fā)現(xiàn)FPN中目標(biāo)數(shù)量的分布更加接近正態(tài)分布,我們認(rèn)為這樣的一種分布對檢測會有所幫助。從ResNet的幾個stage的卷積數(shù)量我們可以看到,FPN中間層所對應(yīng)的ResNet的stage參數(shù)較多應(yīng)檢測較多目標(biāo),FPN兩側(cè)對應(yīng)到backbone的參數(shù)較少檢測目標(biāo)數(shù)不宜過多。
?
? ? ? ? ? ? ?圖6 目標(biāo)在FPN上的數(shù)量分布變化
在圖像增強(qiáng)時,我們加入在線的mixup進(jìn)行24個epoch的訓(xùn)練可以提升到91.2%~91.3%,不過只有12個epoch的時候沒有提升。Mixup我們設(shè)置的比較簡單,兩張圖像分別以0.5的比例進(jìn)行融合,因此沒必要對loss進(jìn)行加權(quán)。
圖7 mixup 效果圖
●3.模型融合●
之前的測試過程中,我們認(rèn)為1080Ti與2080速度應(yīng)該相差不大,每次1080Ti上測試大約需要40分鐘,因此我們只選用3個模型左右,這一點(diǎn)是比較吃虧的,在B榜的測試時我們發(fā)現(xiàn)2080居然比1080Ti快很多,我們單個模型加翻轉(zhuǎn)測試只使用了25分鐘,如果用更多模型可能會進(jìn)一步提高分?jǐn)?shù)。我們使用基于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》所提供的方法,融合閾值設(shè)置為0.8.
圖8 wbf效果圖
●4.參數(shù)效果●
表2 參數(shù)設(shè)置
Backbone | ResNext101 ? x64+DCN |
SoftNMS | 閾值0.001 |
max_per_img | 300 |
裁剪 | 隨機(jī)0.8w,0.8h |
多尺度 | 短邊[640,960],長邊1800 |
翻轉(zhuǎn) | 水平+垂直 |
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]下降 |
測試 | 水平翻轉(zhuǎn),短邊1200 |
模型融合 | WBF,IOU=0.8,max,weight=[1.0,1.0, ? 1.0] |
圖9 A榜精度變化
四、NAIE平臺部署使用
●1.平臺理解●
個人理解NAIE平臺主要由三部分組成,本地調(diào)試區(qū)、云端存儲區(qū)、云端訓(xùn)練區(qū)域,對這三部分各自地功能有所了解便可以很快上手。
本地調(diào)試區(qū)域基于vscode,關(guān)聯(lián)到一臺無GPU的服務(wù)器,可以在命令行像正常linux服務(wù)器一樣操作進(jìn)行環(huán)境的初步部署調(diào)試。
云端存儲區(qū)域主要保存大的數(shù)據(jù)以及預(yù)訓(xùn)練模型,像預(yù)訓(xùn)練模型這些大文件是無法直接從本地調(diào)試區(qū)傳送到模型訓(xùn)練區(qū)域的。
模型訓(xùn)練區(qū)域調(diào)用GPU完成模型的訓(xùn)練,并將訓(xùn)好的參數(shù)模型copy到云端進(jìn)行存儲,只有存至云端的模型才可下載。
●2. 模型部署●
這里以mmdetection的部署為例進(jìn)行介紹。
1)?????? 代碼上傳
代碼上傳通過右鍵選取NAIE upload,代碼上傳時有大小限制,大約不能超過100M,因此建議將預(yù)訓(xùn)練模型以及一些無關(guān)的文件刪除只保留核心代碼。
2)?????? 環(huán)境部署
環(huán)境部署需要在本地代碼區(qū)寫一個requirements.txt的文件,上面寫明所需要的python庫和版本號。
3)?????? 模型運(yùn)行
平臺不支持sh文件的運(yùn)行,因此需要寫一個py比如叫model.py ,里面使用os.system()仿照命令行進(jìn)行執(zhí)行。
此外在model.py中還要調(diào)用moxing 包,將訓(xùn)好的模型存至云端。
在模型訓(xùn)練區(qū)域,選中model.py 以及所需的GPU規(guī)格進(jìn)行訓(xùn)練。
4)?????? 額外補(bǔ)充
直接通過NAIE upload是無法完成大文件上傳的,因此可以在本地調(diào)試區(qū)域?qū)懸粋€程序比如叫debug.py, 在程序中調(diào)用wget下載文件,并通過moxing包傳至云端,訓(xùn)練過程中可以在model.py中利用moxing包再將其傳輸?shù)椒?wù)器中。
五、總結(jié)
雖然我們的名次不是特別好,和前面的隊(duì)伍相比還有一定差距,但還是通過比賽積累了很多經(jīng)驗(yàn),希望通過這次分享能給大家提供一定借鑒。特別感謝NAIE提供的免費(fèi)顯卡為我們科研以及參加比賽提供了很大的幫助,修改代碼和訓(xùn)練都非常方便,前期熟悉平臺遇到的問題都能及時解答或者協(xié)助解決。不過仍有一些需要改進(jìn)的地方,在這里提一點(diǎn)點(diǎn)小建議:代碼同步有一定的bug,有時候在本地修改的代碼在GPU服務(wù)器上未做修改,即便點(diǎn)了數(shù)據(jù)同步,實(shí)際上也并沒有同步。訓(xùn)練日志顯示有一些不方便,如果日志較長中間的日志不好查閱,要往上翻好久,最好能有日志下載功能。
六、?? 參考文獻(xiàn)
[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.
往期精彩回顧適合初學(xué)者入門人工智能的路線及資料下載機(jī)器學(xué)習(xí)及深度學(xué)習(xí)筆記等資料打印機(jī)器學(xué)習(xí)在線手冊深度學(xué)習(xí)筆記專輯《統(tǒng)計學(xué)習(xí)方法》的代碼復(fù)現(xiàn)專輯 AI基礎(chǔ)下載機(jī)器學(xué)習(xí)的數(shù)學(xué)基礎(chǔ)專輯獲取一折本站知識星球優(yōu)惠券,復(fù)制鏈接直接打開:https://t.zsxq.com/yFQV7am本站qq群1003271085。加入微信群請掃碼進(jìn)群:總結(jié)
以上是生活随笔為你收集整理的【数据竞赛】AI在垃圾分类中的应用小侃(海华大赛获奖者系列分享一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Python基础】Pandas批量合并
- 下一篇: 【机器学习基础】通俗讲解集成学习算法!