https://www.cs.cmu.edu/~peiyunh/tiny/这个主页上介绍了CVPR中的一篇文章,关于细小人脸检测的。小物体检测一直还是CV界比较有挑战的一个问题。从作者的摘要可以看出,主要完成了以下三个工作:
We explore three aspects of the problem in the context of finding small faces:
(1)the role of scale invariance,
(2)image resolution,
(3)and contextual reasoning.
具体而言,论文关键点包括以下三个方面:
Multi-task modeling of scales
目前常用的方法是使用尺度归一化分类器或者在 ROI 池化特征图上运行区域分类器。将区域尺寸归一化到一个标准尺寸,会面临一个简单的问题,因此直观的想法是:分别训练不同尺度的检测器。然而这种问题肯定会带来复杂性的增加。通过发现对卷积网络后端小尺寸特征图进行放大,这对检测小目标很重要。因此作者最后采用了尺度不变方式,来处理图像金字塔以捕获大规模变化,并采用特定尺度混合检测器
整个论文实现检测的流程如下:从输入图像开始,首先创建一个粗图像金字塔(包括2X插值)。然后,我们将缩放的输入图像输入到CNN中(论文中采用了resnet-101),以便在每个分辨率下预测模板响应(用于检测和回归)。最后,我们在原始分辨率图像上应用非最大抑制(NMS)来获得最终检测结果。
觉得工作挺有意义的,于是进行了代码的复现。
具体过程:
(1)安装matlab
(2)安装matconvnet,这个必须采用作者的fork版本,否则会出现split函数没有找到的问题。
(3)直接运行
tiny_face_detector.m这个文件进行测试。(利用这种运行的方式可以避免反复加载预训练模型,提高测试效率)
具体的执行过程可以看到如下的字眼,即可以看到实际过程中采用了多种分辨率。
find the pretrained model file ./trained_models/hr_res101.matLoading pretrained detector model... load modelProcessing data/3.jpg at scale 0.062500. Processing data/3.jpg at scale 0.125000. Processing data/3.jpg at scale 0.250000. Processing data/3.jpg at scale 0.500000. Processing data/3.jpg at scale 1.000000. Processing data/3.jpg at scale 1.414214. Processing data/3.jpg at scale 2.000000.
下面为一些测试结果:
这种不是正面拍摄的照片,检测结果居然还是相当好的。
挑了张阅兵的照片,由于原始的照片是:650*350的,检测结果就相对一般了,主要可能是作者采用的20*15的框,已经超过了后面那排的人脸的像素。