小目标检测——An Analysis of Scale Invariance in Object Detection – SNIP

小目标检测——An Analysis of Scale Invariance in Object Detection – SNIP

    • 不同尺度的影响(Image classification at multiple scales)
    • Data Variation or Correct Scale
    • Object Detection on an Image Pyramid(本文的创新点)

  之前参加的人头计数比赛,包含比较小的人头,最小的gtbox的尺度只有4个像素点,大部分人脸检测算法的anchor最小设置为16个像素点,较难检测到,为了解决这个问题,看了这篇论文,了解到小目标检测一般是怎么解决的。

文章的出发点就是小目标一直目标检测的难点,论文分析了目前在极端尺度变化下识别和检测物体的不同技术,对比,然后提出了一个新颖的训练策略:Scale Normalization。
  小目标检测——An Analysis of Scale Invariance in Object Detection – SNIP_第1张图片
  尺度变化,尤其是小目标检测,一直是物体检测的难点,在ImageNet和COCO中,物体实例中等尺度的比例是0.554和0.106,所以在COCO中大多数物体均是小尺寸的或者是极端尺寸。
  检测器需要处理的目标尺度变化时很大的,是CNN尺度不变属性的一个很大的挑战,尺度的变化导致了domain-shift。
  目前为了缓解尺度变化和小目标的问题,现在已经提出了很多的方法:

  • 浅层特征与深层特征融合来检测小目标
  • dilated/deformable convolution 用来增大感受野以提升大目标的检测
  • 在不同分辨率的层做独立的预测来获取不同的尺度
  • 上下文信息来对模棱两可的情况做分辨
  • 多尺度训练
  • 多尺度测试
  • NMS预测
    目前还有一些跟训练相关的重要的点没有提出:
  • 上采样图片能够保持好的性能吗?数据集中形状是480x640,为什么要上采样到800x1200。我们可以在低分辨率的图中用更小的stride预训练吗?
  • 当finetune的时候,训练物体实例的分辨率的应该在一定范围之内(64x64 - 256x256)吗?在适当rescale输入图片之后(上采样图片),所有分辨率的物体都参与训练吗?

不同尺度的影响(Image classification at multiple scales)

出发点:在state-of-the-arts的检测器上做实验(一般在800x1200的图片上训练),但是inference是在图像金字塔上做的,包括更高的分辨率,如1400x2000用来检测小目标。主要是为了研究domain shift,在训练和测试时用不同分辨率的图像。

  • Na¨ıve Multi-Scale Inference
    首先选择不同分辨率的图像,48×48,64×64,80×80,96×96和128×128,通过在ImageNet上进行下采样得到。接着将图像上采样到224×224并送到CNN网络中,记为CNN-B,结果如图所示:
    小目标检测——An Analysis of Scale Invariance in Object Detection – SNIP_第2张图片
    结果表明训练和测试数据差别越大,性能下降越多。

  • Resolution Specific Classifiers
    对于小目标检测问题的一个简单解决方法就是用ImageNet的不同stride图片预训练一个分类网络。根据图像的大小调整网络的步长,拿48×48和96×96的图像做对比,前者的第一个卷积层为步长1的3×3的卷积,后者的第一个卷积为步长2的5×5卷积。CNN-S实验。结果如下图所示:
    小目标检测——An Analysis of Scale Invariance in Object Detection – SNIP_第3张图片
    结果显示CNN-S的效果更好,这表明专门为不同尺度的图像设计网络使训练和测试尺度一致,可以提高小物体的识别。根据这个结论,多训练几个不同结构的分类网络适应各种小尺度的图片,然后把这些结构用到检测网络中,即不同尺度的图片送到不同的检测网络(backbone是不同的分类网络)。

  • Fine-tuning High-Resolution Classifiers
    另一个对于小目标检测简单的解决方法是在低分辨率上采样的图像上finetuning CNN-B。相比于减少stride,更好的办法是将图像上采样,然后finetune,CNN-B-FT实验。其结果比CNN-S要好。

现在的目标检测算法通过上采样图像检测小目标而不是用不同的网络。本部分说了上采样的合理性。这一部分主要是为了分析训练和测试分辨率不同导致的性能下降的问题。

Data Variation or Correct Scale

这个部分主要分析图像分辨率:数据中目标尺度(scale)和变化 (variation)对于目标检测性能的影响。
作者设计了实验,在不同的设置下进行训练,然后2000×1400的尺度上评估,主要是COCO上小于32×32的目标,将影响性能的变量找出来。
小目标检测——An Analysis of Scale Invariance in Object Detection – SNIP_第4张图片

  • Training at different resolutions
    作者用800×1400(800all)和1400×2000(1400all)的分辨率分别训练,结果是1400all的性能好,因为是在一个分辨率训练和测试的,然而提升的并不是很多。作者给出的解释是小目标尺度放大,性能提升,大目标由于变得更大,效果下降,综合来说性能提升有限。

  • Scale specific detectors
    作者做了另一个实验,分辨率为1400×2000(1400<80px),但是忽略了所有大目标,性能下降更大了,比800all都差,作者给出的解释是损失了appearance和pose变换的大尺度目标,也就是目标变少了,减少了目标的多样性。

  • Multi-Scale Training (MST)
    最后一个实验,作者评估了保持监测器的尺度不变的做法,在训练时候随机以不同分辨率采样图片,其性能相比于1400all也有下降,分析原因,是随机采样,目标的尺度变化极大,这对监测器的训练十分困难,而1400all至少把目标都resize到相似的尺度。

Object Detection on an Image Pyramid(本文的创新点)

本文提出的框架目标是结合两个方法的优点(1.MST 。2.1400all把小尺度的放大,并且不合理尺度需要抛弃),即用最多变化的目标训练,同时将尺度约束在合理的区间。提出了SNIP的结构。
Scale Normalization for Image Pyramids
SNIP是MST的改进版本,多尺度训练(MST), 每张图片是在不同分辨率被观察的,在高分辨率 (像 1400x2000) 大目标就很难分类;在低分辨率(像 480x800),小目标很难分类。幸运的是,每个目标实例以几个不同的尺度出现,其中有一些落在想要的尺度范围内。因此SNIP保留了MST的优点,同时为了消除极端尺度的目标(太大或太小),训练只在落到想要的尺度范围内进行,剩余的在反向传播的时候被忽略。在训练时用了所有的目标实例,有助于捕捉到表面和位姿的所有变化,能够减少尺度空间(scale-space)的 domain-shift(对于预训练网络而言)。
小目标检测——An Analysis of Scale Invariance in Object Detection – SNIP_第5张图片
如上图所示。在RPN阶段,所有的gtbox都用来为anchor分配标签,在训练的某个特定的分辨率上,作者不选择在特定大小范围之外的anchor 和 gtbox,最后,与不合理gtbox(也就是尺度之外的gtbox)iou大于0.3的被认为是不合理的anchor,在训练时去除(反向传播的梯度为0)。在分类阶段,同RPN,对所有的proposal利用gtbox分配标签,尺度之外的proposal被去除。
在inference时,在尺度之外的proposal也不选择。在分类和回归之后,作者用了soft-NMS 来结合多分辨率下的detections从而生成最终的检测目标。
Sampling Sub-Images
用深网络ResNet-101和DPN-92训练高分辨率的图像需要消耗更大的GPU资源,因此作者裁剪图像。作者的目的是生成最少数目的sub-images, 这种小图像的大小是 1000x1000并且包括所有小目标。这能够帮助加速训练,没有小目标的区域不需要计算。 作者生成了50个随机选择位置的切片,每个切片是1000x1000。切片包含最大被选择目标的数目,并且被加到训练集中。直到所有目标都被覆盖,剩下的目标才会被重复采样和选择。因为切片都是随机生成的,proposal boxes 经常有图像的边界,为了加速采样过程,作者在图像边界处切掉了切片。作者发现在1400x2000图像中平均有 1.7个1000x1000的切片生成。采样过程在800x1200 或者 480x640 或者图像不包含小目标时并不需要。随机裁剪不是检测器性能提升的原因。 为了验证这个观点,作者训练了ResNet-50 (因为它需要更少的显存),用了不需要裁剪的高分辨率图像 (1400x2000),发现mAP没有变化。

还有一个点是RPN的改进,只有两种情况下才会认为某个anchor的标签是正样本(标签为1):1、假如该anchor和某个ground truth的IOU超过某个阈值(阈值默认采用是0.7),那么该ancho就是正样本。2、假如一个ground truth和所有anchor的IOU都没超过该阈值,那么和该ground truth的IOU最大的那个anchor就是正样本。即便是这样,仍有40%的正样本和gtbox的iou小于0.5,说明正样本的质量并不高,而本论文引入了多分辨率的图像作为输入,所以在一定情况下缓解了这种情况。

结论:
本文提出了SNIP的训练流程以解决训练中目标实例大尺度变化的问题。通过实验验证了scale和image-pyramid(我认为其实就是图像的多尺度)的重要性。

本文参考https://zhuanlan.zhihu.com/p/3855721

你可能感兴趣的:(深度学习)