An Analysis of Scale Invariance in Object Detection – SNIP
一、角度
基于CNN的检测器是对尺寸敏感的,所以要做到通过训练的多样化和专一化为为模型性能服务是很困难的一件事。多样化指的是对于整个检测器而言,输入一定要较均衡的覆盖每个scale,专一指的是检测器的对应不同scale的部分应该得到充足且正确的训练。前者要求提供的样本够丰富,后者要求解决域迁移问题。这个论文和MST(Multi-Scale Training)不同的点在于,它的训练输入做了多尺度处理的同时,还多了一个更严格loss回传筛选机制,使得针对不同尺度的检测器得到很好的训练(每个scale只会针对一个很小范围的)。同时,为了保证测试的时候,能够保证目标能够被匹配到每个检测器对应的小范围,测试的图片也是多尺度的。但这无疑增加了开销。
二、实验分析部分
作者做了两个系列实验,第一个系列实验是来证明,对于CNN而言,它是对尺度敏感的,但是对于小目标而言,最好的作法是在imageNet(分类任务其实算大目标)上预训练好后再用小目标数据finetune,这为后面的所有实验奠定了基础。第二个系列实验则证明了训练图片使用单一尺度和单纯使用多尺度,并不能很好的训练好检测器,前者是缺少了多样性和专一性,后者是缺少了专一性。
2.1 确定训练的基本方式
三种模式下的训练方式
- CNN-B 对于输入图片(224×224)先下采样到小尺寸(48 64 80 96 128),再上采样到224×224进行训练,最后用同样的数据进行测试
- CNN-S 以往的分类器中,第一个卷积是7×7的卷积核,这里为不同的尺寸的输入图片设计不同的卷积核,比如48×48就用stride=1,kernel为3的卷积核,保证第一层卷积后的feature map大小一致
- CNN-B-FT 对于输入图片,先在224×224的尺寸下进行训练,而后再在不同的如一的下采样上采样的图片上finetune
结果如下:
可以看出,CNN-B-FT的性能好于CNN-S,这证明了在imageNet的大目标训练在小目标fine-tune后,网络对于小目标的分类能力(通过上采样)远比专门设计一个网络好。这个是用多尺度来进行测试的基础。
2.2 单一尺度和多尺度的问题
一般的,训练是用800×1200的图片,测试是用1400×2000的图片,而图片的原始尺寸是640×480,作者这里只关注COCO中小于32×32的小目标
- 输入为800*1200
- 输入为1400*2000
- 输入为1400*2000,但只回传object面积小于80个像素点的loss
- 输入为多尺度
结果如下:
可以看出纯1400的训练结果好于800,但是在大目标上结果很差。而1400如果忽略了中-大目标的loss,网络性能低于800,证明大目标的增益多于危害。最后,即便使用多尺度训练,结果也没有很好,证明它对于小目标并没有特别的增益。我这里的理解是,多尺度训练的时候,相对于小样本和大样本,应该是中间样本获得了更多的机会,这种情况下,中间样本的检测器得到了充足的训练,但是小的和大的却相对变少
SNIP
首先,将输入的图片作为一种图像金字塔输入网络,然后每个对于得到的rpn那里做样本筛选。步骤为,1,将rpn分为三个部分,一个是用于小目标的,一个是用于中目标的,一个是用于大目标的,确定每个目标的范围,将面积不在范围中的ground truth设为无效;2,将和无效ground truth的iou大于0.3的anchor设为无效;3,将和有效ground truth的iou大于0.7的设为true,或者没有0.7的情况下找最大的,然后进行训练。
在这里,有一个很重要的思想就是如何解决域迁移的问题,就是做到了网络其实只负责一个小范围的scale变化的检测,是图片自己采用一个金字塔来适应它这个范围,这就是专一化和多样化的结合。同时,训练和测试都用多尺度,让分辨率也被网络适应了