摘要:为了探究垃圾的智能分类等问题,由中关村海华信息研究院、清华大学交叉信息研究院以及Biendata举办的2020海华AI垃圾分类大赛吸引了大量工程师以及高校学生的参与

01赛题介绍

随着我国经济的发展,城市化进程不断加速,生活垃圾对城市环境的威胁日益增加。如何高效、环保地解决处理生活垃圾迫在眉睫。因此垃圾的智能分类对于智能化分拣垃圾、提高垃圾分拣效率就显得十分重要。为了探究这一问题,由中关村海华信息研究院、清华大学交叉信息研究院以及Biendata举办的2020海华AI垃圾分类大赛吸引了大量工程师以及高校学生的参与。由华为NAIE平台提供的算力支持,也为比赛的顺利开展奠定了基础。该比赛旨在激发更广泛的科研探索热情,挖掘更有价值的算法优化和创新。

02数据分析

我们参与的是该比赛的专业赛道,因此有两种数据集可以使用。一种为单类数据集,共80,000张垃圾图像,每张图像中只有一个类别。此外,还提供了图中唯一对象的边框的信息。多类别数据集包含训练集中的2998张垃圾图像,验证集中的1000张垃圾图像,测试集中的1000张垃圾图像,每幅图像最多包含20个类别。

不同于VOC、COCO、OID等常见的目标数据集,这些数据集具有不同的特点:

1. 对于205个类别,单类垃圾数据集的大小就足够了。然而,这个数据集中的垃圾图像与多类数据集中的垃圾图像有很大的不同,即使是同一类别的垃圾。直接使用该数据集来训练模型可能会导致特征不匹配和性能下降(图1)。

图1:左图为多类数据集中的镜子,右图为单类数据集中的镜子

2. 多类数据集在训练集中只包含2998张垃圾图像。而在125个类别的情况下,该数据量是比较小的,且类别存在不平衡的现象。因此大规模数据集的迁移学习和减少过拟合的技术是非常需要的。

3. 在大多数多类图像中,垃圾密集地堆积在图像的中心,并且形状大小不一。它会导致垃圾相互遮挡,使检测任务更加困难。并且每张图像的背景都比较干净(图2)。

图2:多类数据集图像示例

4. 数据集中存在许多混淆类别的垃圾,导致类别标签的不一致性。人工检查和更正标签可能有帮助,但也可能存在导致数据不匹配的风险(图3)。

图3:左右图为同一类物体,但在多类数据集中

左图被标定为食品塑料盒,而右图被标定为食品外包装盒

03Baseline

为了完成该比赛的任务,我们借鉴了其他大型的目标检测竞赛中的解决方案,如COCO、Objects365和OID。在这些解决方案中,我们借鉴了百度在OID 2019中的解决方案。Baseline模型选用的是基于Class-aware的Cascade R-CNN,且同时使用ResNet200-Vd作为模型的backbone并且加入了FPN、Dcnv2和Non-local方法来提高模型的整体效果。训练使用多尺度训练(480:1440:32)和常见的数据增强方法如水平翻转。

迁移学习可以在小数据集上获得良好的性能,因此在该比赛中使用该方法理论上应当可以取得较好的效果。因此,我们选择了COCO、Objects365和OID混合的预训练模型。具体效果如表1所示。

表1:使用不同预训练参数的Baseline的AP

训练方面,由于庞大的模型以及多尺度训练方法,所以在Tesla V100 上batch size只能设置为1,这里感谢华为NAIE提供的算力支持。使用引用动量的SGD作为训练的优化器。基础学习率设置为0.001,权重衰减速率为0.0001。使用了Cosine annealing with warmup的学习率调度策略,从0.0001的学习率开始,1000次迭代后到达基础学习率。我们训练Baseline进行了120K次迭代,训练时间大约40个小时。

04数据增强方案

为了减少在如此小的数据集上的过拟合,就需要大量的数据扩充。我们尝试了许多数据增强方案,最终发现RandomVerticalFlip、AutoAugment和GridMask能有效提高模型性能。

不同于自然图像,对于垃圾图像,水平翻转和垂直翻转的效果是等同的,因此我们使用了RandomVerticalFlip而并非RandomHorizontalFlip。

并且我们将广泛使用于图像分类中的AutoAugment方法迁移到了目标检测中。实验证明,该方法对各种目标检测数据集都是有效的。并且我们在baseline中尝试了三种不同的自动增强策略(表2),发现AutoAugment v0的效果是最好的,最终我们也使用了它。

表2:不同AutoAugment策略下模型的AP

再者我们使用了GridMask的数据增强方法,该方法包括random erasing、hide-and-seek、Dropout以及DropBlock。实验表明,GridMask可以有效减少目标检测的过拟合。并且使用GridMask长时间训练模型可以显著提高模型性能。在本实验中,我们尝试了不同概率和训练时间下的GridMask。如表3所示,使用GridMask的训练模型需要比baseline更长的训练时间。使用0.3的概率足以减少过拟合,且训练时间越长越好。概率为0.5和0.7甚至会导欠拟合的现象。所以如果以较高的GridMask概率训练超过300K次迭代理论上来说可以进一步提高结果。

表3:不同GridMask概率与迭代次数下模型的AP

05模型融合

在最终提交阶段,我们只能在RTX 2080上测试两个小时,但是模型大小不受限制。所以考虑到这些约束条件,我们训练了仅随机种子不同的6个相同的模型来进行模型融合,且使用了前面提到的所有有效技巧。同时使用了Top-k voting nms对6个模型的检测结果进行合并,设置top-k voting的nms的IoU阈值为0.7,该阈值与Cascade R-CNN第三阶段的IoU阈值一致。

06总结

最终我们在测试集上以0.910的成绩取得了第一名,我们认为我们能够取胜的原因主要有以下几点:

(1)参考了大型目标检测比赛前几名的方案

(2)使用了COCO,Object365以及OIDV5的混合预训练模型

(3)使用了多种数据增强方法

(4)在模型融合中使用了top-k voting nms

最后感谢华为提供的NAIE平台,为比赛训练提供了巨大的帮助,平台功能也十分强大。在我们使用平台遇到问题时,官方都及时地进行了解答和协助,十分的给力。我们也非常荣幸能有这次机会和大家分享这次比赛的历程,谢谢!

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

海华大赛第一名团队聊比赛经验和心得:AI在垃圾分类中的应用的更多相关文章

  1. 【干货】Kaggle 数据挖掘比赛经验分享(mark 专业的数据建模过程)

    简介 Kaggle 于 2010 年创立,专注数据科学,机器学习竞赛的举办,是全球最大的数据科学社区和数据竞赛平台.笔者从 2013 年开始,陆续参加了多场 Kaggle上面举办的比赛,相继获得了 C ...

  2. Kaggle 数据挖掘比赛经验分享

    文章发布于公号[数智物语] (ID:decision_engine),关注公号不错过每一篇干货. 来源 | 腾讯广告算法大赛 作者 | 陈成龙 Kaggle 于 2010 年创立,专注数据科学,机器学 ...

  3. Kaggle 数据挖掘比赛经验分享(转)

     原作者:陈成龙 简介 Kaggle 于 2010 年创立,专注数据科学,机器学习竞赛的举办,是全球最大的数据科学社区和数据竞赛平台.笔者从 2013 年开始,陆续参加了多场 Kaggle上面举办的比 ...

  4. ACM比赛经验

    这篇博客是转别人的,觉得很好,希望能在以后的现场赛中用上:ACM比赛经验 推荐此篇文章打印,与模板放在一起. 1. 比赛中评测会有些慢,偶尔还会碰到隔10分钟以上才返回结果的情况,这段时间不能等结果, ...

  5. 成功的背后!(给所有IT人)----转载:来自CSDN第一名博主

    转载:来自CSDN第一名博主:http://blog.csdn.net/phphot/article/details/2187505 放在这里激励你我! 正文: 成功的背后,有着许多不为人知的故事,而 ...

  6. Kaggle网站流量预测任务第一名解决方案:从模型到代码详解时序预测

    Kaggle网站流量预测任务第一名解决方案:从模型到代码详解时序预测 2017年12月13日 17:39:11 机器之心V 阅读数:5931   近日,Artur Suilin 等人发布了 Kaggl ...

  7. 教程 | Kaggle网站流量预测任务第一名解决方案:从模型到代码详解时序预测

    https://mp.weixin.qq.com/s/JwRXBNmXBaQM2GK6BDRqMw 选自GitHub 作者:Artur Suilin 机器之心编译 参与:蒋思源.路雪.黄小天 近日,A ...

  8. 一名3年工作经验的java程序员应该具备的职业技能

    一名3年工作经验的Java程序员应该具备的技能,这可能是Java程序员们比较关心的内容.我这里要说明一下,以下列举的内容不是都要会的东西—-但是如果你掌握得越多,最终能得到的评价.拿到的薪水势必也越高 ...

  9. 一名3年工作经验的java程序员应该具备的技能

    一名3年工作经验的Java程序员应该具备的技能,这可能是Java程序员们比较关心的内容.我这里要说明一下,以下列举的内容不是都要会的东西—-但是如果你掌握得越多,最终能得到的评价.拿到的薪水势必也越高 ...

随机推荐

  1. Java基础-网络编程1

    网络编程 Socket 基本概念 C/S结构 :全称为Client/Server结构,是指客户端和服务器结构.常见程序有QQ.迅雷等软件. B/S结构 :全称为Browser/Server结构,是指浏 ...

  2. Java 项目创建 -- 统一结果处理、统一异常处理、统一日志处理

    一.IDEA 插件使用 1.说明 此处使用 SpringBoot 2.2.6 .JDK 1.8 .mysql 8.0.18 作为演示. 使用 IDEA 作为开发工具. 2.IDEA 插件 -- Lom ...

  3. 核心知识点:python入门

    目录 一.python入门day1-day24 day01-03 编程语言 day04 变量 day05 垃圾回收机制(GC机制) 1 引用计数 2 标记清除 3 分代回收 day05 程序交互与基本 ...

  4. java规范总结

    1.所有的相同类型的包装类对象之间值的比较,全部使用 equals 方法比较. 说明:对于 Integer var = ? 在-128 至 127 范围内的赋值,Integer 对象是在 Intege ...

  5. 机器学习实战基础(十七):sklearn中的数据预处理和特征工程(十)特征选择 之 Embedded嵌入法

    Embedded嵌入法 嵌入法是一种让算法自己决定使用哪些特征的方法,即特征选择和算法训练同时进行.在使用嵌入法时,我们先使用某些机器学习的算法和模型进行训练,得到各个特征的权值系数,根据权值系数从大 ...

  6. 产品升级前后MD5码对比

    在做产品测试的时候,经常会需要对比升级前后的MD5码,这时可以通过终端登录设备,具体步骤如下: 1.在升级前时,将MD5码写入log1.info文件: check_md5 -d / -w log1.i ...

  7. 搭建高可用kubernetes集群(keepalived+haproxy)

    序 由于单master节点的kubernetes集群,存在master节点异常之后无法继续使用的缺陷.本文参考网管流程搭建一套多master节点负载均衡的kubernetes集群.官网给出了两种拓扑结 ...

  8. 高效C++:继承和实现

    如何正确的使用继承和实现是本章说明的重点. 确定public继承的关系是is-a public继承等同于is-a 对public继承,所有base的特性,在derived上都适用 避免遮掩继承而来的名 ...

  9. C++语法小记---string和int的相互转换

    string和int的相互转换 string转int istringstream is(""); //构造输入字符串流,流的内容初始化为“12”的字符串 int i; is > ...

  10. 怎么理解Python迭代器与生成器?

    怎么理解Python迭代器与生成器?在Python中,使用for ... in ... 可以对list.tuple.set和dict数据类型进行迭代,可以把所有数据都过滤出来.如下:         ...