简要介绍
SeetaFace Detection,即人脸检测,是Funnel-Structuredcascade的一种实现,可以实时多视角进行人脸检测。FuSt目标是,通过使用coarse-to-fine架构,达到准确率和速度的一个平衡。它包括3层:
1. multiple view-specific fastLAB cascade classifiers
2. coarse Multilayer Perceptron(MLP) cascades
3. oneunified fine MLP cascade, processing all proposed windows in a centralized style
FuSt开源版本包括人脸检测的代码,还有用于检测几乎是正面人脸(一些非正面的人脸也能检测)的模型,该模型是在大概200K个人脸图像中训练得到的。开源代码的实现与相应的论文中的描述有一些不同,不同点如下:
1. The fine MLP cascade使用SURF特征,而不是SIFT
2. 增加了Non-MaximalSuprresion(NMS)
3. Landmark预测被替换为bounding box regression
代码是用C++写的,不包含任何第三方库,目前只在Windows上测试过,但是代码并不包含Windows特有的头文件。使用了一些并行的技术。
性能评估
SeetaFace Detection在FDDB数据库上的ROC曲线如下图。SeetaFace Detector为了达到下面图表中的结果,检测脸的最小大小( the minimum size of faces todetect)设置为20,滑动窗户的步长(step of sliding window)设置为2或者4(如图中所示),尺度因子(scaling factor)设置为0.8(OpenCV下设置为1.25)。
各个算法的速度表现如下表格。输入图片大小为640*480。 SeetaFace detector的滑动窗口的步长设置为4,尺度因子为0.8。Cascade CNN使用图像金字塔,尺度因子为0.7(OpenCV下为1.414)。
SeetaFace Detector测试环境为:3.40GHz i7-3770 CPU
Cascade CNN 测试环境为:a 2.0 GHz CPU core,NVIDIA Titan Black GPU
Detector |
Min Face Size |
Speed on CPU |
Speed on GPU |
SeetaFace Detector |
40x40 |
16.0 FPS |
n/a |
SeetaFace Detector |
80x80 |
55.0 FPS |
n/a |
Cascade CNN [1] |
80x80 |
9.1 FPS |
100 FPS |
FacenessNet [2] |
80x80 |
n/a |
20 FPS |
实际测试
我的测试环境:Win7 64位+ Visual Studio 2015 + OpenCV310
作者给的源代码中,提供了配置好的Visual Studio 2013版本的示例程序,找到SeetaFaceEngine-master\FaceDetection\examples下,我用Visual Studio 2015打开,打开之后,只需要重新配置一下Opencv的相关路径便可以使用。具体配置的方法为:
1. examples----属性
2. 在VC++目录中修改opencv的包含目录以及库目录
比如我的opencv包含目录为:D:\opencv\opencv310\build\include
我的opencv库目录为:D:\opencv\opencv310\build\x64\vc14\lib
3. 在链接器---输入--附加依赖项中,加入opencv相关库文件。
注意Debug与Release模式下,附加依赖项名称略有不同。
配置好之后,便可以运行人脸检测的程序了。
检测结果如下:
可以看出,在我的笔记本上,人脸检测消耗时间为1.88273秒。
SeetaFace github地址:https://github.com/seetaface/SeetaFaceEngine