[CVPR2018] An Analysis of Scale Invariance in Object Detection – SNIP


代码还没有公布~

简介:
这篇文章分析了小尺度与预训练模型尺度之间的关系, 并且提出了一个和  Cascade R-CNN  有异曲同工之妙的中心思想:  要让输入分布接近模型预训练的分布(本文主要探讨尺度的分布不一致带来的问题) .  之后利用分析的结论, 提出了一个多尺度训练(MST)的升级版: Scale Normalization for Image Pyramids (SNIP) .

目标检测存在的问题:
用ImageNet预训练的网络做detection,但ImageNet中的目标尺寸分布比较均匀, Median scale的relative size是0.556,占50%左右,但是在检测数据集COCO中,Median scale的relative size只有0.106,甚至90%的目标小于图片的0.472倍,所以说detection数据集中的小物体占大部分, 但仍存在10%的大物体,导致Coco中目标尺度差异较大(小物体多), 所以直接用ImageNet会带来domain-shifting的问题.所以的detection需要应对目标多尺度的问题.


解决多尺度和小尺度检测的方法探究:
1.  多分辨率特征融合(深层千层特征融合,如SSD)------主要解决小目标检测
2. dilated/deformable convolution 增大接受域 --------检测大目标物体
3. 每一层单独预测----detect object instances of different scales
4. 多尺度训练
5. 通过图像金字塔预测,然后用非最大约束融合得到最后的检测结果
解决小目标检测的方法利弊:
1. 小目标物体检测不好主要是因为深层网络的下采样导致小物体的信息丢失,所以很多方法通过提高深层feature map的分辨率来解决这个问题
a. dilated/atrous convolutions -------increase the resolution of the feature map
b.  up-dampling the image by a factor of 1.5,2----- 提升深层特征层的分辨率
c.  用浅层特征预测/不同分辨率的层独立预测
缺陷: 浅层预测小物体,牺牲了语义信息, 精度不高.
2.  特征融合/特征金字塔
尽管Feature Pyramids  有效 的综合了多卷积层特征图信息,但是对于very small/large objects 检测效果不是很好
缺陷: 若一个25x25的物体, 即使融合上采样x2后也仍然只有50x50. 距离预训练模型224x224还是有很大差距.
多尺度的图像分类问题:
CNN-B: (stride=2)
训练集---224x224
测试集---将 [48x48, 64x64, 80x80, 96x96,128x128]上采样到224x224
CNN-S: (stride=1, 修改了ImageNet的与训练网络结构,防止stride太大就卷积没了)
训练集--- 48x48
测试集--- 48x48
CNN-B-FT
训练集----224x224
finetune----将 [48x48, 64x64, 80x80, 96x96,128x128]上采样到224x224做finetune (跟CNN-B的差距就是这个地方)
测试集----将 [48x48, 64x64, 80x80, 96x96,128x128]上采样到224x224
效果对比:
结论:
1.从 CNN-B-FT的实验可以得出:  在高清训练集学出来的模型依然有办法在低清晰度的图片上做预测. 直接用低清晰度图片微调好过将 stridestride降低重新训练一个.
2.推广到目标检测上, 当尺度不同时, 我们可以选择更换在ImageNet上pre-trained网络架构. 或者我们根据上述结论, 直接使用同一个网络架构,  因为在分类任务上学到的大目标权重可以帮助我们在小目标上的分类.
3.即,可以直接用ImageNet上高清图片pre-trained的网络架构, 然后用上采样的低分辨率detection图像finetune, 可以获得更好的效果,就是现在大家做的那样
训练样本呢尺度变化对结果的影响:

数据库中原图尺寸为640x48, 小物体是小于32x32的物体

实验800all vs 1400all

  • 实验设置: 我们选用800x1200和1400x2000两种训练尺度, 分别记作800all1400all 测试时, 我们都使用1400x2000的尺度.
  • 结果比较:
800all 1400all
19.6 19.9

* 分析: 正如之前分析的一样, 当训/测尺度一致时, 得到的结果最好. 所以1400all1400all胜出. 
* 问题: 但是为什么只超过了一点点呢? 因为在考虑小物体的分类性能而放大图片的同时, 也将中/大尺度的样本放大得太大, 导致无法正确识别.

实验1400all<80pixels

  • 实验设置: 用了大图, 却被中/大尺寸的样本破坏了性能, 那么我们就只用小于某阈值的样本进行训练, 即在原图尺寸中>80px>80px的样本直接抛弃, 只保留<80px<80px的样本参与训练.
  • 结果比较:
1400<80px1400<80px 800all800all 1400all1400all
16.4 19.6 19.9

* 分析问题: 跟预想的不一样, 为什么性能下降这么多? 其根本原因是因为这种做法抛去了太多的样本(~30%), 导致训练集丰富性下降, 尤其是抛弃的那个尺度的样本.

多尺度训练(MST)

  • 实验设置: 多尺度训练保证了各个尺度的样本, 都有机会被缩放到合理的尺度区间参与训练.
  • 结果比较:
1400<80px1400<80px 800all800all 1400all1400all MSTMST
16.4 19.6 19.9 19.5

* 分析问题: 其最终性能跟800all800all 没太大差别, 主要原因和”实验800all800all vs 1400all1400all类似, 因为这一次引入了极大/极小的训练样本.

结论:最好不要引入极大极小样本, 最好对应尺度训练和测试

Scale Normalization for Image Pyramids (SNIP)

思想: 不同分辨率的图片负责检测不同大小的目标; SNIP是MST的升级版. 只有当这个 物体的尺度 预训练数据集的尺度 (通常224x224)接近时, 我们才把它用来做检测器的训练样本.
假设:不同尺度的物体, 因为多尺度训练, 总有机会落在一个合理的尺度范围内. 只有这部分合理尺度的物体参与了训练, 剩余部分在BP的时候被忽略了
SNIP操作:



RPN阶段:
  1. 所有的GroundTruth给Anchors分配好+/-标签
  2. 根据第ii个尺度下的valid range: [si,ei][si,ei], 将GroundTruth根据是否落在范围内分为Valid/Invalid GT
  3. 去除那些IoU(anchors|InvalidGT)>0.3IoU(anchors|InvalidGT)>0.3的Anchors
FC阶段:
  1. 所有的GroundTruth给ProposalRoIs分配好类别标签
  2. 弃用不在[si,ei][si,ei]范围内的GT和Proposals
  3. 全被剔除了的处理: 
    If there are no ground truth boxes within the valid range at a particular resolution in an image, that image- resolution pair is ignored during training
测试阶段:
  1. 用多尺度正常进行测试
  2. 在合并多尺度Detection之前, 只在各个尺度留下满足其条件的Detection
  3. Soft-NMS合并 (对比的其他模型有没有soft-nms?)

Sub-Image采样

考虑到GPU显存, 需要crop图片来满足显存局限. 
* 用最少数量的1000x1000的chips来囊括所有的小物体. 如果没有小物体的话, 这个区域就不需要进行任何计算, 加速训练. 
操作: 
只对1400x2000的图片进行采样. 800x1200/480x640/图片无小物体时, 不进行采样


问题根源:

扫描二维码关注公众号,回复: 1742030 查看本文章

本质上,这是因为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用于学习语义信息。将尺度这个隐藏变量分离开来了.

猜你喜欢

转载自blog.csdn.net/jillian_sea/article/details/80607376