专栏首页人工智能LeadAI基于深度卷积神经网络进行人脸识别的原理是什么?

基于深度卷积神经网络进行人脸识别的原理是什么?

我这里简单讲下OpenFace中实现人脸识别的pipeline,这个pipeline可以看做是使用深度卷积网络处理人脸问题的一个基本框架,很有学习价值。

它的结构如下图所示:

1 Input Image -> Detect

输入:原始的可能含有人脸的图像。

输出:人脸位置的bounding box。

这一步一般我们称之为“人脸检测”(Face Detection),在OpenFace中,使用的是dlib、OpenCV现有的人脸检测方法。此方法与深度学习无关,使用的特征是传统计算机视觉中的方法(一般是Hog、Haar等特征)。

2 Detect -> Transform -> Crop

输入:原始图像 + 人脸位置bounding box

输出:“校准”过的只含有人脸的图像

对于输入的原始图像 + bounding box,这一步要做的事情就是要检测人脸中的关键点,然后根据这些关键点对人脸做对齐校准。所谓关键点,就是下图所示的绿色的点,通常是眼角的位置、鼻子的位置、脸的轮廓点等等。有了这些关键点后,我们就可以把人脸“校准”,或者说是“对齐”。解释就是原先人脸可能比较歪,这里根据关键点,使用仿射变换将人脸统一“摆正”,尽量去消除姿势不同带来的误差。这一步我们一般叫Face Alignment。

在OpenFace中,这一步同样使用的是传统方法,特点是比较快,对应的论文是:https://pdfs.semanticscholar.org/d78b/6a5b0dcaa81b1faea5fb0000045a62513567.pdf

3

Crop -> Representation

输入:校准后的单张人脸图像

输出:一个向量表示。

这一步就是使用深度卷积网络,将输入的人脸图像,转换成一个向量的表示。在OpenFace中使用的向量是128x1的,也就是一个128维的向量。

我们可以先看一下VGG16的模型:

VGG16是深度学习中一个比较简单的基本模型。输入神经网络的是图像,经过一系列卷积后,全连接分类得到类别概率。

在通常的图像应用中,我们可以去掉全连接层,用计算的特征(一般就是卷积层的最后一层,e.g. 图中的conv5_3)来当作提取的特征进行计算。但如果对人脸识别问题同样采用这样的方法,即,使用卷积层最后一层做为人脸的“向量表示”,效果其实是不好的。如何改进?我们之后再谈,这里先谈谈我们希望这种人脸的“向量表示”应该具有哪些性质。

在理想的状况下,我们希望“向量表示”之间的距离就可以直接反映人脸的相似度:

  • 对于同一个人的人脸图像,对应的向量的欧几里得距离应该比较小。
  • 对于不同人的人脸图像,对应的向量之间的欧几里得距离应该比较大。

这种表示实际上就可以看做某种“embedding”。在原始的VGG16模型中,我们使用的是softmax损失,没有对每一类的向量表示之间的距离做出要求。所以不能直接用作人脸表示。

举个例子,使用CNN对MNIST进行分类,我们设计一个特殊的卷积网络,让最后一层的向量变为2维,此时可以画出每一类对应的2维向量表示的图(图中一种颜色对应一种类别):

上图是我们直接使用softmax训练得到的结果,它就不符合我们希望特征具有的特点:

  • 我们希望同一类对应的向量表示尽可能接近。但这里同一类(如紫色),可能具有很大的类间距离。
  • 我们希望不同类对应的向量应该尽可能远。但在图中靠中心的位置,各个类别的距离都很近。

那么训练人脸特征表示的正确姿势是什么?其实有很多种方法。一种方法就是使用“center loss”。centor loss实际上是在softmax的loss上再加入一个损失,这个损失对每一类规定了一个“中心”点,每一类的特征应该离这个中心点比较近,而不同类的中心点离的比较远。加入center loss后,训练出的特征大致长这样:

这样的特征表示就比较符合我们的要求了。center loss的原始论文在这里:http://ydwen.github.io/papers/WenECCV16.pdf 上面这两幅图同样是从这篇论文中截下来的。

顺带一提,除了center loss外。学习人脸特征表示的方法还有很多,如triplet loss(论文地址:https://github.com/seetaface/SeetaFaceEngine 。triplet loss直接这样的用三元组(A的图像1,A的图像2,B的图像)来训练网络。去掉了最后的分类层,强迫神经网络对相同的人脸图像(三元组中的同一人A)建立统一的表达。

4

实际应用

输入:人脸的向量表示。

有了人脸的向量表示后,剩下的问题就非常简单了。因为这种表示具有相同人对应的向量的距离小,不同人对应的向量距离大的特点。接下来一般的应用有以下几类:

  • 人脸验证(Face Identification)。就是检测A、B是否是属于同一个人。只需要计算向量之间的距离,设定合适的报警阈值(threshold)即可。
  • 人脸识别(Face Recognition)。这个应用是最多的,给定一张图片,检测数据库中与之最相似的人脸。显然可以被转换为一个求距离的最近邻问题。
  • 人脸聚类(Face Clustering)。在数据库中对人脸进行聚类,直接K-Means即可。

5

后记

以上给大家介绍了OpenFace中处理人脸问题的pipeline。需要特别指出的是,人脸相关的问题是一个比较大的方向,一篇文章显然是说不清楚的,这里只是基于OpenFace,对比较重要的方法还有名词做了一个解释。在OpenFace中,为了速度的考虑,提取人脸特征之前的Face Detection和Face Alignment就是使用的传统方法。实际上也可以换用精度更高的深度学习相关方法,比如在中科院山世光老师开源的人脸识别引擎seetaface/SeetaFaceEngine中,Face Alignment使用就是一个基于autoencoder网络的方法。另外,学习人脸特征同样有适合不同场景的不同方法,这些都是要进一步学习的。

本文分享自微信公众号 - 人工智能LeadAI(atleadai),作者:人工智能LeadAI

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-08-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • OpenCV人脸识别之一:数据收集和预处理

    本系列人脸识别文章用的是opencv2,最新版的opencv3.2的代码请参考文章: 《OpenCV之识别自己的脸——C++源码放送》; 《人脸识别源码运行指南...

    用户1332428
  • 配置深度学习主机与环境(TensorFlow+1080Ti) | 第四章 基于Anaconda的TensorFlow安装

    配置深度学习主机与环境(TensorFlow+1080Ti): 01 概念介绍 Anaconda Anaconda(https://www.continuu...

    用户1332428
  • OpenCV人脸识别之二:模型训练

    本系列人脸识别文章用的是opencv2,最新版的opencv3.2的代码请参考文章: OpenCV之识别自己的脸——C++源码放送(请在上一篇文章末尾查看) 在...

    用户1332428
  • 人脸识别(二)——训练分类器

    上一篇简单整理了下人脸识别的相关基础知识,这一篇将着重介绍利用pencv(2.4.9)已有的模型进行分类器训练。 一、关于ORL人脸数据库 ORL是一个40个...

    小小詹同学
  • [深度应用]·基于卷积神经网络人脸识别的原理及应用开发(转)

    这里简单讲下OpenFace中实现人脸识别的pipeline,这个pipeline可以看做是使用深度卷积网络处理人脸问题的一个基本框架,很有学习价值,它的结构如...

    小宋是呢
  • 【杂谈】如果你想快速系统掌握计算机视觉大部分领域,学习人脸图像是唯一选择

    笔者是从传统图像算法开始进入计算机视觉行业的,那一批人基本上都是从人脸图像和文本图像开始学,而如今很多计算机视觉从业者却从来没有接触过人脸图像相关的算法,或许真...

    用户1508658
  • 【星球知识卡片】人脸属性编辑都有哪些核心知识点,如何长期进行学习

    大家好,欢迎来到我们的星球知识小卡片专栏,本期给大家分享人脸属性编辑的核心技术点。

    用户1508658
  • 浅出深度学习系列-说说“人脸识别”

    们生存的这个星球上,居住着70多亿人。每个人的面孔组成部分相同,它们之间的大体位置关系也是固定的,并且每张脸的大小差异也不大。然而,它们居然就形成了那么复杂的模...

    数据猿
  • Google最新最权威的未来人工智能技术之一:人脸领域

    首先祝大家七夕情人节愉快,能和喜欢的人度过浪漫的一天,也祝在科研的同学抽出时间陪伴你的伴侣,一起度过一年一次的中国情人节,若还处于单身的同学,希望你们不仅科研成...

    计算机视觉研究院
  • 不止面部识别,一切关于人脸AI的资源都能在这里下载

    人脸AI技术如今无处不在。不仅手机上有面部识别、换脸、美颜等应用,去年GAN在合成人脸图片上也取得了重大突破。

    量子位

扫码关注云+社区

领取腾讯云代金券