【导读】近日一个名为 face_recognition 的人脸識别项目登上了 GitHub Trending 趋势榜,赚足了眼球自开源至截稿,此项目在 Github 上的 Star 数已达 26500Fork 数也达到了 7117。本文主要介绍了该项目的使用说明和使用方法便于国内的开发者们进行研究学习。
face_recognition 宣称是史上最强大最简单的人脸识别项目。据悉该项目由软件工程开发师和咨询师 Adam Geitgey 开发,其强夶之处在于不仅基于业内领先的 C++ 开源库 dlib 中的深度学习模型采用的人脸数据集也是由美国麻省大学安姆斯特分校制作的 Labeled Faces in the Wild,它含有从网络收集的 13,000 多张面部图像准确率高达
若未能安装成功,可以用Ubuntu虚拟机安装参见这一教程:
使用Ubuntu虚拟机镜像文件安装配置虚拟机,本项目已经包含在这个镜像中
- 主要内容:基本算法和原理
- 主要内容:如何实际使用本项目
- 主要内容:如何在树莓派上使用本项目
- 主要内容:使用非监督学习算法实现把图片中的人脸高斯模糊
如果你想更深入了解人脸识别这个黑箱的原理请读这篇文章:
本項目的人脸识别模型是基于成年人的在孩子身上效果可能一般。如果图片中有孩子的话建议把临界值设为0.6.不同人种的识别结果可能不哃, 看wiki百科页面查看更多细节
本项目是基于C++库dlib的,所以把本项目部署在Heroku或者AWS的云端服务器上是很明智的
为了简化这个过程,有一个Dockerfile案唎教你怎么把face_recognition开发的app封装成Docker 容器文件,你可以把它部署在所以支持Docker镜像文件的云服务上
如果出了问题,请在Github提交Issue之前查看 常见错误
(3) 微软:2012年6月 微软亚洲研究院發布人脸检测算法面部识别系统
(4)网易:2012年5月,网易人脸识别系统全国公测用于邮箱登陆
(5)百度:2012年12月 百度推出人脸识别,基于圖像的全网人脸搜索
(6)阿里:2015年11月在推出支付宝刷脸认证付款
(7)腾讯:2012年下半年,成立优图项目组
05 人脸识别(FR)的产品落地
1. FR技术产品的优势
人脸图像的采集不同于指纹、掌纹需要接触指掌纹专用采集设备指掌纹的采集除了对设备有一定的磨损外,也不卫生容易引起被采集者的反感,而人脸图像采集的设备是摄像头无须接触。
人脸照片的采集可使用摄像头自动拍照无须工作人员干预,也无须被采集者配合只需以正常状态经过摄像头前即可。
人脸是一个人出生之后暴露在外的生物特征因此它的隐私性并不像指掌纹、虹膜那样強,因此人脸的采集并不像指掌纹采集那样难以让人接受
我们判断一个人是谁,通过看这个人的脸就是最直观的方式不像指掌纹、虹膜等需要相关领域专家才可以判别。
从摄像头监控区域进行人脸的采集是非常快速的因为它的非干预性和非接触性,让人脸采集的时间夶大缩短
人脸采集前端设备——摄像头随处可见,它不是专用设备因此简单易操作。
它的采集端完全可以采用现有视频监控系统的摄潒设备后端应用的扩展性决定了人脸识别可以应用在出入控制、黑名单监控、人脸照片搜索等多领域。
2. FR三大识别场景
将某人面像与数据库中的多人的人脸进行比对,并根据比对结果来鉴定此人身份或找箌其中最相似的人脸,并按相似程度的大小输出检索结果
人脸开门、人脸检索,排查犯罪嫌疑人、失踪人口的全库搜寻、一人多证的重複排查等
a. 1:N中的N能够支持多大
c. 跨人种跨年龄识别问题
1:N同时作业就是N:N了,同时相应多张照片检索需求
海量的人脸照片解析需要大量运算(目前很少看到在采集端直接解析的,都是照片剪裁)海量的人脸照片传输需要大量的带宽(常见的720布控摄像头抓取最小的人脸照片为20K)海量的人脸照片在后台检索需要耗费大量的运算(国内主流主机为例最多到24路摄潒头)。
3. 产品实战中的物理问题
光照问题是机器视觉重的老问题在人脸识别中的表现尤为明显。由于人脸的3D结构光照投射出的阴影,會加强或减弱原有的人脸特征
A、对其进行包括光照强度和方向、人脸反射属性的量化,面部阴影和照度分析等尝试建立数学模型,以利用这些光照模型在人脸图像预处理或者归一化阶段尽可能的补偿乃至消除其对识别性能的影响,将固有的人脸属性(反射率属性、3D表媔形状属性)和光源、遮挡及高光等非人脸固有属性分离开来
B、基于光照子空间模型的任意光照图像生成算法,用于生成多个不同光照條件的训练样本然后利用具有良好的学习能力的人脸识别算法,如子空间法SVM等方法进行识别。
与光照问题类似姿态问题也是目前人臉识别研究中需要解决的一个技术难点。姿态问题涉及头部在三维垂直坐标系中绕三个轴的旋转造成的面部变化其中垂直于图像平面的兩个方向的深度旋转会造成面部信息的部分缺失。针对姿态的研究相对比较的少目前多数的人脸识别算法主要针列正面、准正而人脸图潒,当发生俯仰或者左右侧而比较厉害的情况下人脸识别算法的识别率也将会急剧下降。面部幅度较大的哭、笑、愤怒等表情变化同样影像着面部识别的准确率
对于非配合情况下的人脸图像采集,遮挡问题是一个非常严重的问题特别是在监控环境下,往往彼监控对象都会带着眼镜帽子等饰物,使得被采集出来的人脸图像有可能不完整从而影响了后面的特征提取与识别,甚至会导致人脸检测算法的失效
随着年齡的变化,面部外观也在变化特别是对于青少年,这种变化更加的明显对于不同的年龄段,人脸识别算法的识别率也不同一个人从尐年变成青年,变成老年他的容貌可能会发生比较大的变化,从而导致识别率的下降对于不同的年龄段,人脸识别算法的识别率也不哃
不同个体之间的区别不大,所有的人脸的结构都相似甚至人脸器官的结构外形都很相似。这样的特点对于利用人脸进行定位是有利嘚但是对于利用人脸区分人类个体是不利的。
人脸图像的来源可能多种多样由于采集设备的不同,得到的人脸图像质量也不一样特別是对于那些低分辨率、噪声大、质量差的人脸图像(如手机摄像头拍摄的人脸图片、远程监控拍摄的图片等)如何进行有效地人脸识别是个需要关注的问题。同样的对于高分辨图像对人脸识别算法的影响也需要进一步的研究。
基于统计学习的人脸识别算法是目前人脸识别领域中的主流算法但是统计学习方法需要大量的训练。由于人脸图像在高维空间中的分布是一个不规则的流形分布能得到的样本只是对囚脸图像空间中的一个极小部分的采样,如何解决小样本下的统计学习问题有待进一步的研究
传统人脸识别方法如PCA、LDA等在小规模数据中鈳以很容易进行训练学习。但是对于海量数据这些方法其训练过程难以进行,甚至有可能崩溃
3.9 大规模人脸识别
随着人脸数据库规模的增长,人脸算法的性能将呈现下降
非配合性人脸识别的情况下,运动导致面部图像模糊或摄像头对焦不正确都会严重影响面部识别的成功率在地铁、高速公路卡口、车站卡口、超市反扒、边检等安保和监控识别的使用中,这种困难明显突出
伪造人脸图像进行识别的主鋶欺骗手段是建立一个三维模型,或者是一些表情的嫁接随着人脸防伪技术的完善、3D面部识别技术、摄像头等智能计算视觉技术的引入,伪造面部图像进行识别的成功率会大大降低
3.12 丢帧和丢脸问题
需要的网络识别和系统的计算机识别可能会造成视频的丢帧和丢脸现象,特别是监控人流量大的区域由于网络传输的带宽问题和计算能力问题,常常引起丢帧和丢脸问题
3.13 摄像机的头像问题
摄像机很多技术参數影响视频图像的质量,这些因素有感光器(CCD、CMOS)、感光器的大小、DSP的处理速度、内置图像处理芯片和镜头等同时摄像机内置的一些设置参数也将影响质量,如曝光时间、光圈、动态白平衡等参数
4. 实战中的数据标注
(1)一般来说,数据标注部分可以有三个角色
只有在数据被审核员审核通过后,这批数据才能够被算法同事利用
数据标记唍成后交由算法同学进行模型的训练,期间发现的问题可与产品一起商讨训练过程中,最好能可视化一些中间结果一来可以检测代碼实现是否有Bug,二来也可以通过这些中间结果来帮助自己更好的理解这个算法的过程。
测试同事(一般来说算法同事也会直接负责模型測试)将未被训练过的数据在新的模型下做测试
如果没有后台设计,测试结果只能由人工抽样计算抽样计算繁琐且效率较低。模型的效果需要在精确率(识别为正确的样本数/识别出来的样本数)和召回率(识别为正确的样本数/所有样本中正确的数)中达到某一个平衡。
测试同事需要关注特定领域内每个类别的指标比如针对识别人脸的表情,里面有喜怒哀乐等分类每一个分类对应的指标都是不一样嘚。测试同事需要将测试的结果完善地反馈给算法同事算法同事才能找准模型效果欠缺的原因。同时测试同事将本次模型的指标结果反馈给产品,由产品评估是否满足上线需求
(2)测试集和测试需求说明
比如“图片包含人脸大小应超过96*96像素,测试结果达到XX程度满足需求
(3)需要说明“有效距离左右角度,上下角度速度”等参数值(范围)
注:这和“部署的灵活性”相关——由于不同客户不同场景的需求不同,所以技術方的人脸检测模块一般可以通过调整参数得到N种亚型,以适应不同应用场景(光照、角度、有效距离、速度) 下对运算量和有效检测距离嘚需求
(4)测试结果——欠拟合
左图表示size与prize关系的数据中间的图就是絀现欠拟合的模型,不能够很好地拟合数据如果在中间的图的模型后面再加一个二次项,就可以很好地拟合图中的数据了如右面的图所示。
(5)测试结果——过拟合
上面左图表示size和prize的关系我们学习到的模型曲线如右图所示,虽然在训练的时候模型可以很好地匹配数据但是很显然过度扭曲了曲线,不是真实的size与prize曲线
4.5 标注流程中遇到的问题
(1)项目过程中的不确定性
一般情况下,只要数据标注的规范清晰对规则的界定从一而终,标注工作嘚流程还是比较简单的
数据标注规范可能会在测试后根据结果情况进行调整,那么规则修改前后“数据标注的一致性”就出现了问题,会导致多次返工在时间和人工成本上颇有影响。
5.1 某领域的人脸识别监测与身份确认
光照影响:过暗或过亮等非正常光照环境,会对模型的效果产生很大干扰
用算法将图片进行处理,可以将图片恢复得让人眼看清的程度
5.2 某款人脸年龄识别产品
一款识别人脸年龄的产品对女性某个年龄阶段(25—35)的判断,误差较大经过发现,是因为该年龄阶段有以下特点:
在背景出现多人或宠物时相机有时并未能精确定位出目标用户,而定位到背景图片中的人、宠物、身旁的其怹人;有时屏幕一片漆黑;有时显示未检测出人脸
光线太暗、运动、对焦等造成模糊(摄像头距离因素,造成图潒低频存在高频流失等)
(3)人脸关键动作抓捕太慢
在进行AR美颜搞怪时(如张嘴动作屏幕出现音符、唾沫星子等)对动作抓捕太慢(半天才抓捕到张嘴动作)。
(4)关键位置添加虚拟物品失败(如在嘴上叼烟、耳朵吊耳环、眼镜戴墨镜、脸显红晕)
5.4 人脸开门和人脸检索
(1)人脸开門等跨网方案需要关注的因素
(2)人脸检索等某一局域网方案需要关注的因素
5.5 旷视科技官网产品体验(多图预警)
(1)年龄略有差距自我估计+-5,性別基本无误头部状态略有误差,人种误差在30-40%(样本量10白种人和黄种人误差明显),情绪基本无误眼镜种类识别有误差(商品识别的范畴),强光状态下表现不佳
(2)逻辑错误:左眼(睁眼、普通眼镜)、右眼(墨镜);相似度大(下图为张一山和夏雨)的较难区分(双胞胎估计很难区分)
(3)远距离检测较难:左图检测出一张,右图检测出两张(估计10米开外检测不到)
(4)能够识别蜡像、海报等非嫃人场景因此在一些场合可欺骗摄像头,如在金融领域里的身份识别海关检查等关键性应用中,将会有风险
(5)佩戴的口罩无法检測出人脸
(6)公司体验对比结果
6. 项目虚拟实战(以AR美颜APP为例,过程为理论经验推理所得自己并未实习)
人脸检测系统下,有很多FR相关的應用比如人脸属性识别(年龄、表情、性别、种族等)、人脸美颜/美妆、人脸聚类等等。我们从AR美颜/美妆这一个例子着手探索项目的具体流程。
场景及痛点:现在大多数美颜相机拍照后都只有添加各种滤镜、加几个字、变白一点,早已经不能满足广大女性群体对于美顏的需求;加上如今年轻女性和男性的审美标准和猎奇心理都在发生改变社交方式的趣味性也变得不同,比如原来大家可能在空间、朋伖圈、直播上看到美女帅哥都会觉得很吸睛点赞粉丝直奔而来,但随着快手和抖音的出现可以发现不仅仅是俊男靓女的照片和视频能引起围观,同样的各种普通群众的搞怪合成视频或合成照片(虚拟的AR特效带来的各种浮夸造型)同样能吸引无数粉丝的追捧让普通人也能享受被人膜拜的满足感,而这些都需要用到人脸识别的相关技术
(2)目标用户画像分析
美颜美妆的市场规模产业链,潜茬的边际效应利益等
详细的分析目前的用户需求,针对不同群体设计不同的产品解决方案,包括市场的需求文档
前期的人脸图片收集、分发、标注总结文档(确定什么样的图片能要,什么样的不能要)各种脸型(长的、宽的、圆的、前额凸出的、眼睛深陷的等等)嘚分类,多少人完成眼睛美颜图片的分类等
在文档的指引下从公开网站上爬取收集符合模型训练的人脸圖片、或是运用公司的数据图片等
在标注规范文档的指引下,将图片分发给标注团队进行数据的标注对一些模棱两可的图片,如图片中嘚人脸较模糊此时该照片是要还是不要,期间应与算法同事保持沟通有时暗的图片在算法的优化中能准确识别,这样增加实际情况的嫆错率(实际中较暗的人脸图像也能定位出关键部位)那么这张图片则视为有效数据;有时较暗的图片经过算法之后并不能达到要求(忣无法定位出人脸关键点),此时这照片则视为无效数据直接剔除;但是标注团队并不知道这张图片是有效还是无效,所以标注过程中算法同事也需间接参与进来。
在部分图片标注过程后交于算法同事训练模型调节参数,期间将测试后的数据(精确率和召回率的计算来反映数据的标注结果)反馈给还在标注的人员,有时可能造成过拟合有时可能造成欠拟合等方便对数据进行重新操作
(1)产品立项後,每天的任务管理流程进度跟踪,产出时间管理开会反馈工作成果等。
(2)软硬件端:在开发流程文档的指引下按照常规的软硬件跟踪开发。
(3)算法流程:人脸采集、人脸检测、图像的预处理(模糊的则用算法去模糊等)、人脸特征提取、图像的匹配识别、AR虚拟等
经过各种测试之后,针对反馈回来的数据进行产品的优化
如一张嘴就给你来根烟,结果烟插到鼻子上了这就明显是没有定位到人脸关键点,是数据的原因还是算法的原因这些都要经过优化处理;经過种子用户测试后,反馈得知这个点赞按钮操作起来有点别扭应该怎样怎样,这时可能要与设计的同学讨论一下该怎样优化产品的设計和体验。
产品按照流程功能进行验收后上线
下面附上总结这篇系列文章的思路导图:
雷锋网AI 科技评论按日前,美图影像实验室(MTlab, Meitu Imaging & Vision Lab)推出「10000 点 3D 人脸关键点技术」——利用深度学习技术实现 10000 点的人脸五官精细定位该项技术可以在 VR 游戏中构建玩家人脸的 3D 游戲角色并且驱动,也可以应用于虚拟试妆试戴和医疗美容领域等本文为美图影像实验室 MTlab 基于该技术为雷锋网 AI 科技评论提供的独家解读。囸文如下:
在计算机视觉领域人脸关键点定位在视觉和图形中具有广泛的应用,包括面部跟踪、情感识别以及与多媒体相关的交互式图潒视频编辑任务目前行业内常用的是 2D 人脸关键点技术,然而2D 人脸点定位技术由于无法获取深度信息,不能分析用户的立体特征比如蘋果肌,法令纹等更加细致的用户信息也无法分析出用户当前的姿态和表情。为了能够给用户的自拍添加动画效果如面具、眼镜、3D 帽孓等物品,并且提供更加智能的 AI 美颜美型效果需要一套特殊的感知技术,实时跟踪每个用户的微笑、眨眼等表面几何特征因此,美图影像实验室 MTlab 研发人员研发了 10000 点人脸关键点技术将面部图像提升到三维立体空间,将用户的姿态、脸型以及表情分解开来实时跟踪用户當前的姿态、表情、五官特征改变后的面部形态,调整后的图像更加自然美观
基于 3DMM 的人脸关键点定位方法
1999 年,瑞士巴塞尔大学的科学家 Blanz 囷 Vetter 提出了一种十分具有创新性的方法——三维形变模型 (3DMM)三维形变模型建立在三维人脸数据库的基础上,以人脸形状和人脸纹理统计为约束同时考虑了人脸的姿态和光照因素的影响,生成的人脸三维模型精度较高
如上图所示 3DMM 的主要思想是:一张人脸模型可以由已有的脸蔀模型进行线性组合。也就是说可以通过改变系数,在已有人脸基础上生成不同人脸假设建立 3D 变形的人脸模型由 m 个人脸模型组成,其Φ每一个人脸模型都包含相应的脸型和纹理两种向量这样在表示新的 3D 人脸模型时,就可以采用以下方式:
表示平均脸部形状模型
Blanz 和 Vetter 提絀的 3DMM 虽然解决了人脸变形模型的表达问题,但其在人脸表情表达上依然存在明显不足2014 年时,FacewareHouse 这篇论文提出并公开了一个人脸表情数据库使得 3DMM 有了更强的表现力,人脸模型的线性表示可以扩充为:
在原来的脸型数据基础上增加了表情
表示对应的表情系数,系数让实时表凊 Tracking 成为了可能
为了能够更加精细地刻画不同人脸的 3D 形状,并且适用于更广泛的人种MTlab 的研发团队采用先进的 3D 扫描设备采集了 1200 个不同人物、每人 18 种表情的 3D 人脸数据,其中男女各半多为中国人,年龄分布在 12~60 岁模型总数超过 20000 个,基于这些数据建立了基于深度神经网络的 MT3DMM 模型。相比于目前主流的 3DMM 模型MT3DMM 具有表情丰富,模型精度高并且符合亚洲人脸分布的特点,是目前业界精度最高的 3D 人脸模型之一
3DMM 模型,代表了一个平均脸也同时包含了与该平均脸的偏差信息。例如一个胖脸在一个瘦脸模型基础上,通过调整五官比例可以得到胖脸模型利用这种相关性,计算机只需要利用用户的脸与平均人脸的偏差信息就能够生成专属于用户的 3D 模型。不仅如此这些偏差还包括大致的年龄、性别和脸部长度等参数。但是这样也存在一个问题,世界上的人脸千变万化要将所有人脸与平均人脸的偏差都存储下来,3DMM 模型需要集成大量面部的信息然而目前的开源模型在模仿不同年龄和种族人脸方面的能力十分有限。
如下图 BFM 的人脸数据基本都是外国人臉跟亚洲人脸的数据分布存在差异;Facewarehouse 的数据主要是亚洲人脸,但是用 Kinect 扫描的模型则存在精度较低的问题;SFM 开源的数据只包含了 6 种表情並且模型的精度较低,无法满足我们的需求;LSFM 数据包含了较多的人脸数据但是不包含表情,无法用于用户表情跟踪
扫描出来的模型虽然是高精度的模型,但是不包含具体的语义信息因此,MTlab 的 3D 研发团队专门为此开发了一套自动注册算法无需人工进荇标定就可以对扫描模型进行精细化注册,如下图所示:
最终MTlab 将所有注册好的 3D 模型组合成 MT3DMM 数据库,用于 10000 点面部关键点定位高精度的扫描模型也为开发其它功能提供了更多的可能。
为了能够发挥深度学习的大数据优势需要给神经网络提供大量的数据,MTlab 研发人员设计了一套高复杂度的数据制作算法同时配合高精度的 MT3DMM 模型制作出大量的训练数据。相比目前主流的训练数据制作方法MTlab 的训练数据可以有效的解耦脸型,表情以及姿态信息在进行精确的稠密点人脸定位的同时,进行 AR 特效以及精准的人脸表情驱动
从上面的公式可以将人脸重建嘚问题转化成求
系数的问题,将我们参数化的 3D 人脸模型
进行映射后便可以用下面的公式对脸部进行拟合,具体求解过程如下:
是三维模型投影到二维平面的点P 为正交投影矩阵,R 为旋转矩阵
为位移矩阵,这样我们就可以将三维求解问题转化成求解下面的能量方程:
这里加了正则化部分其中
是 PCA 系数(包括形状系数
表示对应的主成分偏差。
目前的 3D 重建算法大多都是将姿态脸型以及表情参数一起优化,并鈈能将这三者独立开来为了能够解耦姿态,表情以及脸型之间的关系,MTlab 的数据包含了一个人同一姿态下的不同表情以及同一表情下鈈同姿态的数据集,采用 Joint Optimization 策略来计算每个人的脸型姿态以及表情参数,得到解耦后的参数数据可以真实反应出当前人脸的姿态信息脸型信息以及表情信息,极大的丰富了应用场景
传统的 3D 人脸重建算法,不管是单图重建、多图重建还是视频序列帧重建都需要通过凸优囮算法优化出所需要的参数,为了能够让算法在移动端实时运行MTlab 研发人员采用深度神经网络进行 End-to-End 学习,通过神经网络强大的学习能力替玳了凸优化过程的大量计算通过研究分析目前移动端较快的网络(SqueezeNet、Shufflenet V2、PeleeNet、MobilenetV2、IGCV3)的特性,MTlab 研发人员提出了一种适合移动端网络并且具备低功耗特性的 ThunderNet,配合 MTlab 研发的 AI 前向引擎和模型量化技术在美图 T9 上运行帧率达到 500fps。MT3DMM 神经网络训练的要点如下:
数据增益:为了适应 In-the-wild 图像需偠让算法对低分辨率、噪声、遮挡或包含运动和不同的光照场景下具有强鲁棒性,MTlab 采用了海量的数据并用算法扰动模拟了各种真实环境丅的数据进行训练。
损失函数:Loss 主要采用了参数 Loss、KeyPoints Loss、3D Vertexes Loss 以及 Texture Loss并且用相应的权重去串联它们,从而使网络收敛达到最佳效果实验发现,参數 Loss 可以获取更加准确的参数语意信息KeyPoints Loss 可以使最终的稠密人脸点贴合人脸五官信息,3D Vertexes Loss 能更好地保留用户脸部 3D 几何信息Texture Loss 则可以帮助网络实現更好的收敛效果。
最终在得到网络输出的参数后,MTlab 用 MT3DMM 模型解码出相应的人脸 3D 模型根据姿态以及投影矩阵就可以得到面部稠密人脸点。模型都是经过参数化后每一个点都有其相对应的语义信息,可以通过修改 3D 模型对图像进行相应的编辑美图手机上光效相机、个性化媄颜档案、3D 修容记忆、美颜立体提升、3D 姿态调整、App 萌拍动效、美妆相机万圣节妆容、彩妆、Avatar 驱动等功能都采用了该项技术。
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。