人脸识别之人脸验证(一)--Deepface
转自: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相关推荐
- 人脸识别:人脸数据集
日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) 人脸识别功能实现的原理介绍与算法介绍 人脸识别:人脸数据集 A ...
- Android 百度人脸识别、人脸采集、文字识别(身份证),人证对比
Android 百度人脸识别.人脸采集.文字识别(身份证),人证对比 Android 拍照.图片压缩(兼容7.0) 由于公司的项目赶在 "某某打车" 事件期间,所以你懂得.老板说要 ...
- python人脸识别、人脸关键点检测、性别检测
python人脸识别.人脸关键点检测.性别检测 文章目录 根据人脸预测年龄性别和情绪 (python + keras)(三) 一款入门级的人脸.视频.文字检测以及识别的项目. age-gender-e ...
- 调用远程摄像头进行人脸识别_人脸识别技术植入手机APP
随着物联网技术的日益成熟,我们看到已经有很多APP用到了人脸识别技术,特别是金融和互联网领域的应用纷纷加入了人脸识别.表示,人脸识别技术基于人的脸部特征信息进行身份识别,为互联网金融等行业解决在线多维 ...
- android 人脸识别边框_android Arcface人脸识别框/人脸抓拍框/人脸追踪框
为什么要改? 先来看看sdk demo中提供的人脸框样式,这个框看上去并不是非常美观(个人觉得) 再看看下面这个框是不是就要顺眼一点 怎么换? 先来看看原始的画法: @Override public ...
- Android自定义人脸识别框,android自定义虹软人脸识别框/人脸抓拍框/人脸追踪框...
有一两个月没有更新博客了,最近一直在忙人脸识别的项目,先将项目中更改虹软人脸框的方法抽取出来,希望对大家有所帮助. 尊重原创,转载请注明出处: http://blog..net/qq137722697 ...
- android 人脸识别边框_android自定义Arcface人脸识别框/人脸抓拍框/人脸追踪框
为什么要改? 先来看看sdk demo中提供的人脸框样式,这个框看上去并不是非常美观(个人觉得) 在这里插入图片描述 再看看下面这个框是不是就要顺眼一点 在这里插入图片描述 怎么换? 先来看看原始的画 ...
- Python | 人脸识别系统 — 人脸比对 代码部分
本博客为人脸识别系统的人脸比对代码解释 人脸识别系统博客汇总:人脸识别系统-博客索引 项目GitHub地址:Su-Face-Recognition: A face recognition for us ...
- 人脸识别和人脸检测的区别
网上很多帖子.博客在谈人脸识别.人脸检测,其实很多都弄混了,现在来纠正一下.(观点只代表作者本人) 人脸识别是对已知人脸进行分类的过程.就像我们看到其他人一样能够分辨出谁是自己的朋友谁不是.人脸识别通 ...
- 【Matlab人脸识别】人脸实时检测与跟踪【含GUI源码 673期】
一.代码运行视频(哔哩哔哩) [Matlab人脸识别]人脸实时检测与跟踪[含GUI源码 673期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]孟逸凡,柳益君 ...
最新文章
- 读取nas_NAS不够快?那就上SSD享受如火箭般的体验吧!
- 编程软件python下载怎么读-使用最方便的计算机编程软件,Python下载使用完美教程...
- js面向对象程序设置——创建对象
- C++实现最小二乘法对y=exp(x)的二次拟合
- Django扩展xadmin后台管理
- dragloader.js帮助你在页面原生滚动下实现Pull Request操作
- js html form,JavaScript 表单
- js简单判断身份证合法性以及身份证生日合法性
- Mac 上无法使用netstat的-p参数
- 【Computer Organization笔记05】运算器基本功能,定点运算器,Am2901的组成与功能,VHDL硬件描述语言
- golang for循环时修改自身的值
- 计算机手抄报word文档,Word制作电脑小报怎么制作
- github清华大学计算机系课程攻略,GitHub 项目推荐|清华大学计算机系课程相关资源集合|内容丰富...
- 福师大 1309 计算机应用基础 在线作业答案二,福师大 1309 计算机应用基础 在线作业答案二...
- SQL注入-waf绕过
- 关于电子账户开户四五要素
- 模板方法模式--我们一起下饺子
- 编写程序实现乐手弹奏乐器。乐手可以弹奏不同的乐器从而发出不同的声音,可以弹奏的乐器包括二胡、钢琴和琵琶。
- js中 var a 和 a 的区别
- 浅聊古代————汉朝
热门文章
- 网站在线压力测试工具Load Impact
- python字典操作技巧_python的字典使用方法大全
- Xxl Job Helloworld
- Eclipse中使用Ant
- matlab如何创建table,创建和使用表
- MATLAB Simulink
- MathWorks 中国
- 电压电流双闭环PFC单相PWM整流
- [Android][设置最小(大)宽高]
- 景区在线售票系统解决方案
- 约束多目标优化 约束多目标进化/演化算法入门论文文献推荐 大部分论文代码已开源
- 每日一练 JS30天挑战 数组操作实例