当前位置: 首页 > 科技观察

深度学习检测小目标常用方法

时间:2023-03-21 15:27:27 科技观察

深度学习检测小目标的常用方法一个实际且经常遇到的难题。不过在过去几年的发展中,也出现了一些提高小目标检测性能的方案。本文对这些方法进行了分析、整理和总结。欢迎讨论,本文持续维护。实验平台N/A传统图像金字塔和多尺度滑动窗口检测。在深度学习方法流行之前,对于不同尺度的物体,一般都是用与原始图像不同分辨率的图像金字塔来构建,然后在金字塔的每一层使用一个固定输入分辨率的分类器在这个上面滑动层检测目标,以检测金字塔底部的小目标;或者只使用一张原始图像,并使用不同分辨率的分类器来检测原始图像上的目标,以检测金字塔底部的小目标。在相对较小的窗口分类器中检测到小物体。在著名的人脸检测器MTCNN(https://arxiv.org/abs/1604.02878)中,采用图像金字塔法检测不同分辨率的人脸目标。但是这种方法比较慢(虽然通常构建图像金字塔可以通过使用卷积核分离或者直接简单粗略调整大小来加速,但是仍然需要做多次特征提取),后来有人借鉴了它的思路创建了一个特征金字塔网络。FPN取不同层的特征进行融合,只需要一次前向计算,不需要缩放图片。在小目标检测中也有应用,本文后面会提到。简单可靠的数据增强深度学习的效果在某种意义上是由大量数据提供的。也可以通过增加训练集中小目标样本的种类和数量来提高小目标检测的性能。在[2]一文中,介绍了很多数据增强方案。这些方案虽然主要解决了不同类别样本数量不均衡的问题,但有时小目标检测比较困难,数据集中也存在小样本。相对于大样本来说,因子数量少,所以这些解决方案很多都可以用来增强小样本数据,这里不再赘述。另外,在19年的论文Augmentationforsmallobjectdetection(https://arxiv.org/abs/1902.07296)中,也提出了两种简单粗暴的方法:1.COCO数据集中包含小物体的图片数量小到过采样的问题,使用OverSampling策略;2.对于同一张图片包含少量小目标的问题,使用分割的Mask将图片中的小目标图片裁剪掉,然后使用复制粘贴的方法(当然有的Rotate和scale,还有注意不要遮挡其他目标)。同一幅图像中的小目标越多,Anchor策略方法中匹配的正样本就越多。特征融合FPN不同阶段的特征图对应不同的感受野,它们表达的信息抽象程度也不同。浅层特征图感受野小,更适合检测小目标(检测大目标,它只“看到”了大目标的一部分,有效信息不够);deepfeaturemap感受野大,适合检测大目标(检测小目标,它“看到”的背景噪声太多,冗余噪声太多)。因此,有人提出融合不同阶段的特征图来提高目标检测的性能。这就是特征金字塔网络FPN(https://arxiv.org/abs/1612.03144)。在人脸领域,基本上性能较好的方法都采用了FPN的思想,其中比较有代表性的是RetinaFace:Single-stageDenseFaceLocalizationintheWild(https://arxiv.org/pdf/1905.00641。pdf)另一种思路:既然可以对不同分辨率的特征图进行融合,提高特征的丰富度和信息含量来检测不同大小的目标,那么自然有人会进一步猜测,如果只有高分辨率的特征是使用图像(浅层特征)来检测小脸;中间分辨率的特征图(中间层特征)用于检测大脸;最后,使用地面分辨率的特征图(深度特征)来检测小脸。例如人脸检测中的SSH(https://arxiv.org/pdf/1708.03979.pdf)。合适的训练方法SNIP、SNIPER、SAN在机器学习中有重要的意义。模型预训练的分布应尽可能接近测试输入的分布。因此,在大分辨率(如常见的224x224)下训练的模型不适合检测小分辨率的图片然后放大发送给模型。如果使用小分辨率图片作为输入,模型应该在小分辨率图片上进行训练;如果不是,则应使用小分辨率图片进行微调fine-tune在用大分辨率图片训练的模型上进行微调;最差的是直接用大分辨率图片去预测小分辨率图片(通过上采样放大)。但这是在理想情况下(在训练样本数量和丰富度相同的前提下,但实际上很多数据集严重缺乏小样本),所以放大输入图像+使用高分辨率图像pre-trainingFine-tuningonsmallimages在实践中比训练一个专门针对小物体的分类器要好。SNIP训练方法如下图所示。在训练过程中,只训练适当大小的目标样本。只有当真实值的尺度接近于Anchor的尺度时,才会用来训练检测器。如果太小或太大,预测时都不需要输入图像。多尺度,总有一个尺寸合适的Anchor,选择最合适的尺度进行预测。R-FCN(https://arxiv.org/abs/1605.06409)有两个主要改进。一种是多尺寸图像输入。对于不同大小的输入,在经过RPN网络时需要判断GT有效和无效。GT,以及validanchor和invalidanchor,通过这种分类,使得得到的预选框更加准确;其次,在RCN阶段,根据预选框的大小,只选择一定范围内的预选框,最后使用NMS得到FinalResults。SNIPER是SNIP的实用升级版,这里就不详细介绍了。更密集的Anchor采样和匹配策略S3FD,FaceBoxes在之前的DataAugmentation部分已经提到。将小目标复制到一张图片的多个地方,可以增加小目标匹配的Anchorboxes的数量,增加小目标的训练权重。减少网络对大对象的偏见。同样,反过来,如果数据集已经确定,我们也可以增加负责小目标的Anchor的设置策略,让训练时对小目标的学习更加充分。例如人脸检测中的FaceBoxes(https://arxiv.org/abs/1708.05234)Contribution之一是Anchordensificationstrategy,Inception3anchors有3个尺度(32,64,128),32个尺度是稀疏的,所以需要密集4倍,64个尺度需要密集2倍。S3FD(http://openaccess.thecvf.com/content_ICCV_2017/papers/Zhang_S3FD_Single_Shot_ICCV_2017_paper.pdf)人脸检测方法中,采用等比例区间原则,保证图中不同尺寸anchor的密度近似相等,所以大脸和小脸匹配的anchor数量也大致相等。此外,对于小目标的Anchor,采用相对松散的匹配策略(如IoU>0.4)也是一种常用的方法。先生成放大特征再检测的GANPerceptualGAN利用GAN为小目标生成一个与大目标非常相似的Super-resolvedFeature(如下图),然后叠加这个Super-resolvedFeature在原始小目标的特征图上(如下图),以增强小目标特征的表达,以提高小目标(本文中为红绿灯)的检测性能。RelationNetwork和PyramidBox这些使用Context信息的小目标,尤其是像人脸这样的目标,是不会单独出现在图片中的(想想没有头肩和身体的单张脸出现在图片中也是很恐怖的)。像PyramidBox(https://arxiv.org/abs/1803.07737)方法,加上一些头肩等上下文信息,那么目标就相当于变大了,上下文信息加上检测更容易。这里顺便提一下通用目标检测中添加上下文信息的另一种方式。虽然RelationNetworks(https://arxiv.org/abs/1711.11575)主要解决的是提高识别性能和过滤duplicatedetection的问题,而不是针对小目标Detected,但是和上面PyramidBox的思路类似,它利用了contextualinformation提高检测性能,可以归类为上下文。总结本文比较详细地总结了通用目标检测和专业人脸检测领域中一些常见的小目标检测方案。以后有空会写一些人脸领域的难点(比如ROP简介,RIP360-度数人脸)和目前学术上的解决办法。