目标检测——小目标检测问题

小目标的定义

小目标有两种定义方式,一种是相对尺寸大小,如目标尺寸的长宽是原图像尺寸的0.1,即可认为是小目标,另外一种是绝对尺寸的定义,即尺寸小于32*32像素的目标即可认为是小目标。

解决办法

  • 图像的缩放(数据角度的方法)
    很直觉的一种方法,效果也不错。问题在于如果对整张图像进行放大,即上采样,训练的成本会大大增加。
  • 使用深度较浅的网络
    小物体更容易被接受场较小的探测器预测。较深的网络具有较大的接受域,容易丢失关于较粗层中较小对象的一些信息。
  • 利用小目标周围的上下文信息(数据角度的方法)
  • 超分辨率,指针对小目标的图像增强等。最典型的是利用生成对抗性网络选择性地提高小目标的分辨率。
  • 图像金字塔
    较早提出对训练图片上采样出多尺度的图像金字塔。通过上采样能够加强小目标的细粒度特征,在理论上能够优化小目标检测的定位和识别效果。但基于图像金字塔训练卷积神经网络模型对计算机算力和内存都有非常高的要求。计算机硬件发展至今也难有胜任。故该方法在实际应用中极少。
  • 逐层预测
    该方法对于卷积神经网络的每层特征图输出进行一次预测,最后综合考量得出结果。同样,该方法也需要极高的硬件性能。
  • 特征金字塔
    参考多尺度特征图的特征信息,同时兼顾了较强的语义特征和位置特征。该方法的优势在于,多尺度特征图是卷积神经网络中固有的过渡模块,堆叠多尺度特征图对于算法复杂度的增加微乎其微。
  • RNN思想
    参考了RNN算法中的门限机制、长短期记忆等,同时记录多层次的特征信息。

直接从数据根本上进行改善——对小目标进行数据增强

(1)对含有小目标的图像进行过采样,一般过采样率取3时较好,这样大目标受到的影响不会太大,因为总的来说,类别不平衡、不同尺度间的目标数量不平衡这类不平衡问题都是数据造成的,和模型结构关系不大,而目前的CNN的训练方法又都是SGD,根据Loss来进行优化,所以就会导致哪类数据多,哪类数据的性能就好,例如大目标多, 那么大目标的性能就好,小狗类别相对猫类别的数据多,那模型对狗的检测能力就要好于猫。所以对待这种不平衡问题,从数据下手一般要简单高效更加实用些。
(2)对含有小目标的图像,对多个小目标进行复制-粘贴策略增加小目标在图像中的出现频率,这样训练时,小目标的正样本也会增多,让模型更加侧重于小目标的学习。但是这个粘贴不能多次随意粘贴,要保证粘贴的时候,不会与已有的标注目标产生重叠,而且粘贴次数小于3次,太多小目标的话会影响大目标的性能,这样会得不偿失。粘贴时候是根据COCO训练集里自带的mask信息,作者实验证明,粘贴完之后不需要用高斯模糊对边界进行处理,用了之后反而有点下降。

实验方法

既然要对小目标进行选取和增强,首先是要明确数据中的小目标群体是什么。通过对比赛的飞机数据进行分析。可以发现,数据中的D类飞机和I类飞机体积较小,像素面积在2000以下,而其他类别的面积一般都超过了4000(尽管别的类别也有体积比较小的,但是占比很少)。根据一定的先验知识,也就是模型在测试集上的检测精度,D类飞机的精度比I类更低,通过分析是因为D类的长宽比变化幅度大(1~2.2),而I类飞机的长宽比幅度比较稳定。
目标检测——小目标检测问题_第1张图片所以根据理论方法的指导和数据分析的内容,我选择从数据上进行简单粗暴的方式对小目标数据进行以图像为单位的增广。想到了从两个不同的方面验证精度的提高效果:
- 首先观察D类——典型的小目标类别。通过对D类目标进行处理,提高模型对D类的检测精度。具体做法是:确定训练集哪些图像包含了D类目标,然后对这些图像进行加倍,并入训练集中。尽管会涉及到一些其他类别的目标,但是这并不会造成很大的影响。
- 对比赛数据集中所有的小目标进行处理,获得更好的模型。这需要我们确定在本数据集的小目标的目标是什么。通过观察分析,我在实验中认为面积低于1000像素的飞机目标为小目标,然后对包含小目标的图像进行数量增广。

实验结果

其他考虑

复制粘贴小目标的方法(贴图)
这种方法从理论上来讲会比小目标图像数量增广的方式更加精确,因为它会过滤掉一些其他不必要的目标,也可以节省一些计算资源。而且它增加了小目标的场景信息(因为如果是复制的话,小目标的周围上下文信息是一成不变的)。由于这个方法的工作量太大了,考虑到人工成本问题和时间上的成本,这个方法先搁置一下。

你可能感兴趣的:(目标检测,深度学习)