小目标检测模型总结+SNIP+SNIPER

本文详细介绍了小目标检测中的两个重要算法:SNIP和SNIPER。SNIP通过有选择地回传梯度,改善小尺度物体检测。SNIPER则是通过生成特定尺度的context regions (chips),结合R-CNN和Fast R-CNN的优点,提高了训练效率和小目标检测性能。实验表明,SNIPER在保持快速训练的同时,能够更有效地处理小目标检测问题。
摘要由CSDN通过智能技术生成

小目标检测

在MS COCO数据集中,对于面积小于32*32的物体,MS COCO就认为它是小物体,在评测时,会对这个范围内的物体计算APsmall。

在行人库CityPerson中,原图大小为1024*2048,小目标定义为高度小于75的目标。

目前小目标检测的方法大致有一下4类(不过这是2018年的回答了):

  1. Scale

    最简单粗暴的方法就是放大图片。这就是在尺度上做文章,如FPN(Feature Pyramid Network),SNIP(An Analysis of Scale Invariance in Object Detection – SNIP)。

    特征图的分辨率 stride 的设置也算在这个里面。

    另外,如果图像尺寸特别大,可以考虑 YOLT(You only look twice)中切图的方法。

  2. Context

    小物体需要有更多的周边信息来帮助识别,如何利用这些信息,two stage 可以从 ROI Pooling 上下手,另也有 Jifeng Dai 老师的 Relation Network for Object Detection。

    或者上dilated类似混合感知野,或者在head部分引入SSH相似的模块。

  3. Anchor

    回归的好不如预设的好,S3FD 做了非常细致的 anchor 的实验,可以帮助我们更合理地设计anchor。

  4. Matching strategy

    对于小物体不设置过于严格的 IoU threshold,也可以参考iou loss和cascade rcnn的思路。

  5. 使用GAN,在检测器后面对抗一把。

  6. 用soft attention去约束confidence相关的feature map,或者做一些pixel wise的attention。

参考:小目标检测问题中“小目标”如何定义?其主要技术难点在哪?有哪些比较好的传统的或深度学习方法? - ChenJoya的回答 - 知乎

深度学习在 small object detection 有什么进展? - 尼箍纳斯凯奇的回答 - 知乎

SNIP

An Analysis of Scale Invariance in Object Detection - SNIP

CVPR 2018

论文:https://arxiv.org/abs/1711.08189

代码:http://bit.ly/2yXVg4c

创新点:

  • 通过有选择地回传梯度,实现有选择地训练,从而更好地检测极端尺寸的物体

简介:

看目标检测论文的试验结果不难发现,AP small基本都是最低的,主要原因一是网络提取的语义化特征和分辨率之间的矛盾,二是小目标往往会因为IoU过低而被漏检。

这篇文章分析了小尺度与预训练模型尺度之间的关系,提出了一个和Cascade R-CNN有异曲同工之妙的中心思想:要让输入分布接近模型预训练的分布。作者提出了一个多尺度训练(MST)的升级版SNIP。

COCO和ImageNet

在这里插入图片描述

上图很清晰地描述了COCO和ImageNet的尺度差别,COCO中90%的Instance都在0.472以下,充斥着大量的小物体,而ImageNet中的分布则比较均匀。所以用ImageNet预训练的模型迁移到COCO中可能产生一定的domain-shift,因此作者有了这样的思考:

  • 有必要全部做upsample来放大小物体吗?可不可以在预训练的时候就选择低分辨率的图像作为输入?
  • 预训练之后,在对模型进行微调的时候,是否可以对样本进行选择,选择那些从64*64到256*256的对象?

Related Work

  • 浅层小物体,深层大物体

    例子:SDP、SSH、MS-CNN

    缺点:在浅层预测小物体时,是以牺牲语义抽象性来实现的

  • 特征融合/特征金字塔

    例子:FPN、Mask-RCNN、RetinaNet

    缺点:对于very small/large objects 检测效果不是很好

实验验证upsampling对于提高小目标检测的效果

在这里插入图片描述

  • CNN-B:原图训练/伪高清测试

    训练用高分辨率图像,测试用经过降采样和upsample的图像。

  • CNN-S:低清训练/低清测试

    训练用低分辨率图像,测试用降采样的图像。

  • CNN-B-FT:原图训练,伪高清微调/伪高清测试

    训练用高分辨率图像,然后在低分辨率图像上进行fine-tune,测试用经过降采样和upsample的图像。

在这里插入图片描述

可以这样理解作者的三个实验:ImageNet物体大、分辨率高,而COCO目标都很小,直接迁移会有问题,作者在试图探究如何进行迁移。降采样后的小图像数据集其实对应的是COCO数据集普遍存在的小目标的情况,试图模仿COCO数据集。

因此三个网络的含义应该是:

  • CNN-B,ImageNet预训练后的参数直接用来给COCO这种分辨率低的数据集用;
  • CNN-S,不用ImageNet这种高分辨率的数据集做训练,我把网络就设置成适合COCO这类数据集的,训练和测试都用分辨率低的数据集;
  • CNN-B-FT,ImageNet人家都训练好了,不用白不用,但是用之前,先用低分辨率数据集做一下fine-tune改良效果。

实验验证分辨率对于提高小目标检测的效果

在这里插入图片描述

上图是在小目标测试集上的检测效果对比,所用测试图像的尺寸都是1400*2000。

  • 800all表示网络基于800*1400的图像训练。

  • 1400all基于1400*2000的图像,不难看出,1400all的结果更好一些,主要原因就是训练图像的分辨率和测试图像的分辨率一致,这和前面在ImageNet上进行的试验结果也吻合。

    但是这个提升非常小,作者猜测原因在于1400*2000的图像是经过放大得到的,模型在训练过程中可以提高对小目标的检测,但是对于较大目标,则会因为尺寸过大而难以训练,从而影响了最终的效果。

  • 1400<80px表示训练数据尺寸是1400*2000,但是训练过程中忽略中等尺寸和大尺寸的目标,这个模型的效果非常差,猜想原因是忽略这些训练数据(占比大约30%)所带来的数据损失对模型效果的影响更大。

  • MST表示训练一个检测器时采用不同尺度的图像进行训练(包括480*800),按理说效果不错,但实际上和800all差不多,主要原因在于训练数据中那些尺寸非常大或非常小的object会影响训练效果,因此这篇文章在引入MST思想的同时限定了不同尺寸的object在训练过程中的梯度回传,这就是SNIP。

SNIP算法思想

SNIP与MST有着很密切的联系,MST是在大的feature map上预测小物体,anchor设置的较小,在小feature map上预测大物体,anchor设置的较大,根据anchor与GT的IoU选择正例。MST网络输入是单尺度的,并没有考虑到预训练模型与输入图像尺度差异的问题。SNIP因此做了升级:

  • 只有物体的尺度与预训练数据集的尺度(224*224)接近时,才把它用来做检测器的训练样本,实际的操作是只对在这个指定范围内的目标回传损失,就是说训练过程实际上只是针对这些目标进行的。

在这里插入图片描述

valid anchor & invalid anchor:当某个ROI的面积在指定范围内时,该ROI就是「valid」,也就是会在此次训练中回传梯度,否则就是「invalid」(如紫色框所示)。这些「invalid」的ROI所对应的「invalid ground truth」会用来决定RPN网络中Anchor的有效性。具体来说,「invalid Anchor」 就是和「invalid ground truth」的IOU大于0.3的Anchor,如Figure6左边的黑色框所示。

另外,作者还分析了RPN网络中不同标签的Anchor比例(一共就2种Anchor,正负样本),我们知道在RPN网络中,一个A

  • 11
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值