惊呆了!速度高达15000fps的人脸检测算法!
昨天52CV君发现一篇奇文,《Face Detection at 15,000 FPS:Real-Time Inference on GPU and CPU》,速度高达15000fps的人脸检测算法!
我认为用real-time来形容它的速度已经不够贴切了,这明明是闪电嘛~
这篇论文来自SIBGRAPI2018,是一个位于巴西的关注计算机图形、视觉、模式识别、图像处理的学术会议,看起来巴西人不仅踢球快,检测算法也追求超级快。
主要思想
其主要思想概括一下,就是图像缩小后再CNN检测。请看下图:
该算法将图像缩到极小(最小达到16*16像素),然后进行CNN检测,CNN此时跑的非常快。这时候原图中的小尺寸人脸往往是检测不到的,不过没关系,对于一些特定场景(比如车载摄像头的人脸检测)已经够用了。
网络结构
下图展示了作者所用网络的结构:
上图最上面部分是网络流程,d1、d2、d3是网络结构,白色和灰色代表不同的inception结构。网络最后分别是分类(是否是人脸)和定位分支(位置在哪里)。图中不同颜色代表不同网络层或结构,最下面的部分有说明。
数据集
作者使用WIDER-FACE数据集的训练集制作训练集,按照含有人脸图像截取出来并进行一定的缩放。
Fig.3 展示了这一过程。
同时作者收集了GoPro拍摄的车内的视频作为测试集。
Fig.4 展示了其中示例。
实验结果
作者在实验阶段最重要的参数设置变化是图像大小,最大图像80*80,最小图像16*16。
对比的算法是经典的V&J人脸检测器。(估计也不好意思跟先进的算法比精度吧~)
不仅报告了精度,还报告了在CPU(I3-6006U)、树莓派3、1080Ti、1080Ti(batch size为256)上的运行fps。
请手机横屏查看下图列出的结果:
使用该文算法,在分辨率为64*64时取得了最高的精度,此时在树莓派3上也能达到实时(16.86fps)。
在分辨率16*16时取得了最快的速度,其中1080Ti(batch size为256)情况下高达15442.34fps!此时在树莓派3上也达到了49.61fps!
作者最后通过设置不同的分类阈值研究了IOU图,发现影响该算法检测精度的主要因素是定位不够精确,亦即很多时候分类器已经分类出人脸了,但定位不准。(这意味着如果能够提高定位精度,这个算法就更逆天了)
可惜的是,目前还未发现作者将此算法开源~
发】就是一种鼓励