1. 概述
导读:这篇文章要讨论的是检测模型中对于小目标的检测问题,小目标在检测任务中是公认的难题。这篇文章首先分析了什么原因限制了检测模型对小目标的检测性能,对于小目标普遍采用的是增加输入图像尺寸的方式,以增加对于小目标的检测能力。对此文章中对涉及到的变量进行相关的实验,来寻找增加小目标检测的能力的方式。之后,文章作者提出了一种新的图像金字塔尺度归一化(Scale Normalization for Image Pyramids,SNIP)训练方案,该方案根据图像尺度的大小,有选择地反向传播不同大小对象实例的梯度,也就是对于不同大小的目标选用不同的回归分支,从而增强网络的检测性能。
文中作者首先分析了小目标物体难有效的检测出来的原因,主要原因有:
- 1)一般来讲CNN是具有平移不变性的,但是CNN网络具有一定的尺度不变性么?答案是 CNN网络对于尺度变化泛化能力是较弱的。在目标检测数据集MS-COCO中 10 10% 10的最大最小目标他们的尺度比例可以达到 r a t o o = 0.472 0.024 ratoo=\frac{0.472}{0.024} ratoo=0.0240.472,20倍的尺度差距了,这表明检测数据集中目标物体尺度变化很大,CNN学习尺度不变性较难,就算网络表现出来具有一定的尺度泛化能力,也是通过大量的参数固定下来的,因而泛化能力较弱;
- 2)下图中是ImageNet分类数据集与MS-COCO数据集中目标大小的统计分布。可以看到目标在两个数据集中差距是比较大的,ImageNet数据集中有0.556的比例中等尺寸目标,但是COCO中确是以小目标为主,小于比例0.472的目标就占据了90%。这样两个数据集的目标大小分布就是不一致的,这就会导致 一些预训练模型上的问题(domain-shift)。分析如下:
对于目标检测网络的训练其参数的初始化通常用分类数据集(ImageNet数据集上)进行预训练,而分类数据集物体目标通常相对较大,而检测数据集(COCO数据集)则较小,这就会造成先验参数上尺度的不匹配问题。这样学习到的模型对小物体更难有效的泛化,存在很大的domain-shift;
- 3)有的CNN的卷积核stride过大,小尺度中的小物体经过大的stride之后很容易被忽略,下图可以很好的体现这一问题,为了能够适配上小目标而使用大尺寸的图片去检测就是比较直观的方法了;
对此,其实已经有一些相关的工作致力于去解决小目标检测的问题了: - 1)使用空洞卷积(dilated/atrous convolution)。减小stride的数量级,增加feature map大小,但不会减小感受野的大小。这样做不影响检测大目标的性能;
- 2)训练时将图像放大1.5到2倍,预测时,放大4倍;
- 3)使用CNN中不同层的特征分别进行预测,浅层负责检测小目标,深层负责检测大目标;
- 4)深浅层特征融合进行预测,使浅层特征结合深层的语义特征,如FPN网络。但当目标尺寸较小时,如25x25,特征金字塔生成的高层语义特征也可能对检测小目标帮助不大;
在此基础之上,针对如上的内容文章还是指出如下问题:
- 1)增大训练图像的尺寸是对于检测任务来说是必要的么?对于检测网络来说一般分辨率为480x640,但是在测试的时候通常会将其加大到800x1200。可以在低分辨率的图像上使用更小stride得到ImageNet的预训练模型,之后再在目标检测网络中finetune?
- 2)当检测器在图像分类预训练模型上finetune的时候需要调整图像的输入使得其中的目标在64x64到256x256的尺度范围上么?(COCO数据集中检测目标尺寸从16x16到800x1000)
2. 多尺度(分辨率)对图像分类和检测的影响
在检测时,训练尺度是800x1200(原图大多是480x640),而inference时为了检测小物体会使用1400x2000,但是到底这个尺度对检测的影响怎样呢?文章首先探究了图像分类任务中分辨率对分类性能的影响,之后将其扩展到检测任务中去。
2.1 对于图像分类的影响
为了探究尺度对图像分类的影响,文章中设计了三个网络进行实验:
- 1)CNN-B使用高分辨率图像训练,分类是使用经过降采样和upsample的图片;
- 2)CNN-S使用低分辨率图像训练,分类是使用经过降采样的图片,也就是在小尺度上训练,同时为了兼顾小尺度,这里将stride设置为了1,缩小了卷积核的尺寸;
- 3)CNN-B-FT使用经过高分辨率图像训练,然后在低分辨率图像上进行fine-tune(也就是在CNN-B预训练模型的基础上训练低分辨的图),分类是使用经过降采样和upsample的低分辨率图片。
为什么需要降采样之后再upsample呢?原因是经过这样的操作能够去拟合小目标的图像特征。
其得到的实验结果为:
经过这个实验所得出的结论:
- 1)当训练图片的尺度与测试图片的尺度相差较大时性能会很差,越接近性能越好,源自于图4(a)。
- 2)结合图4中的(b)(c)得出:网络(CNN-S)相比网络(CNN-B)使用针对小目标的参数设计(stride、kernel size)会提升网络的性能。在此基础上,比较了一个新的网络(CNN-S)来专门针对小目标检测(如小卷积核,减少stride)与在低分辨率的数据集上来fine-tuning高分辨率训练训练的检测器之间的性能,发现与其设计针对小物体的网络不如按到传统pre-trained模型在低分辨率的数据集进行微调。也就是证明了在高分辨下与训练得到的模型在低分辨数据下finetune得到的结果比专门设计针对小目标的模型效果好。
2.2 对于图像检测的影响
针对不同分辨率对检测的影响,文章设置了几个变量:
- 1) 80 0 a l l 800_{all} 800all与 140 0 a l l 1400_{all} 1400all,代表的是训练的图片全部分别使用800x1200和1400x2000尺寸的图像作为训练图像来训练网络,见下图5.1;
- 2) 140 0 < 80 p x 1400_{\lt 80px} 1400<80px,代表在训练图片中将尺度小于 80 p x 80px 80px的目标全部抛弃掉进行训练,见下图5.2;
- 3)MST,也就是使用变尺度图像输入进行训练见下图5.3;
检测指标对比:
作者想通过这个实验说明如下: - 1)upsample确实一定程度上可以提高性能,但是并不显著,这是因为upsample提高了小目标的检测效果,但会让本来正常大小或者本来就大的目标过大,性能下降,对应上面的 80 0 a l l 800_{all} 800all与 140 0 a l l 1400_{all} 1400all,图像增大那么多带来的性能提升很小;
- 2)训练网络需要使用大量样本,样本损失会导致性能下降,对应 140 0 < 80 p x 1400_{\lt 80px} 1400<80px,丢弃样本导致训练集丰富性下降, 尤其是抛弃的那个尺度的样本.
- 3)随机在分辨率之间采样的效果也不好,虽然你的样本满足了多尺度条件,但是还有其它原因限制了性能,对应MST;
这个实验所得出的结论:
本质上,这是因为CNN网络没有尺度不变形,没有把scale这个隐藏变量学习到的机制,只能通过大量参数来强行记忆不同scale的物体。而下面部分谈到的方法也很可能只是治标不治本,关键还是怎么把scale这个隐藏变量抽离出来,甚至可以直接学习;或者直接赋予网络学习scale的能力。
3. SNIP
3.1 网络设计
从上图可以发现:
- 1)每个pipe-line的RPN只负责一个scale range的proposal生成,也就是说对于特定的分辨率 i i i其产生的proposal的面积在 [ s i c , e i c ] [s_i^c,e_i^c] [sic,eic]之内的才会被采纳;
- 2)对于大size的feature map,对应的RPN只负责预测被放大的小物体;对于小size的feature map,对应的RPN只负责预测被缩小的大物体;这样的设计保证了每个CNN分支在判别proposal是否为前景时,只需针对最易分类的中等range的proposal进行训练。
- 3)在Image Pyramid的基础上加入了每层scale 的proposal有效生成范围,发扬本scale的优势,回避其他scale的劣势,大大降低了前景分类任务的难度,从而“作弊式”地实现了Scale Invariance。
two-stage的检测器,包括RPN提取proposals,对proposals分类和bbox回归两个阶段,规则如下:
- 1)在分类阶段,训练时,不选择那些proposals和GT boxes在特定大小范围外的;
- 2)RPN阶段,和无效GT boxes(大小不在范围内)的IoU大于0.3的anchor认为是无效的,忽略这些anchor(不参与反向传播);
- 3)在测试阶段,使用多个分辨率的图像进行检测;在分类阶段,去除那些回归后bboxes大小不在特定范围的检测结果。然后使用Soft-NMS将不同分辨率图像的检测结果合并。
3.2 训练图像采样方法
为了降低训练对GPU内存的要求,作者将原图进行裁剪。剪裁的方法是:目标是在原图裁剪尽可能少的1000x1000的区域,并且这些裁剪区域包含所有的小目标。具体方法:
- 1)step1:选择一幅图像;
- 2)step2:随机生成50个1000x1000的裁剪区域,
- 3)step3:选择包括目标最多的裁剪区域;
- 4)step4:如果所有裁剪区没有包含原图所有的目标,继续 step2;
- 5)step5:由于很多目标在原图边界,再加上是随机裁剪,为了加快速度,裁剪时,保证裁剪区域的至少一个边在原图边界上。对于分辨率小于1000*1000的,或者不包含小目标的图像,不处理。
并且作者通过实验证明,裁剪原图不是提高精度的原因。
3.3 训练细节
对于预训练的分类器,通常训练图像大小为224x224。为了尽可能减少domain-shift,训练检测器时,我们期望proposals的大小与预训练时差不多。因此作者设定了如下的有效范围,注意的是COCO数据集中的图像大多在480x640左右。左为训练图像分辨率,右为原图中有效尺寸的范围,使用了三种尺度进行训练:
图像尺寸 | 对应目标大小 |
---|---|
1400x2000 | [0,80] |
800x1200 | [40,160] |
480x800 | [120,∞] |
假设原图短边尺寸为480,经过简单计算可知,有效尺寸映射到训练图像的分辨率上,边长为200左右,与预训练图像尺寸接近。