机器之心报道
参与:一鸣
人脸识别一直有着广泛的应用场景,优秀的算法模型可以很好地提升人脸识别的速度、降低错误率、并能够部署在各种设备中。近日,来自中科院计算所的中科视拓团队宣布开源商用级SeetaFace2人脸识别算法,采用BSD协议。
中科视拓的人脸识别技术来自于国家万人计划领军人才山世光研究员和国家自然科学基金委杰出青年基金获得者陈熙霖研究员共同领导的中科院计算所视觉信息处理与学习研究组。研究成果先后获得过国家科技进步二等奖和国家自然科学二等奖。
SeetaFace2
SeetaFace2是一个完整的人脸识别项目,其中包括了人脸检测模块FaceDetector、面部关键点定位模块FaceLandmarker以及人脸特征提取与比对模块FaceRecognizer。还将陆续开源人脸跟踪、闭眼检测等辅助模块。

这一项目使用C++完成,不依赖任何第三方库,而且支持x86平台和ARM平台,具有良好的适配能力,可部署于各类平台上,由开发者进一步开发新的应用。

项目目录
现已对开发者开源的项目内容和目录如下:
SeetaFace2
craft(linux和windows平台的编译脚本)
documents(SDK接口说明文档)
example(C++版本SDK示例代码)
FaceDetector(人脸检测模块)
FaceLandmarker(特征点定位模块)
FaceRecognizer(人脸特征提取和比对模块)
SeetaNet(前向计算框架模块)
根据中科视拓提供的资料,现已开源的三个模块性能都非常高。它们都使用了深度学习架构,在保证效果的前提下尽可能提升计算速度,以下分别为每个模块使用的算法、技术指标和平台运行速度信息。

人脸检测
人脸检测使用的模型是CascateCNN。如图所示,该模型将人脸识别的图像分为三个阶段,每个阶段进行一次识别,并通过级联的方式将每一阶段的图像特征和上一阶段学习到的特征级联后进行softmax。

CascateCNN的架构。分别使用了12x12、24x24和48x48的网络,对人脸图像进行三阶段的识别。
面部关键点定位
这一模块使用的是FEC-CNN。如图所示,这也是将人脸图像经过多个CNN网络处理,每经过一个网络便获得一个表征,并和上一阶段的输入相乘。在经过了T个网络后输出最终的图像关键点。

FEC-CNN网络的架构。
人脸特征提取和对比
这一模块使用了ResNet50的模型架构。如图所示,这一网络将多个残差学习块串联在一起,利用模型的深度学习图像的深层表征。

ResNet50的模型架构。
模型效果
从中科视拓提供的资料来看,现在开源的三个模块都有着不错的模型性能。

和1.0版本的SeetaFace相比,SeetaFace2在模型性能方面有了很大的提升,同时运行速度没有受到太大的影响。
编译和使用
那么,开发者怎样可以使用这些模块呢?官方在项目中提供了编译为SDK的方式,方便开发者将其作为自有项目中的组件使用。现已支持的操作系统平台有Windows、Linux和安卓系统。
开发者也可以编译运行example文件夹中的文件,尝试体验使用。example/search/示例展示了一套人脸识别的流程,包括:1.预注册图像中的人脸到人脸识别底库中(example中默认注册了"1.jpg"中的人脸);2.打开摄像头,检测摄像头画面中的人脸;3.对检测到人脸进行识别,确定所属人脸的身份。
测试者如果想在底库中成功识别出自己的人脸,需要在的底库注册列表部分添加以自己名称命名的图片(名称+.jpg),并把自己名称命名的图片文件拷贝到程序的运行目录下,重新编译example并运行程序,测试识别效果即可。
下载渠道
为了更好地让开发者继续开发工作,官方已提供下载模型的渠道:
1.人脸检测模块FaceDetector模型下载链接:
MD5:E88669E5F1301CA56162DE8AEF1FD5D5
百度网盘::fs8r
Dropbox:
2.面部特征5点定位模块FaceLandmarker模型下载链接:
MD5:877A44AA6F07CB3064AD2828F50F261A
百度网盘::7861
Dropbox:
3.面部特征81点定位模块FaceLandmarker模型下载链接:
MD5:F3F812F01121B5A80384AF3C35211BDD
百度网盘::p8mc
Dropbox:
4.人脸特征提取和比对模块FaceRecognizer模型下载链接:
MD5:2D637AAD8B1B7AE62154A877EC291C99
百度网盘::pim2
Dropbox: