区分不同的人是很多智能系统的必备能力。为实现此目的,一种可能的技术手段是通过对人脸的光学成像来感知人、识别人,即所谓的人脸识别技术。经过几十年的研发积累,特别是近年来深度学习技术的涌现,人脸识别取得了长足的进步,在安防、金融、教育、社保等领域得到了越来越多的应用,成为计算机视觉领域最为成功的分支领域之一。

然而,人脸识别并非完全成熟的技术,离公众期望的全面应用尚有距离,还需要学术界、工业界的共同努力。为此,整个人脸识别社区需要有基准(Baseline)系统,而且基准系统的水平显然会极大影响着该领域的发展水平。可是令人尴尬的是,这个领域迄今尚无一套包括所有技术模块的、完全开源的基准人脸识别系统!我们希望改变现状,因此开源了SeetaFace人脸识别引擎。该引擎由中科院计算所山世光研究员带领的人脸识别研究组研发。代码基于C++实现,且不依赖于任何第三方的库函数,开源协议为BSD-2,可供学术界和工业界免费使用。

SeetaFace人脸识别引擎包括了搭建一套全自动人脸识别系统所需的三个核心模块,即:人脸检测模块(SeetaFace Detection)、面部特征点定位模块(SeetaFace Alignment)以及人脸特征提取与比对模块 (SeetaFace Identification)。

人脸检测模块SeetaFace Detection采用了一种结合传统人造特征与多层感知机(MLP)的级联结构,在FDDB上达到了84.4%的召回率(100个误检时),并可在单个i7 CPU上实时处理VGA分辨率的图像。面部特征点定位模块SeetaFace Alignment通过级联多个深度模型(栈式自编码网络)来回归5个关键特征点(两眼中心、鼻尖和两个嘴角)的位置,在AFLW数据库上达到state-of-the-art的精度,定位速度在单个i7 CPU上超过200fps。人脸识别模块SeetaFace Identification采用一个9层的卷积神经网络(CNN)来提取人脸特征,在LFW数据库上达到97.1%的精度(注:采用SeetaFace人脸检测和SeetaFace面部特征点定位作为前端进行全自动识别的情况下),特征提取速度为每图120ms(在单个i7 CPU上)。

下面对上述三个模块的情况做简要介绍,更详细的介绍请参考我们相应的学术论文。

人脸检测模块SeetaFace Detection

该模块基于我们提出的一种结合经典级联结构和多层神经网络的人脸检测方法实现,其所采用的漏斗型级联结构(Funnel-Structured Cascade,FuSt)专门针对多姿态人脸检测而设计,其中引入了由粗到精的设计理念,兼顾了速度和精度的平衡。

如图1所示,FuSt级联结构在顶部由多个针对不同姿态的快速LAB级联分类器构成,紧接着是若干个基于SURF特征的多层感知机(MLP)级联结构,最后由一个统一的MLP级联结构(同样基于SURF特征)来处理所有姿态的候选窗口,整体上呈现出上宽下窄的漏斗形状。从上往下,各个层次上的分类器及其所采用的特征逐步变得复杂,从而可以保留人脸窗口并排除越来越难与人脸区分的非人脸候选窗口。

图1. SeetaFace人脸检测模块所采用的FuSt漏斗型级联结构

与SeetaFace Detection开源代码配套开放的是一个准正面人脸检测模型(使用了约20万人脸图像训练而来),可以实现准正面人脸的准确检测(旋转角度约45度以内,但对于姿态偏转较大的人脸也具备一定的检测能力)。图2给出了一些检测结果的示例(注:测试时图像金字塔下采样比例设置为0.8,滑动步长设置为4和2,最小人脸设置为20x20)。在人脸检测领域最重要的评测集FDDB上对SeetaFace Detector进行评测,在输出100个误检时(FPPI=0.035)召回率达到84.4%,输出1000个误检时召回率达到88.0%。

图2. SeetaFace Detection人脸检测结果的示例

图3则给出了SeetaFace Detector在FDDB上的离散型得分ROC曲线,并与其它已发表的学术界公开结果(从FDDB官网获得)进行了对比。不难看出,尽管SeetaFace人脸检测器并非目前精度最高的,但在学术界公开的结果中仍然具有很强的竞争力,而且可以完全满足多数人脸识别系统的需求。

图3. SeetaFace Detector在FDDB上的ROC曲线

此外,与其他算法相比,SeetaFace Detector在速度上有一定优势。对于640x480大小的VGA图像,检测速度的对比情况如表1所示。其中,SeetaFace的速度在单个3.40GHz的i7-3770 CPU上测得,Cascade CNN在CPU上的速度在2.0GHz的CPU上测得(引自原文)。而各方法在GPU上的速度在NVIDIA Titan Black GPU上测得。

特征点定位模块SeetaFace Alignment

面部特征点定位(人脸对齐)在人脸识别、表情识别、人脸动画合成等诸多人脸分析任务中扮演着非常重要的角色。由于姿态、表情、光照和遮挡等因素的影响,真实场景下的人脸对齐任务是一个非常困难的问题。形式上,该问题可以看作是从人脸表观到人脸形状的复杂非线性映射。为此,SeetaFace Alignment采用的是我们提出的一种由粗到精的自编码器网络(Coarse-to-Fine Auto-encoder Networks, CFAN)来求解这个复杂的非线性映射过程。

如图 4所示,CFAN级联了多级栈式自编码器网络,其中的每一级都刻画从人脸表观到人脸形状的部分非线性映射。具体来说,输入一个人脸区域(由人脸检测模块得到),第一级自编码器网络直接从该人脸的低分辨率版本中快速估计大致的人脸形状S0。然后,提高输入人脸图像的分辨率,并抽取当前人脸形状S0(相应提升分辨率)各特征点位置的局部特征,输入到下一级自编码器网络来进一步优化人脸对齐结果。以此类推,通过级联多个栈式自编码器网络,在越来越高分辨率的人脸图像上逐步优化人脸对齐结果。

图4. 基于由粗到精自编码器网络(CFAN)的实时人脸对齐方法

此次开源的SeetaFace Alignment基于上述CFAN方法实现了5个面部关键特征点(两眼中心,鼻尖和两个嘴角)的精确定位,训练集包括23,000余幅人脸图像(标注了5点)。需要注意的是,为加速之目的,在基本不损失精度的情况下,开源实现中将CFAN级联的数目减少到了2级,从而可在单颗Intel i7-3770 (3.4 GHz CPU)上达到每个人脸5ms的处理速度(不包括人脸检测时间)。

图5给出了一些用SeetaFace Alignment开源引擎定位面部5点的效果示例,可见其对表情、姿态、肤色等均具有较好的鲁棒性。在AFLW数据集上的量化评价和对比情况如图6所示,其中平均定位误差根据两眼中心距离做了归一化。不难看出,SeetaFace Alignment取得了state-of-the-art的定位结果。

图5. SeetaFace Alignment定位结果示例

图6. SeetaFace Alignment在AFLW数据集上的定位误差及对比情况

其中LE:左眼,RE:右眼,N:鼻尖,LM:左嘴角,RM:右嘴角

人脸特征提取与比对模块SeetaFace Identification

人脸识别本质上是要计算两幅图像中人脸的相似程度,其一为注册阶段(类比人的相识过程)输入系统的,另一幅为识别阶段(即再见时的辨认过程)的输入。为此,如图7所示,一套全自动的人脸识别系统在完成前述的人脸检测与人脸对齐两个步骤之后,即进入第三个核心步骤:人脸特征提取和比对。这个阶段也是深度学习风起云涌之后进步最大的模块,目前大多数优秀的人脸识别算法均采用卷积神经网络(CNN)来学习特征提取器(即图7中的函数F)。

图7.人脸识别系统的核心流程

SeetaFace开源的人脸特征提取模块也是基于卷积神经网络的。具体地说,其实现的是深度卷积神经网络VIPLFaceNet:一个包含7个卷积层与2个全连接层的DCNN。其直接修改自Hinton教授的学生Alex Krizhevsky等于2012年设计的AlexNet(即引爆CNN在视觉中广泛应用的网络)。

如表2对比所示,与AlexNet相比,VIPLFaceNet将5x5的卷积核拆分为两层3x3的卷积核,从而增加了网络深度,而并没有增加计算量;VIPLFaceNet还减少了每个卷积层的kernel数目以及FC2层的节点数。同时,通过引入Fast Normalization Layer(FNL),加速了VIPLFaceNet的收敛速度,并在一定程度上提升了模型的泛化能力。测试表明,在相同训练集情况下,VIPLFaceNet在LFW测试集上识别错误率比AlexNet降低了40%,而训练和测试时间分别为AlexNet的20%和60%。

与开源的SeetaFace Identification代码一起发布的人脸识别模型是使用140万人脸图像训练出来的,这些训练图像来自于约1.6万人,其中既有东方人也有西方人。人脸特征直接采用VIPLFaceNet FC2层的2048个结点的输出,特征比对可简单采用Cosine计算相似度,然后进行阈值比较(验证应用)或排序(识别应用)即可。

该引擎在多数人脸识别场景下均具有良好的性能,例如,在LFW standard Image-Restricted测试协议下,使用SeetaFace Detector与SeetaFace Alignment检测并对齐人脸,采用SeetaFace Identification进行特征提取和比对,可以达到97.1%的识别正确率(请注意:这是系统全自动运行的结果,对少量不能检到人脸的图像,截取中间区域输入人脸对齐模块即可)。速度方面,在单颗Intel i7-3770 CPU上,开源代码提取一张人脸之特征的时间约为120ms(不含人脸检测和特征点定位时间)。

开源网址

目前,SeetaFace开源人脸识别引擎已全部发布在Github上供国内外同行和工业界使用,项目网址为:https://github.com/seetaface/SeetaFaceEngine

稿源:雷锋网

作者:VIPL_Face

python开源的人脸识别库_什么是 SeetaFace 开源人脸识别引擎相关推荐

  1. python人脸识别库_基于facenet的实时人脸识别系统

    facenet_facerecognition opencv+mtcnn+facenet+python+tensorflow 实现实时人脸识别 Abstract:本文记录了在学习深度学习过程中,使用o ...

  2. python人脸识别库_基于Python的face_recognition库实现人脸识别

    Python Python开发 Python语言 基于Python的face_recognition库实现人脸识别 一.face_recognition库简介 face_recognition是Pyt ...

  3. python dlib caffe人脸相似度_基于深度学习的人脸识别系统(Caffe+OpenCV+Dlib)【一】如何配置caffe属性表...

    前言 基于深度学习的人脸识别系统,一共用到了5个开源库:OpenCV(计算机视觉库).Caffe(深度学习库).Dlib(机器学习库).libfacedetection(人脸检测库).cudnn(gp ...

  4. 人脸检测算法_目前最强!开源人脸检测算法:RetinaFace

    加入极市专业CV交流群,与6000+来自腾讯,华为,百度,北大,清华,中科院等名企名校视觉开发者互动交流!更有机会与李开复老师等大牛群内互动! 同时提供每月大咖直播分享.真实项目需求对接.干货资讯汇总 ...

  5. python百度云ocr文字识别软件_基于百度云的OCR识别(Python)

    2019年7月3日早上,在百度AI开发者大会上,一个来自山西的青年,将一瓶矿泉水浇在了同样来自山西的李彦宏身上. 可以回顾一下 https://b23.tv/av57665929/p1 ,着实让人一惊 ...

  6. python 统计组合用什么库_盘点2018年热门Python库|TOP20

    来源:CDA数据分析师 在解决数据科学任务和挑战方面,Python继续处于领先地位.去年,我对当时热门的Python库进行了总结.今年,我在当中加入新的库,重新对2018年热门Python库进行全面盘 ...

  7. python大数据运维库_大数据集群运维(10)Pycharm下安装模块

    方法一:使用Pycharm的终端安装 一.网络爬虫 1.安装requests包 作用:简洁且简单的处理HTTP请求的第三方库 pip install requests 2.安装scrapy包 作用:快 ...

  8. 人脸检测算法_腾讯已开源高精度人脸检测算法DSFD

    腾讯提出一种高精度双分支人脸检测器DSFD并开源.该算法曾在全球两大权威人脸检测数据集WIDERFACE和FDDB上均取得了第一. 任务介绍 人脸检测算法是在图像上检测出人脸的位置(通常以矩形框形式输 ...

  9. python有趣的5个库_彩蛋有趣的五个_你知道 Python 这五个有趣的彩蛋吗?-云栖社区-阿里云...

    当一门编程语言是开源的时候,往往会有产生一些搞笑和有趣的东西.通常,这意味着社区的贡献者会为该语言添加一些有趣和特别的彩蛋以及隐藏的特性(当然前提是不会增加在生产环境中使用的风险). Python 就 ...

最新文章

  1. matlab迷宫做短路径,迷宫最短路径问题解析
  2. python 作用域 前缀_Python面试题:杂项内容
  3. Ybquery项目部署idea
  4. HarmonyOS之常用组件TabList与Tab的功能和使用
  5. b端 ux 设计思维_借助系统思维从视觉设计过渡到UX
  6. 洛谷 P2261 [CQOI2007]余数求和 解题报告
  7. 30个高质量的Psd设计文件分享
  8. BGPVRP5.0的10条选路原则,以及NE20的IBGP负载均衡
  9. ES6知识整理(2)--变量的解构赋值
  10. 吃鸡 反作弊服务器未运行,绝地求生反作弊服务(BE)修复工具
  11. windows下ruby安装环境配置
  12. 厦门大学904数据结构与机器学习资料与辅导
  13. 新疆旅游攻略-禾木村
  14. ​秋招上岸,机械转码经历和面经​
  15. 基因家族分析⑦:用MEME查询基因家族的motif
  16. 低压回路测控终端| 汉光 LPC96P低压回路测控装置
  17. prometheus监控预警之AlertManager邮箱报警
  18. skynet 热更新
  19. HTTP HTTPS
  20. redux与react-redux的区别:

热门文章

  1. SQL DateTime数据类型注意事项和限制
  2. sql azure 语法_Azure Kubernetes服务(AKS)–管理SQL Server数据库文件
  3. 堆排序(Heapsort)
  4. HTTP 1.1状态代码
  5. 全球股市下跌潮蔓延 多个国家地区拟出手救市
  6. python中的namespace
  7. Error: Cannot Determine the location of the VS common tools folder
  8. 用Barcode生成条形码图片
  9. 浅析ASP.NET应用Autofac获取页面服务
  10. Tokyo Tyrant (ttserver)的master-slave复制协议分析