1. 概述
无论是在检测还是分割算法中小目标的检测或分割都是比中等与大目标难的,一般来讲在COCO检测数据集上小目标的检测性能是大目标的一半不到。
那么什么样的目标才能算是小目标呢?下图是COCO网站上对于不同大小目标的定义(面积小于
32
∗
32
32*32
32∗32的目标):

小目标检测困难的原因分析:
- 1)网络的stride特性:检测网络中一般使用CNN网络作为特征提取工具,在CNN网络中为了增大感受野使得CNN网络中的特征图不断缩小,面积较小的区域的信息自然就很难传递到后面的目标检测检测器中了;
- 2)训练集的分布(参考SNIP):在COCO数据集中大目标和小目标的大小比值是比较大的,这就为网络适应目标带来了一定的困难;
- 3)网络损失函数:现有的检测网络中OHEM之类的训练样本选择机制,在正负样本选择的时候对小目标并不是很友好;
在此基础上结合论文Augmentation for small object detection与网络上搜罗的一些资料对小目标检测的优化做了总结。
2. 方法总结
2.1 从图像或特征尺度的角度
既然使用最后一个stage的特征去做预测很难,那么可以考虑如下的方式进行优化:
- 1)使用FPN在多个尺度上预测不同尺度的目标;
- 2)参考SNIP区分大小目标,针对性优化;
- 3)输入图像放大(用超分辨率之类的方法有质量的方法)或是切图多次检测;
2.2 从anchor角度
- 1)anchor的密度:由检测所用feature map的stride决定,这个值与前景阈值密切相关,在密集的情况下可以使anchor加倍以增加对密集目标的检测能力(TextBoxes++,Pixel-Anchor);
- 2)anchor的范围:RetinaNet中是anchor范围是32~512,这里应根据任务检测目标的范围确定,按需调整anchor范围,或目标变化范围太大如MS COCO,这时候应采用多尺度测试;
- 3)anchor的形状数量:RetinaNet每个位置预测三尺度三比例共9个形状的anchor,这样可以增加anchor的密度,但stride决定这些形状都是同样的滑窗步进,需考虑步进会不会太大,如RetinaNet框架前景阈值是0.5时,一般anchor大小是stride的4倍左右;
2.3 对于使用ROI Pooling的网络
SINet:A Scale-Insensitive Convolutional Neural Network for Fast Vehicle Detection 认为小目标在Pooling之后会导致物体结构失真(也可以换作RoIAlign),于是提出了新的Context-Aware RoI Pooling方法,有助于保留有用信息,下图是该方法与简单Pooling操作的对比:

2.4 GAN方法
用生成对抗网络(GAN)来做小目标检测:Perceptual Generative Adversarial Networks for Small Object Detection(好像没有公开代码,效果难说)。

2.5 增加小目标数量
- 1)在Augmentation for small object detection文章中提到增加图像中小目标的数量(不影响其它目标检测的情况下,复制小目标多个),提升小目标被学习到的机会;

- 2)增加小目标图像在训练数据集中的数量,保证小目标能够被有效地学习;
2.6 在对小目标的IoU阈值上
对小目标可以不使用严苛的阈值(0.5),可以考虑针对小目标使用Cascade RCNN的思想,级联优化小目标的检测。
2.7 回归损失函数上
在YOLO中按照不同的目标大小给了不同的损失函数加权系数: ( 2 − w ∗ h ) ∗ 1.5 (2-w*h)*1.5 (2−w∗h)∗1.5。使用这样的策略其性能提升了1个点。
2.8 小目标的GT
增大小目标的GT,从而变相加大目标,增加检测的能力。
本文总结了小目标检测的挑战及多种优化方法,包括使用FPN、调整anchor的密度和范围、改进ROI Pooling、应用GAN技术、增加小目标数量、调整IoU阈值、优化回归损失函数和增强小目标的GT,旨在提高小目标检测的性能。
2万+

被折叠的 条评论
为什么被折叠?



