点击上方“机器学习与生成对抗网络”,关注"星标"git
获取有趣、好玩的前沿干货!github
转自:极市平台算法
引言
在深度学习目标检测中,特别是人脸检测中,小目标、小人脸的检测因为分辨率低,图片模糊,信息少,噪音多,因此一直是一个实际且常见的困难问题。不过在这几年的发展中,也涌现了一些提升小目标检测性能的解决手段,本文对这些手段作一个分析、整理和总结。
微信
欢迎探讨,本文持续维护。网络
实验平台
N/Aapp
传统的图像金字塔和多尺度滑动窗口检测
最开始在深度学习方法流行以前,对于不一样尺度的目标,你们广泛使用将原图build出不一样分辨率的图像金字塔,再对每层金字塔用固定输入分辨率的分类器在该层滑动来检测目标,以求在金字塔底部检测出小目标;或者只用一个原图,在原图上,用不一样分辨率的分类器来检测目标,以求在比较小的窗口分类器中检测到小目标。
less
在著名的人脸检测器MTCNN(https://arxiv.org/abs/1604.02878)中,就使用了图像金字塔的方法来检测不一样分辨率的人脸目标。机器学习
不过这种方式速度慢(虽然一般build图像金字塔可使用卷积核分离加速或者直接简单粗暴地resize,可是仍是须要作屡次的特征提取呀),后面有人借鉴它的思想搞出了特征金字塔网络FPN,它在不一样层取特征进行融合,只须要一次前向计算,不须要缩放图片,也在小目标检测中获得了应用,在本文后面会讲到。
编辑器
简单粗暴又可靠的Data Augmentation
深度学习的效果在某种意义上是靠大量数据喂出来的,小目标检测的性能一样也能够经过增长训练集中小目标样本的种类和数量来提高。在《深度学习中不平衡样本的处理》[2]一文中已经介绍了许多数据加强的方案,这些方案虽然主要是解决不一样类别样本之间数量不均衡的问题的,可是有时候小目标检测之难其中也有数据集中小样本相对于大样原本说数量不多的因素,因此其中不少方案均可以用在小样本数据的加强上,这里不赘述。另外,在19年的论文Augmentation for small object detection(https://arxiv.org/abs/1902.07296)中,也提出了两个简单粗暴的方法:性能
1. 针对COCO数据集中包含小目标的图片数量少的问题,使用过采样OverSampling策略;

2. 针对同一张图片里面包含小目标数量少的问题,在图片内用分割的Mask抠出小目标图片再使用复制粘贴的方法(固然,也加上了一些旋转和缩放,另外要注意不要遮挡到别的目标)。

在同一张图中有更多的小目标,在Anchor策略的方法中就会匹配出更多的正样本。

特征融合的FPN
不一样阶段的特征图对应的感觉野不一样,它们表达的信息抽象程度也不同。浅层的特征图感觉野小,比较适合检测小目标(要检测大目标,则其只“看”到了大目标的一部分,有效信息不够);深层的特征图感觉野大,适合检测大目标(要检测小目标,则其”看“到了太多的背景噪音,冗余噪音太多)。因此,有人就提出了将不一样阶段的特征图,都融合起来,来提高目标检测的性能,这就是特征金字塔网络FPN(https://arxiv.org/abs/1612.03144)。

在人脸领域,基本上性能好一点的方法都是用了FPN的思想,其中比较有表明性的有RetinaFace: Single-stage Dense Face Localisation in the Wild(https://arxiv.org/pdf/1905.00641.pdf)

另一个思路:既然能够在不一样分辨率特征图作融合来提高特征的丰富度和信息含量来检测不一样大小的目标,那么天然也有人会进一步地猜测,若是只用高分辨率的特征图(浅层特征)去检测小脸;用中间分辨率的特征图(中层特征)去检测大脸;最后用地分辨率的特征图(深层特征)去检测小脸。好比人脸检测中的SSH(https://arxiv.org/pdf/1708.03979.pdf)。

合适的训练方法SNIP,SNIPER,SAN
机器学习里面有个重要的观点,模型预训练的分布要尽量地接近测试输入的分布。因此,在大分辨率(好比常见的224 x 224)下训练出来的模型,不适合检测自己是小分辨率再经放大送入模型的图片。若是是小分辨率的图片作输入,应该在小分辨率的图片上训练模型;再不行,应该用大分辨率的图片训练的模型上用小分辨率的图片来微调fine-tune;最差的就是直接用大分辨率的图片来预测小分辨率的图(经过上采样放大)。可是这是在理想的状况下的(训练样本数量、丰富程度都同样的前提下,但实际上,不少数据集都是小样本严重缺少的),因此放大输入图像+使用高分率图像预训练再在小图上微调,在实践中要优于专门针对小目标训练一个分类器。


在下图中示意的是SNIP训练方法,训练时只训练合适尺寸的目标样本,只有真值的尺度和Anchor的尺度接近时来用来训练检测器,过小太大的都不要,预测时输入图像多尺度,总有一个尺寸的Anchor是合适的,选择那个最合适的尺度来预测。对R-FCN(https://arxiv.org/abs/1605.06409)提出的改进主要有两个地方,一是多尺寸图像输入,针对不一样大小的输入,在通过RPN网络时须要判断valid GT和invalid GT,以及valid anchor和invalid anchor,经过这一分类,使得获得的预选框更加的准确;二是在RCN阶段,根据预选框的大小,只选取在必定范围内的预选框,最后使用NMS来获得最终结果。

SNIPER是SNIP的实用升级版本,这里不作详细介绍了。
更稠密的Anchor采样和匹配策略S3FD,FaceBoxes
在前面Data Augmentation部分已经讲了,复制小目标到一张图的多个地方能够增长小目标匹配的Anchor框的个数,增长小目标的训练权重,减小网络对大目标的bias。一样,反过来想,若是在数据集已经肯定的状况下,咱们也能够增长负责小目标的Anchor的设置策略来让训练时对小目标的学习更加充分。例如人脸检测中的FaceBoxes(https://arxiv.org/abs/1708.05234)其中一个Contribution就是Anchor densification strategy,Inception3的anchors有三个scales(32,64,128),而32 scales是稀疏的,因此须要密集化4倍,而64 scales则须要密集化2倍。在S3FD(http://openaccess.thecvf.com/content_ICCV_2017/papers/Zhang_S3FD_Single_Shot_ICCV_2017_paper.pdf)人脸检测方法中,则用了Equal-proportion interval principle来保证不一样大小的Anchor在图中的密度大体相等,这样大脸和小脸匹配到的Anchor的数量也大体相等了。
另外,对小目标的Anchor使用比较宽松的匹配策略(好比IoU > 0.4)也是一个比较经常使用的手段。

先生成放大特征再检测的GAN
Perceptual GAN使用了GAN对小目标生成一个和大目标很类似的Super-resolved Feature(以下图所示),而后把这个Super-resolved Feature叠加在原来的小目标的特征图(以下下图所示)上,以此加强对小目标特征表达来提高小目标(在论文中是指交通灯)的检测性能。


利用Context信息的Relation Network和PyramidBox
小目标,特别是像人脸这样的目标,不会单独地出如今图片中(想一想单独一个脸出如今图片中,而没有头、肩膀和身体也是很恐怖的)。像PyramidBox(https://arxiv.org/abs/1803.07737)方法,加上一些头、肩膀这样的上下文Context信息,那么目标就至关于变大了一些,上下文信息加上检测也就更容易了。

这里顺便再提一下通用目标检测中另一种加入Context信息的思路,Relation Networks(https://arxiv.org/abs/1711.11575)虽然主要是解决提高识别性能和过滤重复检测而不是专门针对小目标检测的,可是也和上面的PyramidBox思想很像的,都是利用上下文信息来提高检测性能,能够归类为Context一类。

总结
本文比较详细地总结了一些在通用目标检测和专门人脸检测领域常见的小目标检测的解决方案,后面有时间会再写一些专门在人脸领域的困难点(好比ROP的侧脸,RIP的360度人脸)及如今学术界的解决方案。
参考资料
End
声明:部份内容来源于网络,仅供读者学术交流之目的。文章版权归原做者全部。若有不妥,请联系删除。
猜您喜欢:
附下载 |《TensorFlow 2.0 深度学习算法实战》
附下载 | 超100篇!CVPR 2020最全GAN论文梳理汇总!
本文分享自微信公众号 - 机器学习与生成对抗网络(AI_bryant8)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。