所谓的小目标,要看是绝对小目标(像素),和相对小目标(相对原图的长宽来看的)。大目标小目标只跟receptive field(感受野)有关,cnn本身可以检测任何尺度的物体。ssd对小目标检测不太适用,但R-FCN速度和鲁棒存在问题。
以下是收藏的关于小目标的讨论,持续跟进:
https://www.zhihu.com/question/49455386
https://github.com/tensorflow/models/issues/3196
小目标分为很多种,背景单一还是比较好做的。有一篇小人脸检测用的是 fullyconvolutionalnetwork(FCN) + ResNet ,此篇论文检测小目标用了其周边的信息,如头发,肩膀。
首先,小目标像素少特征不明显,因此和大目标相比,小目标的检测率低,这个用任何算法上都是无法避免的。那不同算法之间的小目标检测的区别呢?SSD,YOLO等单阶段多尺度算法,小目标检测需要较高的分辨率,SSD对于高分辨率的底层特征没有再利用,而这些层对于检测小目标很重要,因此主要在底部的特征层进行检测,比如SSD中的conv4_3,但底部特征层的语义信息不够丰富,这是一个矛盾,但卷积层加足够深的话影响其实没这么大。我觉得最重要的因素还是因为scale设置的不好导致的,SSD中默认最低一层的anchor为 0.1~0.2,对于720p的图像最小检测尺寸就有72个像素,还是太大了。事实上SSD的源码允许一个特征层做多个尺度的滑窗,将参数min_sizes里的每个元素初始化为一个列表