ECCV18 | 如何正确使用样本扩充改进目标检测性能(附Github地址)
在大多数视觉任务中,对图像进行颜色改变或是增加随机噪声等这些通用数据增广操作,都会改进模型预测能力,但如果能利用特定任务的先验知识则往往会获得更大的性能改进。比如在目标检测的任务中,将目标的图像随机复制粘贴到其他背景图像中,形成人造的含有目标的样本。
来自ECCV2018的论文《Modeling Visual Context is Key to Augmenting Object Detection Datasets》研究了在目标检测任务中,使用目标类实例分割标注的数据进行数据增广的上下文建模,取得了显著的性能改进。
作者信息
算法思想
将拥有像素级标注的对象实例,与场景图像合成,作为目标检测的训练图像是一种显而易见的样本扩充,但问题并不是这么简单,该文作者发现如果忽视了场景图像上下文本身出现该对象的可能性,随机将对象实例与图像合成的话,有时候甚至会使检测性能下降。
如下图所示:
上图中将Instances列中的图像放入Images列中。右上角是正常的图像合成,使用上下文引导(context guidance)的方法,这些物体在现实世界中经常是自然同时出现的。右下角是错误合成的图像,狗的头部不能以大的尺度出现在铁轨上,啤酒瓶不该和飞机一起出现在天空中。
也许你已经想到了这篇文章的想法,训练一个深度学习网络,预测Images中某一幅图像是否适合与某一类实例instance相合成。
请看下图:
首先在场景图像中生成200个候选框,然后以每个候选框为中心裁剪出包围它的周围邻域图像,将候选框内像素置0,将此裁剪出的图像送入Context CNN,分类其与那一类目标合成最自然。最后将目标实例适应大小(rescale)并与上述图像融合(blend),作为扩充的训练样本。
下面是一些常用的图像blend合成方法示例:
如何为Context CNN分类器构建训练样本呢?
该文作者的做法非常简单,找到数据库中含有目标的图像中的目标包围框,将完全覆盖此包围框的外围图抠出来作为正样本。
负样本则是在那些不含有目标的区域抠图。
请看下图,在第一和第二行展示了构建的正样本,第三行展示了构建的负样本。
假设目标检测的类别是K类,加上负样本类,则该分类问题是K+1类图像的分类问题,训练时作者使用在ImageNet预训练的ResNet50网络微调权重。
下面是一些blend合成后的样本示例:
第一行是合成的比较自然的,第二行有些视觉上的小问题,第三行则是一些错误合成的例子。
实验结果
训练数据使用Pascal VOC 2012数据集的训练集,共20类目标,其目标含有像素级语义标注,共1464幅图像,目标检测器和Context CNN分类器均在其上训练。
测试数据使用Pascal VOC 2007数据集的测试集,其含有4956幅图像,类别与训练集相同。
目标检测器模型使用开源的BlitzNet。
Base-DA:常规的图像颜色改变、图像缩放旋转等样本扩充方法。
Random-DA:使用随机背景图像与目标图像合成的方法。
Context-DA:该文提出的考虑上下文建模的方法。
作者首先为每一个目标类训练单个的检测器,训练20个,评估其性能,如上图中的Table 1,
相比Base-DA方法,可以看到除了在chair类性能略有下降,其他类别性能均上升,而随机图像合成的Random-DA则对性能造成了损害。
这证明该文提出的方法不仅有效,而且对于目标类别没有特定性,是通用的目标检测样本扩充方法。
而后作者训练一个多目标检测器,如上图中的Table 2,除了在bus类下降,整体性能同样得到提升。
上述方法用在语义分割上怎么样?
上文证明,这种面向特定任务的目标检测样本扩充方法大幅提高了性能,那能否将其用在语义分割场景中呢?
答案是肯定的。在作者后续扩充版本的论文《On the Importance of Visual Context for Data Augmentation in Scene Understanding》中,使用上述方法,也改进了语义分割的性能。
如果训练数据只有目标的包围框,没有像素级标注怎么办?
上述增广方法,必须得到目标的像素级标注,不然在合成的时候会很不自然,分割数据的标注可是非常耗时且昂贵的。
作者的答案是使用弱监督学习,在扩充版本论文中,对于训练数据中图像使用DeepLabV1-DeepLabV4语义分割方法分割出目标,将分割结果集成,然后用于训练数据的合成。
通过使用这种弱监督学习的方法,相对有像素级标注的监督学习方法,只损失了0.6%的mAP性能,仍比不进行样本扩充高出1.6%。
总结
这篇论文深入研究了目标检测样本扩充的上下文建模方法,表明样本扩充不能乱来,也要有“基本法”,比较有启发的是,那常规的样本扩充方法是否也有值得探索的“基本法”呢?比如颜色改变的程度大小?比如样本旋转的角度?等等。
期待各位读者能发明更具指导性的方法来。
工程地址:
http://thoth.inrialpes.fr/research/context_aug/
https://github.com/dvornikita/context_aug