小目标检测
在MS COCO数据集中,对于面积小于32*32的物体,MS COCO就认为它是小物体,在评测时,会对这个范围内的物体计算APsmall。
在行人库CityPerson中,原图大小为1024*2048,小目标定义为高度小于75的目标。
目前小目标检测的方法大致有一下4类(不过这是2018年的回答了):
-
Scale
最简单粗暴的方法就是放大图片。这就是在尺度上做文章,如FPN(Feature Pyramid Network),SNIP(An Analysis of Scale Invariance in Object Detection – SNIP)。
特征图的分辨率 stride 的设置也算在这个里面。
另外,如果图像尺寸特别大,可以考虑 YOLT(You only look twice)中切图的方法。
-
Context
小物体需要有更多的周边信息来帮助识别,如何利用这些信息,two stage 可以从 ROI Pooling 上下手,另也有 Jifeng Dai 老师的 Relation Network for Object Detection。
或者上dilated类似混合感知野,或者在head部分引入SSH相似的模块。
-
Anchor
回归的好不如预设的好,S3FD 做了非常细致的 anchor 的实验,可以帮助我们更合理地设计anchor。
-
Matching strategy
对于小物体不设置过于严格的 IoU threshold,也可以参考iou loss和cascade rcnn的思路。
-
使用GAN,在检测器后面对抗一把。
-
用soft attention去约束confidence相关的feature map,或者做一些pixel wise的attention。
参考:小目标检测问题中“小目标”如何定义?其主要技术难点在哪?有哪些比较好的传统的或深度学习方法? - ChenJoya的回答 - 知乎
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