文章来源于网络人工智能园地,作者刘迎飞

我们团队汪汪队,团队成员分别来自中科院空天信息研究院和浙江大学,有幸在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在垃圾分类中的应用小侃(海华大赛获奖者系列分享一)相关推荐

  1. 【数据竞赛】盘点Kaggle中常见的AutoEDA工具库

    在完成竞赛和数据挖掘的过程中,数据分析一直是非常耗时的一个环节,但也是必要的一个环节. 能否使用一个工具代替人来完成数据分析的过程呢,现有的AutoEDA工具可以一定程度上完成上述过程.本文将盘点常见 ...

  2. 爱可可推荐!关于竞赛思路,方法和代码实践,Datawhale数据竞赛Baseline开源分享!...

    数据竞赛中baseline是最入门的分享, 它不仅有思路.方法还有内容: 或许你与Top选手的差距就是一个baseline! 01 项目介绍 如果你是数据竞赛的初学者.爱好者,比赛的baseline不 ...

  3. 爱可可推荐!关于竞赛思路,方法和代码实践,数据竞赛Baseline开源分享!

    数据竞赛中baseline是最入门的分享, 它不仅有思路.方法还有内容: 或许你与Top选手的差距就是一个baseline! 01 项目介绍 如果你是数据竞赛的初学者.爱好者,比赛的baseline不 ...

  4. 垃圾分类不用慌!AI智能垃圾分类来了!

    2019年4月,住建部等九部门印发<在全国地级及以上城市全面开展生活垃圾分类工作的通知>:到2020年,北京.天津.上海.青岛.武汉等46个重点城市基本建成生活垃圾分类处理系统. 伴随人工 ...

  5. 数据竞赛Tricks集锦

    点击上方"Datawhale",选择"星标"公众号 第一时间获取价值内容 本文将对数据竞赛的『技巧』进行全面的总结,同时还会分享下个人对比赛方法论的思考.前者比 ...

  6. 大数据风控AI竞赛总结

    前海征信"好信杯"大数据算法大赛 (2017) 竞赛背景 作为平安旗下专业第三方商业征信机构,前海征信有着丰富的数据资源.本次赛事中主办方前海征信开放业务数据,设计国内首个迁移学习 ...

  7. AI大数据竞赛平台和网站

    http://2021全国大学生大数据竞赛含金量如何? - DataCastle数据城堡的回答 - 知乎 https://www.zhihu.com/question/490822570/answer ...

  8. ​阿里云天池工业AI大赛暨中国“印象盐城,数创未来”大数据竞赛正式启动

    记者 | 张俊潇 官网 | www.datayuan.cn 微信公众号ID | datayuancn 10月11日,"2017杭州·云栖大会"在万众期待中盛大召开,会上马云宣布组建 ...

  9. 【数据竞赛】盘点数据挖掘竞赛中的泄露(Leak)

    作者:姬哀,江离数据挖掘俱乐部 本文是姬哀同学总结的泄露案例和识别方法,非常值得阅读和学习,文章较长建议收藏. 0 前言 泄露是常见的. 如果在一场比赛的中后期,有一些队伍的成绩异常,明显超出常规方案 ...

最新文章

  1. 视频|深度相机与应用
  2. python打开摄像头获取图片_Python基于opencv调用摄像头获取个人图片的实现方法
  3. 【数理逻辑】谓词逻辑 ( 个体词 | 个体域 | 谓词 | 全称量词 | 存在量词 | 谓词公式 | 习题 )
  4. PHP Warning: date() [function.date]解决方案
  5. c语言 函数指针开销,函数指针是否使程序变慢?
  6. SQL数据库高级查询命令(3)
  7. 从零开始学Pytorch(十四)之优化算法进阶
  8. 百度AI学习:一、语音识别
  9. %3c php $str1=,ThinkPHP5.0.215.1.* 代码执行和命令执行漏洞利用
  10. Android:BaseAdapter简单应用
  11. xshell/putty 连接 linux 虚拟机 connection failed 的解决方案
  12. 文件的长度,跟FileReader读到的长度,不一样
  13. Java下载安装错误案例
  14. java ojdbc14 查询数据表,Oracle10g JDBC ojdbc14 DATE类型hibernate查询时分秒问题
  15. java 生成ai矢量图_AI利用自己的工具将位图转换为矢量图
  16. 办理房产证,重要的三张纸
  17. 钟站壤赴梅拱厩沼泊叶
  18. 查询并处理占用8080端口进程
  19. 1、Multisim14 安装教程
  20. vue模板里面直接调用methods里面的方法方式

热门文章

  1. 实验一 绘制金刚石图案
  2. VSTO之旅系列(三):自定义Excel UI
  3. PS网页设计教程——30个优秀的PS网页设计教程的中文翻译教程
  4. 自然归并排序 c++ (原创)
  5. sql server 关联left join条件on和where条件的区别
  6. 树莓派slam_SLAM+语音机器人DIY系列:(五)树莓派3开发环境搭建——6.树莓派USB与tty串口号绑定...
  7. 编程游戏python我的世界_乐学Python编程-做个游戏很简单
  8. 引物的设计及修饰最全教程
  9. java lombok
  10. 转载:概率与梳理统计||数学基础