冠军方案之 X光限制品监测
freeopen 2021-02-14 [机器学习] #top1冠军:YuanXu
任务说明
包裹X光限制品监测作为日常包裹物流行业及安防行业的重要环节,承担着防止易燃易爆等危险品进入货运渠道,管理刀具等特殊货运物品,监测毒品等国家重点违禁品偷运等工作。随着线上购物的普及和快速发展,线上物流包裹数量已经远超人工可以处理的范围,给物流包裹监管带来了巨大挑战。
针对给出的限制品种类,利用X光图像及标注数据,研究开发高效的计算机视觉算法,监测图像是否包含危险品及其大致位置。通过自动化监测包裹携带品算法,降低漏检风险及误报率,提升危险品管理效率。
限制品包括:铁壳打火机、黑钉打火机、刀具、电池电容以及剪刀五类(类别id依次从1到5)。
评估指标
- 评测方式采用计算
box mAP
的方式,对IoU = 0.5:0.05:0.95
,分别计算mAP
,再做平均得到最后的mAP
。 - 单个模型整体大小需不超过
600MB
(即不超过VGG19
大小),模型不得超过2
个。 - 响应时间越快越好
问题分析
比赛任务是经典的图像语义分割(semantic-segmentation)的问题,简单说就是要在像素级别将前景类别标识出来。研究kaggle上的几个图像语义分割的比赛,发现Unet和Mask-RCNN的成绩最好。
因为时间原因,最后选择 Unet。因为Unet能直接输出与图像1: 1的mask,且超参数少,属于端到端网络。
模型设计
采用经典Unet模型。
- resnet 做 encoder
- 将各个decoder的输出cat在一起,作为最终的输出特征
- 除了输出前景物体的mask, 还单独输出物体的边沿。
涨分点
数据增强
- 常用的图像数据增强,包括旋转、翻转、颜色、噪声、形变等。
- 考虑到X光的穿透性,将没有危险品的图片和有危险品的图片进行合成(blend操作)。
快速训练
训练速度直接决定了开发的迭代速度和实验的总次数。
在训练的初期使用比较小的图像作为输入,然后再使用较大的图像作为输入。这个过程就像人学习一样,先从简单的、粗略的开始学起,然后在学习复杂的、精细的,这样最后网络收敛会更快、更好。具体为先训练128p的图像,再在原模型上训练256p的图像。
融合策略
因为数据集比较小,即使使用了各种数据增强技术,训练使用以rsenet154作为encoder这样大网络,选取一个snapshot作为最终模型的参数还是会有过拟合的风险,选取多个snapshot使用参数均值的方法对模型参数进行融合可以提高模型的泛化能力。
但是传统的方法是对一个模型进行多次训练来取得多个snapshot,这会需要很多的计算时间。根据不同评价标准选择融合的候选参数的方法,也就是选择最小验证loss,最大mIoU,和最小训练loss的三个模型参数进行融合。
半监督学习
使用已训练的模型在测试数据上的结果作为训练数据,来达到增加数据集、进而提高模型精度的方法。
测试增强
在推理时,通过对图像的旋转和翻转,并对结果取平均也能提高精度。但是这样推理测试的速度慢了8倍,考虑到数据中有很多图片没有危险品,而测试增强对于这些图片没有改进,所以避免对这些图片多次测试可大幅提高测试速度。代码改动也很少。
总结
- 端到端的一体化网络设计,方便使用不同大小的预训练网络
- 使用逐步增加训练图像大小等方法,提高训练速度和精度
- 使用数据增强、模型参数均值、半监督学习的方法提高模型泛化能力
- 使用测试增强提高结果精度(并优化)
- 一些实验结果