AI大有可为:NAIE平台助力垃圾分类

Wesley13
• 阅读 779

摘要:生活垃圾的分类和处理是目前整个社会都在关注的热点,如何对生活垃圾进行简洁高效的分类与检测对垃圾的运输处理至关重要。AI技术在垃圾分类中的应用成为了关注焦点。

如今AI已经是这个时代智能的代名词了,任何领域都有AI的身影,垃圾分类及监管等场景自然也少不了“AI+”的赋能。

不过,垃圾往往属于商品的极端变形体,情况比较特殊。目前的技术在视觉可见的基础上,是可以做到垃圾分类报警提醒的,比如判断垃圾是否是经过分类整理的。至于是否能够直接进行视觉检测并分类,且达到某种效果,需要更多的数据和实验支撑才能判断这件事情的可行性。针对这些问题,我们或许可以从海华垃圾分类挑战赛中去听听参赛者都是如何用技术来改变世界的。

海华垃圾分类挑战赛数据包括单类垃圾数据集以及多类垃圾数据集。单类垃圾数据集包含80,000张单类生活垃圾图片,每张单类垃圾图片中仅有一个垃圾实例。多类垃圾数据集包括4998张图像,其中2,998张多类垃圾图片作为训练集数据,A榜和B榜各包含1000张测试图像,每张多类垃圾图片中包含至多20类垃圾实例。我们将对两种数据集分别进行介绍。

一、多类别垃圾

AI大有可为:NAIE平台助力垃圾分类

图1 多类垃圾数据类别分布

如图1所示,多类别垃圾涵盖了204类垃圾,但这204类的数据非常不均衡,有一些类别数目非常少甚至没有出现。

AI大有可为:NAIE平台助力垃圾分类

图2 多类垃圾数据可视化

图2中两张图是训练集中的两张图像,垃圾目标主要集中在图像的中心区域重叠度较高,此外可以看到很一些目标往往会以不同的角度姿态在另一张图像中出现。

从图1与图2的观察与统计我们可以得出几个结论:

(1)由于一个物体经常在多张图像中出现,因此过拟合这些目标非常有效,这也是为什么这个比赛AP能训到90以上的原因。因此可以考虑参数量更大的backbone,比如ResNext101 X64+DCN。

(2)图像是俯视拍摄的,水平和垂直翻转都很有效。

(3)虽然类别非常不均衡,但是由于目标的重复出现,经常几个目标的训练,再见到同一个目标就能100%的检测到。类别不均衡主要对数据极少的物体有影响,因此只需要对这些目标进行扩充,主要包括墨盒、螺蛳、话梅核、贝类等。

(4)重叠度较高可以使用mixup等方法,人为地制造一些重叠度高的目标进行训练。

表1 数据统计

AI大有可为:NAIE平台助力垃圾分类

除了图像级别的宏观统计,我们对数据集中的目标也做了详细分析。表1为目标大小、以及长宽比层面的统计。首先物体长度按照coco的划分,大于96的属于大物体,75%的目标都是大物体,这意味着针对小物体的提升方法是基本无效的。其次长宽比很少有大比例物体的出现,这些给予我们anchor方面的参数调整很多启发。

二、单类别垃圾

单类别垃圾主要包含80000张图像,每张1个目标,如左边两张图所示单类别垃圾的目标都较大。单类的使用主要有两种思路,一种是对类别少的数据扩充,另一种是使用单类数据集训练得到一个较好的预训练模型。

AI大有可为:NAIE平台助力垃圾分类

图3数据对比

数据扩充时我们发现,和多类别垃圾相比,同一类的目标并不是完全一致的,单类的小龙虾是小龙虾,多类的小龙虾实际标的是牛奶盒,二极管标的是塑料管。这一点说明想用单类做数据扩充是行不通的,因为数据不是同源的。我们尝试了这种方案,但是精度保持不变。

针对预训练模型,由于目标较大,我们将图像按照4*4进行拼接,减少了数据量,提升了单张图像的目标数,也能取得一定的效果。但是当与其他增强方法结合时基本没有效果,因此我们也放弃了这种方案。

三、模型方案:

AI大有可为:NAIE平台助力垃圾分类

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对这些大物体进行检测。

AI大有可为:NAIE平台助力垃圾分类

图5 anchor 修改

如图6所示参数调整后可以发现FPN中目标数量的分布更加接近正态分布,我们认为这样的一种分布对检测会有所帮助。从ResNet的几个stage的卷积数量我们可以看到,FPN中间层所对应的ResNet的stage参数较多应检测较多目标,FPN两侧对应到backbone的参数较少检测目标数不宜过多。

AI大有可为:NAIE平台助力垃圾分类

图6 目标在FPN上的数量分布变化

在图像增强时,我们加入在线的mixup进行24个epoch的训练可以提升到91.2%~91.3%,不过只有12个epoch的时候没有提升。Mixup我们设置的比较简单,两张图像分别以0.5的比例进行融合,因此没必要对loss进行加权。

AI大有可为:NAIE平台助力垃圾分类

图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.

AI大有可为:NAIE平台助力垃圾分类

图8 wbf效果图

4.参数效果

表2 参数设置

AI大有可为:NAIE平台助力垃圾分类

AI大有可为:NAIE平台助力垃圾分类

图9 A榜精度变化

四、NAIE平台部署使用

1.平台理解

个人理解NAIE平台主要由三部分组成,本地调试区、云端存储区、云端训练区域,对这三部分各自地功能有所了解便可以很快上手。

AI大有可为:NAIE平台助力垃圾分类

本地调试区域基于vscode,关联到一台无GPU的服务器,可以在命令行像正常linux服务器一样操作进行环境的初步部署调试。

AI大有可为:NAIE平台助力垃圾分类

云端存储区域主要保存大的数据以及预训练模型,像预训练模型这些大文件是无法直接从本地调试区传送到模型训练区域的。

模型训练区域调用GPU完成模型的训练,并将训好的参数模型copy到云端进行存储,只有存至云端的模型才可下载。

2. 模型部署

这里以mmdetection的部署为例进行介绍。

  • 1)代码上传

代码上传通过右键选取NAIE upload,代码上传时有大小限制,大约不能超过100M,因此建议将预训练模型以及一些无关的文件删除只保留核心代码。

  • 2)环境部署

环境部署需要在本地代码区写一个requirements.txt的文件,上面写明所需要的python库和版本号。

AI大有可为:NAIE平台助力垃圾分类

  • 3)模型运行

平台不支持sh文件的运行,因此需要写一个py比如叫model.py ,里面使用os.system()仿照命令行进行执行。

AI大有可为:NAIE平台助力垃圾分类

此外在model.py中还要调用moxing 包,将训好的模型存至云端。

AI大有可为:NAIE平台助力垃圾分类

在模型训练区域,选中model.py 以及所需的GPU规格进行训练。

AI大有可为:NAIE平台助力垃圾分类

  • 4)额外补充

直接通过NAIE upload是无法完成大文件上传的,因此可以在本地调试区域写一个程序比如叫debug.py, 在程序中调用wget下载文件,并通过moxing包传至云端,训练过程中可以在model.py中利用moxing包再将其传输到服务器中。

AI大有可为:NAIE平台助力垃圾分类

几位参赛者最终完成比赛并获得奖励,虽然名次不是特别好,但还是通过比赛积累了很多经验。他们表示,取得的成绩离不开华为NAIE训练平台的算力支持,华为NAIE训练平台免费提供了V100和P100显卡进行训练,为我们科研以及参加比赛提供了很大的帮助,修改代码和训练都非常方便,前期熟悉平台遇到的问题都能及时解答或者协助解决。希望通过这次分享能给大家提供一定借鉴和避坑的经验。

参考文献

[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.

点击关注,第一时间了解华为云新鲜技术~

点赞
收藏
评论区
推荐文章
灯灯灯灯 灯灯灯灯
3年前
阿里面试被问到【垃圾回收器】,不会怎么办??
垃圾回收器GC分类与性能指标垃圾回收器概述1.垃圾收集器没有在规范中进行过多的规定,可以由不同的厂商、不同版本的JVM来实现。2.由于JDK的版本处于高速迭代过程中,因此Java发展至今已经衍生了众多的GC版本。3.从不同角度分析垃圾收集器,可以将GC分为不同的类型。Java不同版本新特性1.语法层面:Lambda表达式、switch、
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
灯灯灯灯 灯灯灯灯
3年前
【垃圾回收】全面解析,内含面试题及图文详解!!
垃圾回收概述和相关算法1.Java和C语言的区别,就在于垃圾收集技术和内存动态分配上,C语言没有垃圾收集技术,需要程序员手动的收集。2.垃圾收集,不是Java语言的伴生产物。早在1960年,第一门开始使用内存动态分配和垃圾收集技术的Lisp语言诞生。3.关于垃圾收集有三个经典问题:哪些内存需要回收?什么时候
Wesley13 Wesley13
3年前
Java系列笔记
Java垃圾回收概况  JavaGC(GarbageCollection,垃圾收集,垃圾回收)机制,是Java与C/C的主要区别之一,作为Java开发者,一般不需要专门编写内存回收和垃圾清理代码,对内存泄露和溢出的问题,也不需要像C程序员那样战战兢兢。这是因为在Java虚拟机中,存在自动内存管理和垃圾清扫机制。概括地说,该机制对JVM(J
Wesley13 Wesley13
3年前
Java垃圾回收调优
Java垃圾回收调优博客分类:jvmjava在Java中,通常通讯类型的服务器对GC(GarbageCollection)比较敏感。通常通讯服务器每秒需要处理大量进出的数据包,需要解析,分解成不同的业务逻辑对象并做相关的业务处理,这样会导致大量的临时对象被创建和回收。同时服务器如果需要同时保存用户状态的话,又会产生很多永久的对象,比如用户sess
Wesley13 Wesley13
3年前
Java 内存区域和GC机制
Java垃圾回收概况  JavaGC(GarbageCollection,垃圾收集,垃圾回收)机制,是Java与C/C的主要区别之一,作为Java开发者,一般不需要专门编写内存回收和垃圾清理代码,对内存泄露和溢出的问题,也不需要像C程序员那样战战兢兢。这是因为在Java虚拟机中,存在自动内存管理和垃圾清扫机制。概括地说,该机制对JVM
Stella981 Stella981
3年前
JVM笔记(4)
第三章垃圾收集器和内存分配策略  第三节垃圾收集算法   1.分类:引用计数式垃圾收集(直接垃圾收集) 和追踪式垃圾收集(间接垃圾收集)   2.分代收集理论:1)弱分代假说:主要是一些朝生夕灭的对象。                 2)强分代假说:这里是一些可以熬过多次垃圾收集器收集的
Stella981 Stella981
3年前
JVM的GC算法总结
Java程序在运行过程中,会产生大量的内存垃圾(一些没有引用指向的内存对象都属于内存垃圾,因为这些对象已经失去标记,程序用不了它们了,对程序而言它们已经废弃),为了确保程序运行时的性能,java虚拟机在程序运行的过程中不断地进行自动的垃圾回收(GC),这就是我们的垃圾回收机制,关于垃圾回收我总结了一下几种:标记–清除算法(MarkSweep)
kenx kenx
1年前
小白畅玩免费支持ChatGPT3和4,一键定制自己专属AI
AI爆炸时代。你不用AI,别人就会用AI,当别人用AI,为自己给工作生活赋能时候。生活自在,工作高效,AI正在潜移默化改变我们生活基于OPENAI平台轻松让AI为你的生活赋能.总之我现在生活已经离不开AI,帮助了。不管是工作上问题,生活上有问题。我的第一方
Mebius Mebius
1年前
手把手教你写垃圾分类系统
这里收集了一份关于垃圾分类的数据集,一共有四个大类和245个小类,大类分别是厨余垃圾、可回收物、其他垃圾和有害垃圾,小类主要是垃圾的具体类别,果皮、纸箱等。