An Analysis of Scale Invariance in Object Detection-SNIP论文阅读笔记

提出问题

深度学习方法提出后,目标分类任务性能急剧提升,top-5 error on ImageNet已经从15%降低到2%,这对于1000类目标分类任务已经超越了人类水平。

但是在COCO数据集上的检测任务中(目标只有80类)检测器的mAP性能却只有62%(即使overlap设置只有50%)。

为什么目标检测要比目标分类任务困难许多?

  1. 检测目标的尺度范围变化很大(在COCO检测数据集中,最小的前10%的目标尺度与最大的前10%目标的尺寸相差有20倍之多,这对检测器对尺度变化的鲁棒性提出较高的要求),其中小目标的检测是造成检测性能下降的主要原因。
  2. 目标分类数据集中目标大小相差不大,而检测数据集中目标尺寸分布范围很广,因此两种任务的数据集之间的差异导致了使用分类数据集训练的model进行finetune时出现了domain-shift;

本文提出了一种名为Scale Normalization Image Pyramids的训练机制,解决上述问题。

现有解决scale variation和small object detection的方法

  1. 结合前侧卷积特征和深层卷积特征提高小目标检测效果;
  2. 使用dialated/deformable卷积增加感受野提高大目标检测效果;
  3. 在不同尺度的特征图上独立的进行不同尺度大小的目标检测;
  4. 使用context信息消除歧义;
  5. 训练时使用多尺度图像输入;
  6. 在多尺度图像金字塔上预测目标后使用NMS合并检测结果;

虽然上述解决方法在很大程度上提高了目标检测的性能,但是仍有很多余训练相关的重要问题没有解决:

  1. 现在检测网络为了提高对小目标的效果,都采用upsample的方法(目前检测数据集中典型的图像尺寸为480*640,为什么通常要将其upsample到800*1200?),这个真的是必要的吗?能不能直接用小的stride在ImageNet中低分辨率的图像不做upsample来预训练网络后在检测数据集上finetune用于小目标的检测?
  2. 当使用一个预训练的image classification model进行object detector finetuning时,upsample调整了图像大小以后,是应该只用64x64~256x256的ground truth来训练?还是用所有的gt(如COCO数据集中尺寸16*16到800*1000)来训练更好?

我们在ImageNet和COCO数据集上设计了对照试验来回答这些问题。

探究性实验

分析图像分辨率,目标尺寸大小及其variation对检测器性能的影响

为了探究这些因素的影响,作者使用如下不同的训练方式并在1400*2000分辨率的图像上进行了小目标的测试(COCO数据集中小目标尺寸小于32*32),结果如Table 1所示。
tabel 1
Figure 5

Training at different resolutions:

使用所有尺寸的目标进行训练,分别在两种分辨率的图像上进行了训练:800*1400和1400*2000,示意图如Fig5.1所示。
分别使用 80 0 a l l 800_{all} 800all 140 0 a l l 1400_{all} 1400all表示,可以看到 140 0 a l l 1400_{all} 1400all的检测性能更好一点,这是由于训练和测试使用的图像分辨率是一致的,均为1400*2000.但是 140 0 a l l 1400_{all} 1400all的提升效果也是微弱的,因为在较大的分辨率上训练时,medium-to-large object将变得太大,导致无法正确分类,这使得检测性能受到影响。

Scale specific detectors:

我们在1400*2000分辨率的图像上忽略所有medium-to-large的目标(在源图像中尺寸大于80px),用以减少极大目标带来的小目标检测性能的损失,训练得到的detector( 140 0 &lt; 80 p x 1400_{&lt;80px} 1400<80px),示意图如Fig 5.2所示。但是这样训练得到的模型效果还不如 80 0 a l l 800_{all} 800all,原因是由于只使用小尺寸样本训练损坏了目标的大小外观的多样性,造成的负面影响要大于排除极端尺寸目标所带来的收益。

Mutl-Scale Training(MST):

最后作者评价了训练中常用的获取scale-invariant detector的方法,即训练时从多个分辨率中随机选取一个将图像缩放至该分辨率下,使用图像中的所有目标进行训练,这种方式我们记为MST,如Fig 5.3所示。这种方式保证了training instance在多种分辨率下被observed,但会引入很多很大的或很小的目标,导致检测性能下降。这种训练方式跟 80 0 a l l 800_{all} 800all很像。

作者给出结论:训练时使用合适大小的目标(将训练中使用的目标尺寸限制在合适的范围内),同时也要保证训练样本中目标的多样性(capturing as much variation across the objects as possible),这两点对于提高目标检测性能是十分重要的。本文提出的SNIP检测框架可以保证这两点,因此检测性能可以超出现有检测方法很多。

Scale Normalization for Image Pyramids(SNIP)

这一节介绍本文提出的检测方法。SNIP是MST的改进版本,只讲与pre-training dataset中的目标尺寸相近的目标(通常为224*224)用于训练过程。具体细节如下:
Figure 6
如Fig 6所示,作者在训练时划分了三个尺度,对应三种不同分辨率的图像。每个分辨率i下的RoI都有其指定范围,如果gt的box大小在这个范围内,就被标记做valid,否则就被标记为invalid。
在训练RPN网络时,生成Anchor并给Anchor分配label的时候,检查该Anchor是否和某个invalid gt box的overlap超过0.3,若存在,则该Anchor会被视作invalid Anchor,训练时将被排除在外(他们的梯度被设置为0,不会加入到反向传播的过程中从而对参数产生影响),在RCNN部分,同样弃用不在[si,ei]范围内的GT和Proposals。相当于在每个分辨率上,只对大小合适的目标进行训练,这就符合了作者设计的初衷。

在inference时,在每一个分辨率图上使用RPN网络生成proposals并在各自的分辨率下独立进行classsify,如Fig 6所示。同训练时一样,detections(not proposals)的尺寸若不在该分辨率指定的尺寸范围内也将被抛弃。经过classification和bounding-box regression后,我们将多个分辨率图像中的检测结果rescale后使用soft-NMS合并后得到最终的检测框,如Fig 6所示。

问题根源解释

下面这段内容本人觉得很有道理,有助于理解该方法思想,来自:https://blog.csdn.net/Jillian_sea/article/details/80607376?utm_source=copy

本质上,这是因为CNN网络没有尺度不变形,没有把scale这个隐藏变量学习到的机制,只能通过大量参数来强行记忆不同scale的物体。而下面部分谈到的方法也很可能只是治标不治本,关键还是怎么把scale这个隐藏变量抽离出来,甚至可以直接学习;或者直接赋予网络学习scale的能力。

MST—randomly sampled images at multiple resolutions during training 暴力扩充多尺度的样本.Multi-scale的做法扩充了不同scale样本的数目,但是仍然要求CNN去fit所有scale的物体。通过这样的一个对比实验,SNIP非常solid地证明了就算是数据相对充足的情况下,CNN仍然很难使用所有scale的物体。个人猜测由于CNN中没有对于scale invariant的结构,CNN能检测不同scale的“假象”,更多是通过CNN来通过capacity来强行memorize不同scale的物体来达到的,这其实浪费了大量的capacity.

SNIP----- training is only performed on objects that fall in the desired scale range and the remainder are simply ignored during back-propagation.只学习同样的scale可以保障有限的capacity用于学习语义信息。将尺度这个隐藏变量分离开来了.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值