深度学习在人脸识别中的应用

人脸识别的过程包括:

  1. 人脸检测
  2. 人脸对齐
  3. 特征提取(在数学上,实质上是:空间变换
  4. 特征度量

其中,特征提取与度量,是人脸识别问题中的关键问题,也是相关研究的难点之一。

传统方法在人脸识别中的弱点

传统人脸识别方法,主要利用了手工特征对面部信息进行归纳提取,将人脸图像变换到新的空间进行辨识比对。

而实际场景中人脸的多样性(妆容、光照、角度、配饰、表情、年龄变化等)信息,导致了手工特征无法稳健地获取人脸识别的特征。

对此,传统方法的解决方案多为对图像进行预处理,包括去噪、白平衡、人脸对齐等等,但由于特征的表达能力较弱,因此性能较为受限。

人脸识别在深度学习中是一个什么问题?

首先,CNN的经典模型,如Resnet,VGG等,是一个典型的分类模型。

例如,手写数字识别问题中,共60000张训练图像,和10个类别。

用这些图像,将模型训练为一个十分类的问题。

然而,这种模型适合用于人脸识别吗?

人脸识别在分类问题中的局限性

在实际场景中,人脸识别往往不能作为一个分类问题看待。

其中主要原因是,我们很难为每个人都采集足够多的训练图像作为训练(可以用视频采集[1])

而且,即便我们为每个人都采集了大量的训练图像,也很难训练一个大规模的分类模型--因为类别太多了,特征空间太拥挤。

以CelebA为例,该数据集和mnist的对比如下

数据集 mnist CelebA
类别 10 10,177
单类图像数量 6,000
单类图像数量最大 6,000 73
单类图像数量最小 6,000 2

显然,这样的数据集不足以支撑我们用分类模型训练一个分类器。

实际场景中的人脸识别问题

实际场景中的人脸识别,通常有两个场景

  1. 人脸验证, 1v1,  手机解锁
  2. 人脸识别, 1vN,  打卡签到

无论哪个场景,都需要进行一个步骤,即人脸的两两匹配。

因此,归根结底,人脸识别都是一个特征匹配的问题

而我们需要准确的提取人脸图像的特征,令其类内距离尽可能地小,类间距离尽可能地大

问题在于:在无法充分训练CNN的前提下,如何利用它得到一个精确的特征提取器?

人脸识别在深度学习中的第一个里程碑--DeepFace[2]

deepface是2014年facebook出品,首次在人脸识别领域中取得了超越人类的性能。

模型结构

该工作具有典型的早期CNN的研究风格,采用分类的思路来训练模型

使用的数据集为SFC(social face classification),共440万张图像,4030个类别,每个人都有800至1200张图像。

这样的数据集足够训练一个CNN模型(一百万级参数)

人脸对齐

除了训练模型之外,他还采用了人脸对齐的方案,具体过程如下:

Step1. 人脸检测

采用LBP+SVR来检测出人脸。其中,SVR是一种回归算法,通过LBP特征的输入,来训练一个SVR模型,用于估计人脸检测结果。

其中SVR的原理与SVM大致相同,优化思想都是离超平面最近的点到该超平面的距离最大。

不同的在于,SVR是一个回归模型,优化目标额外增加了超平面与数据之间的误差最小

Step2. 人脸对齐

  • 迭代6个点(2个眼镜,1个鼻子,3个嘴巴)

先对上述求得的六个基准点进行迭代,找到精确的六个点

(当迭代后与迭代前点的差距小于某个阈值时,停止迭代)

  • 找到67个点

使用第二个SVR,定位出人脸的67个基准点

  • 基于67个点,进行Delaunay三角化进行编号

具体来说,给定一个点集,Delaunay三角剖分算法会生成一个相应的三角形网格,其中每个三角形的外接圆内不包含任何点。

技术分享:Delaunay三角剖分算法介绍 - 知乎一.什么是Delaunay三角剖分从事数值计算相关领域的读者,相信或多或少都听说过“三角剖分”这个概念。在诸如有限元仿真,光线追踪渲染等计算当中,都需要把几何模型转化为三角网格数据,即“三角网格生成”。在这…https://zhuanlan.zhihu.com/p/459884570

  • 人脸3d映射

编号后,通过一个平均3d人脸,得到一个当前人脸对于3D人脸的映射,并根据三角剖分获得3d人脸三角网

  • 角度偏转

将3d人脸三角网偏转至正面,以获得正向人脸。最终降维到2d空间,得到人脸正视图。

人脸验证

针对人脸验证场景,输入两个实例,判断他们是否为同一个人。

其中,采用无监督的方式,就可以直接对提取到的特征做内积(cos)。

阈值通常设置大一点(接近于1),因为人脸检测数据分布不平衡,负例远远大于正例(假阳性大)

这种方法也是CNN早期作为特征提取器使用的主要方式之一。

而有监督的方式则是可采用训练的方式,将特征映射到新的空间,让类间距离变大,类内距离变小

具体论文中,提到了两种方式:

  1. 孪生网络

上述模型两路参数共享,将输出的特征映射为一个逻辑单元

实验结果

现代人脸识别研究的主要趋势

现代人脸识别问题,主要的核心在于如何将不同的人脸,在特征空间中有效区分开来。

例如,利用siamese network,[学习到不同类的区别]  就是一种典型的度量学习策略。

这种度量学习,通常采用对比损失作为损失函数,其目标是判断输入的两个实例,是/不是一类。

虽然这种方式能够将类间距离加大,但对于类内距离的减小,作用有限。

对此,人们又提出了三元组损失

yij = 1(i,j同一类)-->d尽可能小;反之,尽可能大

三元组损失函数可以在加大类间距离的同时,拉近类内距离。因此,获得了较好的结果[3]。

在google提出的FaceNet中,人脸识别的准确率在LFW上,达到了98.87/%, 如果使用了额外的对齐手段,准确率还能继续提升一个点。

然而,加入三元组损失的问题在于模型训练成本增加

解决方案包括:先用常规训练得到基本模型,然后再用三元组进行fine tuning,或者是改变simple的方式,把一些较难辨识的类别特殊处理等等。

备注:deepface经过多年迭代,已经可以实现多种人脸相关的内容,并且封装成了成熟的工具。地址https://github.com/serengil/deepface

另一种优化人脸识别的思路--SphereFace

人脸识别模型的本质是,令类内最大距离小于类间最小距离

之前的思路都是采用各种优化训练方法,比如siamese,tripplet等。

而sphereface则采用了一种不同的思路:“通过更加严苛的分类损失,来得到更加泛化的模型,从而获取更加discrimintive的embeding”

A-softmax

sphereface认为,训练人脸的最终目的是要令类内距离小于与其他类间的距离。

而已有模型不能做到的原因之一,是因为softmax分类能力不够强力。

也就是说,他不能将同类样本充分聚合,只是粗略地用一个平面划分样本

softmax回顾

上述过程中,通过一个分界平面将两类数据区分开来。

上述的softmax损失中,确定的分类平面并未对类间距离进行约束,因此,达不到预期效果。

此图中,是引入了角度信息的softmax,但并未对特征空间进行归一化。给定一个角度,以及偏置b,就可以得到一个分界平面

此图中,通过对特征空间进行归一化,可以得到一个分界平面。

相比较于传统的softmax,这个方法能够将不同类的数据较好的分开。

但是,依然没有达到,类间距离大于全部类内距离。

拓展 m的取值对于训练的难度和最终的效果至关重要。

当m较小的时候,与普通方法无异;

当m较大的时候,每个类别的内部数据被压缩的很小。但由于噪声误差的存在,导致训练难以进行。

论文通过严格的数学证明,得到结论为:

  • 在二分类下,当 m≥2+根号3 时,类间的距离大于类内距离
  • 在多分类的情况下,m≥3 能保证类间的距离大与类内的距离

论文实际测试取的4.

关于A-softmax的直观解释:

每个样本点都是在球面上的映射;

训练时,每次迭代都是一个“鱼找鱼虾找虾”的场景:即同类会慢慢的聚集,从而不同类也会慢慢离散;

然而,如果不对类间距离加以特殊限制,则会导致聚集不够彻底,弥散的类别存在相互重叠的情况;

因此,m可以认为是一个控制聚集程度的参数:参数越大,导致聚集越彻底,因此和其他类的间隙也就越大。

后续的其他工作思路

​​

人脸识别中的深度学习相关推荐

  1. 苹果叶片病害识别中的深度学习研究

    苹果叶片病害识别中的深度学习研究 1.研究内容 基于DenseNet-121深度卷积网络,提出了回归.多标签分类和聚焦损失函数3种苹果叶片病害识别方法. 2.数据集介绍 用于识别的图像数据集来源于Ai ...

  2. 【论文学习】人脸识别——DeepFace:深度学习人脸识别开山之作

    大家好,从今天开始就要学习人脸识别相关的知识啦,以后也会分享这一类的文章.人脸识别,必不可少的是Facebook AI研究院的这篇. 论文:DeepFace: Closing the Gap to H ...

  3. 07_人脸识别实战(深度学习)-使用模型进行人脸图片对比

    经过上一篇博客,我们已经获得了人脸分类的模型,这次我们只需要简单的调整,就可以获得提取人脸特征的模型,然后对比人脸之间的特征,就可以知道2张图片是否是同一个人了 代码步骤如下 从"olive ...

  4. 深度学习在人脸识别中的应用 —— 优图祖母模型的「进化」

    原作者: 腾讯优图 | 来自: 机器之心 序言--「弱弱」的人工智能 说到人工智能(Artificial Intelligence, AI)人们总是很容易和全知.全能这样的词联系起来.大量关于人工智能 ...

  5. 深度学习在人脸识别中的应用 ——优图祖母模型的“进化”

    序言--"弱弱"的人工智能 说到人工智能(Artificial Intelligence, AI)人们总是很容易和全知.全能这样的词联系起来.大量关于AI的科幻电影更给人工智能蒙上 ...

  6. 深度学习在人脸识别中的应用——优图祖母模型的“进化”

    雷锋网按:本文转自腾讯优图,着重介绍了深度学习在人脸识别中的应用,首先回顾了人脸识别的历史,接着介绍优图在人脸识别中的优势,及其"进化过程". 说到人工智能(Artificial  ...

  7. 【CVPR 2018】腾讯AI lab提出深度人脸识别中的大间隔余弦损失

    论文导读] 深度卷积神经网络(DCNN)在人脸识别中已经取得了巨大的进展,通常的人脸识别的核心任务都包括人脸验证与人脸识别,涉及到特征判别.很多模型都是使用Softmax损失函数去监督模型的训练,但是 ...

  8. 在浏览器中进行深度学习:TensorFlow.js (四)用基本模型对MNIST数据进行识别

    2019独角兽企业重金招聘Python工程师标准>>> 在了解了TensorflowJS的一些基本模型的后,大家会问,这究竟有什么用呢?我们就用深度学习中被广泛使用的MINST数据集 ...

  9. 图像识别中的深度学习【香港中文大学王晓刚】

    深度学习发展历史 深度学习是近十年来人工智能领域取得的重要突破.它在语音识别.自然语言处理.计算机视觉.图像与视频分析.多媒体等诸多领域的应用取得了巨大成功.现有的深度学习模型属于神经网络.神经网络的 ...

最新文章

  1. 数据不平衡的解决办法
  2. jQuery 2.0.3 源码分析 Deferred(最细的实现剖析,带图)
  3. C#程序设计笔记(第九章)
  4. typedef 深入剖析
  5. LeetCode(集合)队列和栈的相互实现 golang
  6. dj电商-数据库的远程连接
  7. Linux/Centos源码安装python3任意版本
  8. 初识设计模式(单例模式)
  9. python使用系统命令连接数据库_windows下命令行方式完成MySQL配置及Python连接数据库...
  10. 【equals与==比较】String的两种拼接
  11. Opencv中rectangle函数与Rect函数的用法
  12. 软件测试睡眠原理,测一测你的睡眠质量
  13. 【Windows XP】下载地址及产品密钥
  14. 全球与中国泄漏吸收枕头市场深度研究分析报告
  15. BEC listen and translation exercise 39
  16. 逆水寒怎么找回服务器之前的角色,逆水寒12月27日服务器合并公告 逆水寒合服问题解答一览...
  17. csu1671 经营小卖部(DP 完全背包 好题)
  18. 网易互娱游戏研发面经及答案
  19. beego之bee 工具简介
  20. 构建优秀产品信息架构的三要素

热门文章

  1. 博睿数据携手新浪财经发布《2021年信用卡行业发展报告》
  2. 求个大lao帮忙写个c#窗体小项目,可以有偿
  3. SCP命令---讲解
  4. 【android应用】常用色彩模式ARGB详解
  5. 云栖现场|为破解纺织业“卡脖子”难题 广东携阿里云汇聚全球AI人才联合攻关
  6. 查找1-查找算法知识图谱
  7. mindspore-使用modelzoo中的yolov4,在运行时报错
  8. 最新的创业大赛报名排名榜单|创成汇平台
  9. 教你如何复制起点小说
  10. unigui中创建freeform并被fram调用