转自:blog.csdn.net/stdcoutzyx/article/details/46776415

DeepFace基本框架

人脸识别的基本流程是:

detect -> aligh -> represent -> classify

人脸对齐流程

分为如下几步:

a. 人脸检测,使用6个基点
b. 二维剪切,将人脸部分裁剪出来
c. 67个基点,然后Delaunay三角化,在轮廓处添加三角形来避免不连续
d. 将三角化后的人脸转换成3D形状
e. 三角化后的人脸变为有深度的3D三角网
f. 将三角网做偏转,使人脸的正面朝前。
g. 最后放正的人脸
h. 一个新角度的人脸(在论文中没有用到)

总体上说,这一步的作用就是使用3D模型来将人脸对齐,从而使CNN发挥最大的效果。

人脸表示

经过3D对齐以后,形成的图像都是152×152的图像,输入到上述网络结构中,该结构的参数如下:

  • Conv:32个11×11×3的卷积核
  • max-pooling: 3×3, stride=2
  • Conv: 16个9×9的卷积核
  • Local-Conv: 16个9×9的卷积核,Local的意思是卷积核的参数不共享
  • Local-Conv: 16个7×7的卷积核,参数不共享
  • Local-Conv: 16个5×5的卷积核,参数不共享
  • Fully-connected: 4096维
  • Softmax: 4030维

前三层的目的在于提取低层次的特征,比如简单的边和纹理。其中Max-pooling层使得卷积的输出对微小的偏移情况更加鲁棒。但没有用太多的Max-pooling层,因为太多的Max-pooling层会使得网络损失图像信息。

后面三层都是使用参数不共享的卷积核,之所以使用参数不共享,有如下原因:

  • 对齐的人脸图片中,不同的区域会有不同的统计特征,卷积的局部稳定性假设并不存在,所以使用相同的卷积核会导致信息的丢失
  • 不共享的卷积核并不增加抽取特征时的计算量,而会增加训练时的计算量
  • 使用不共享的卷积核,需要训练的参数量大大增加,因而需要很大的数据量,然而这个条件本文刚好满足。

全连接层将上一层的每个单元和本层的所有单元相连,用来捕捉人脸图像不同位置的特征之间的相关性。其中,第7层(4096-d)被用来表示人脸。

全连接层的输出可以用于Softmax的输入,Softmax层用于分类。

人脸表示归一化

对于输出的4096-d向量:

  • 先每一维进行归一化,即对于结果向量中的每一维,都要除以该维度在整个训练集上的最大值。
  • 每个向量进行L2归一化

分类

得到表示后,使用了多种方法进行分类:

  • 直接算内积
  • 加权的卡方距离
  • 使用Siamese网络结构

加权卡方距离计算公式如下:

其中,加权参数由线性SVM计算得到。

Siamese网络结构是成对进行训练,得到的特征表示再使用如下公式进行计算距离:

其中,参数alpha是训练得到。Siamese网络与FaceNet就很像了。

实验评估

数据集

  • Social Face Classification Dataset(SFC): 4.4M张人脸/4030人
  • LFW: 13323张人脸/5749人
    • restricted: 只有是/不是的标记
    • unrestricted:其他的训练对也可以拿到
    • unsupervised:不在LFW上训练
  • Youtube Face(YTF): 3425videos/1595人

Training on SFC

  • 训练使用的人数不同(1.5K/3.3K/4.4K)
  • 训练使用的照片数目不同(10%/20%/50%)
  • 使用的网络不同(去掉第三层/去掉第4、5层/去掉第3、4、5层)

Results on LFW

Results on YTF

总结

DeepFace与之后的方法的最大的不同点在于,DeepFace在训练神经网络前,使用了对齐方法。论文认为神经网络能够work的原因在于一旦人脸经过对齐后,人脸区域的特征就固定在某些像素上了,此时,可以用卷积神经网络来学习特征。

针对同样的问题,DeepID和FaceNet并没有对齐,DeepID的解决方案是将一个人脸切成很多部分,每个部分都训练一个模型,然后模型聚合。FaceNet则是没有考虑这一点,直接以数据量大和特殊的目标函数取胜。

在DeepFace论文中,只使用CNN提取到的特征,这点倒是开后面之先河,后面的DeepID、FaceNet全都是使用CNN提取特征了,再也不谈LBP了。

参考文献

[1]. Taigman Y, Yang M, Ranzato M A, et al. Deepface: Closing the gap to human-level performance in face verification[C]//Computer Vision and Pattern Recognition (CVPR), 2014 IEEE Conference on. IEEE, 2014: 1701-1708.

人脸识别之人脸验证(一)--Deepface相关推荐

  1. 人脸识别:人脸数据集

    日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) 人脸识别功能实现的原理介绍与算法介绍 人脸识别:人脸数据集 A ...

  2. Android 百度人脸识别、人脸采集、文字识别(身份证),人证对比

    Android 百度人脸识别.人脸采集.文字识别(身份证),人证对比 Android 拍照.图片压缩(兼容7.0) 由于公司的项目赶在 "某某打车" 事件期间,所以你懂得.老板说要 ...

  3. python人脸识别、人脸关键点检测、性别检测

    python人脸识别.人脸关键点检测.性别检测 文章目录 根据人脸预测年龄性别和情绪 (python + keras)(三) 一款入门级的人脸.视频.文字检测以及识别的项目. age-gender-e ...

  4. 调用远程摄像头进行人脸识别_人脸识别技术植入手机APP

    随着物联网技术的日益成熟,我们看到已经有很多APP用到了人脸识别技术,特别是金融和互联网领域的应用纷纷加入了人脸识别.表示,人脸识别技术基于人的脸部特征信息进行身份识别,为互联网金融等行业解决在线多维 ...

  5. android 人脸识别边框_android Arcface人脸识别框/人脸抓拍框/人脸追踪框

    为什么要改? 先来看看sdk demo中提供的人脸框样式,这个框看上去并不是非常美观(个人觉得) 再看看下面这个框是不是就要顺眼一点 怎么换? 先来看看原始的画法: @Override public ...

  6. Android自定义人脸识别框,android自定义虹软人脸识别框/人脸抓拍框/人脸追踪框...

    有一两个月没有更新博客了,最近一直在忙人脸识别的项目,先将项目中更改虹软人脸框的方法抽取出来,希望对大家有所帮助. 尊重原创,转载请注明出处: http://blog..net/qq137722697 ...

  7. android 人脸识别边框_android自定义Arcface人脸识别框/人脸抓拍框/人脸追踪框

    为什么要改? 先来看看sdk demo中提供的人脸框样式,这个框看上去并不是非常美观(个人觉得) 在这里插入图片描述 再看看下面这个框是不是就要顺眼一点 在这里插入图片描述 怎么换? 先来看看原始的画 ...

  8. Python | 人脸识别系统 — 人脸比对 代码部分

    本博客为人脸识别系统的人脸比对代码解释 人脸识别系统博客汇总:人脸识别系统-博客索引 项目GitHub地址:Su-Face-Recognition: A face recognition for us ...

  9. 人脸识别和人脸检测的区别

    网上很多帖子.博客在谈人脸识别.人脸检测,其实很多都弄混了,现在来纠正一下.(观点只代表作者本人) 人脸识别是对已知人脸进行分类的过程.就像我们看到其他人一样能够分辨出谁是自己的朋友谁不是.人脸识别通 ...

  10. 【Matlab人脸识别】人脸实时检测与跟踪【含GUI源码 673期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]人脸实时检测与跟踪[含GUI源码 673期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]孟逸凡,柳益君 ...

最新文章

  1. 读取nas_NAS不够快?那就上SSD享受如火箭般的体验吧!
  2. 编程软件python下载怎么读-使用最方便的计算机编程软件,Python下载使用完美教程...
  3. js面向对象程序设置——创建对象
  4. C++实现最小二乘法对y=exp(x)的二次拟合
  5. Django扩展xadmin后台管理
  6. dragloader.js帮助你在页面原生滚动下实现Pull Request操作
  7. js html form,JavaScript 表单
  8. js简单判断身份证合法性以及身份证生日合法性
  9. Mac 上无法使用netstat的-p参数
  10. 【Computer Organization笔记05】运算器基本功能,定点运算器,Am2901的组成与功能,VHDL硬件描述语言
  11. golang for循环时修改自身的值
  12. 计算机手抄报word文档,Word制作电脑小报怎么制作
  13. github清华大学计算机系课程攻略,GitHub 项目推荐|清华大学计算机系课程相关资源集合|内容丰富...
  14. 福师大 1309 计算机应用基础 在线作业答案二,福师大 1309 计算机应用基础 在线作业答案二...
  15. SQL注入-waf绕过
  16. 关于电子账户开户四五要素
  17. 模板方法模式--我们一起下饺子
  18. 编写程序实现乐手弹奏乐器。乐手可以弹奏不同的乐器从而发出不同的声音,可以弹奏的乐器包括二胡、钢琴和琵琶。
  19. js中 var a 和 a 的区别
  20. 浅聊古代————汉朝

热门文章

  1. 网站在线压力测试工具Load Impact
  2. python字典操作技巧_python的字典使用方法大全
  3. Xxl Job Helloworld
  4. Eclipse中使用Ant
  5. matlab如何创建table,创建和使用表 - MATLAB Simulink - MathWorks 中国
  6. 电压电流双闭环PFC单相PWM整流
  7. [Android][设置最小(大)宽高]
  8. 景区在线售票系统解决方案
  9. 约束多目标优化 约束多目标进化/演化算法入门论文文献推荐 大部分论文代码已开源
  10. 每日一练 JS30天挑战 数组操作实例