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 数据统计
除了图像级别的宏观统计,我们对数据集中的目标也做了详细分析。表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 参数设置
图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.
---------------------------------
本文转自“网络人工智能园地”公众号
- 点赞
- 收藏
- 关注作者
评论(0)