转自: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. 4.5 人脸验证与二分类-深度学习第四课《卷积神经网络》-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 4.4 Triplet 损失 回到目录 4.6 什么是神经风格转换? 人脸验证与二分类 (Face Verification and Binary Classificatio ...

  2. 人脸验证(三)--FaceNet

    转自:blog.csdn.net/stdcoutzyx/article/details/46687471 引入 随着深度学习的出现,CV领域突破很多,甚至掀起了一股CV界的创业浪潮,当次风口浪尖之时, ...

  3. 人脸验证与二分类(Face verification and binary classification)

    来源:Coursera吴恩达深度学习课程 听着五月天的<仓颉>,五月的每一天都是五月天. 三元组损失(Triplet loss)是一个学习人脸识别卷积网络参数的好方法,还有其他学习参数的方 ...

  4. 深度学习笔记(45) 人脸验证与二分类

    深度学习笔记(45) 人脸验证与二分类 1. 二分类问题 2. 逻辑回归单元的处理 3. 计算技巧 1. 二分类问题 深度学习笔记(44) Triplet 损失 的Triplet loss是一个学习人 ...

  5. 快速人脸验证--MobileFaceNets: Efficient CNNs for Accurate Real-time Face Verification on Mobile Devices

    MobileFaceNets: Efficient CNNs for Accurate Real-time Face Verification on Mobile Devices Face Verif ...

  6. 人脸验证 DeepID 算法实践

    人脸验证 DeepID 算法实践 4,610 次阅读 - 文章 作者:雨石  出处:雨石的博客 目前人脸验证算法可以说是DeepID最强,本文使用theano对DeepID进行实现.关于deepid的 ...

  7. CV《物体识别与检测4 - 人脸验证》

    本文是根据Andrew Ng的深度学习视频学习,自己总结的.这一系列先只学习关键技术和设计,具体的实例等下一期进行. 一:人脸验证 人脸识别包括人脸验证了人脸检测,人脸检测也属于物体检测范围,所以就不 ...

  8. 人脸验证(四)--CenterLoss

    有点纠结,实质上本文只是在深度学习框架下人脸识别损失函数的改进.但我还是把它归类到端到端了.出于个人原因. 转自:http://blog.csdn.net/yang_502/article/detai ...

  9. 人脸验证(图片/视频) tensorflow、pytorch框架、dlib库(face_recognition)和opencv库————附带详细步骤和代码,可实际运行

    文章目录 0 背景与结果 1 准备知识 2 tensorflow进行人脸识别(AlexNet.视频/图像) 3 pytorch进行人脸识别(fasterrcnn,图片) 4 dlib库(face_re ...

  10. 人脸验证(二)--DeepID

    转自:http://blog.csdn.net/stdcoutzyx/article/details/42091205 1. 问题引入及算法流程 DeepID所应用的领域是人脸识别的子领域--人脸验证 ...

最新文章

  1. 图论之拓扑排序 poj 2367 Genealogical tree
  2. 【剑指offer-Java版】45圆圈中最后剩下的数字
  3. oracle preparedstatement,【JDBC】java PreparedStatement操作oracle数据库
  4. 笔记本高分屏字体模糊_高色域+高分辨率轻薄本推荐,你需要2K屏笔记本电脑么?...
  5. C++构造函数/析构函数 设置成private的原因
  6. PHP数据库调用类调用实例
  7. 给图片添加水印效果图的函数(可以在图片上添加自己的版权和LOGO图片的水印) 【转载】...
  8. The run destination 设备名称 is not valid for Running the scheme '项目名称'.
  9. c语言计算器程序代码有优先级,C语言计算器小程序(源代码+实习报告).doc
  10. 冒险岛2计算机内存不足建议使用,冒险岛2游戏设置详解 低配电脑如何流畅运行冒险岛2...
  11. c++中文件打开失败
  12. 链路捆绑(名词注解)
  13. Windows7:修改系统注册表工具
  14. 【干货】Dialog的高冷用法
  15. 【PPT】2010/2013/2016实现在演示过程中拖拽图片/形状
  16. 正则表达式常用语法速查+一个简单使用案例
  17. 失业的程序员(七):梦想和胸襟
  18. Python深度学习与机器视觉(一)
  19. 三大统计软件:SAS、Stata与SPSS比较
  20. 了解.net框架 MonoRail

热门文章

  1. win10添加/关闭开机启动应用
  2. 机器学习入门(二):工具与框架的选择
  3. Android开发之AudioManager(音频管理器)详解
  4. Smali语法汇总(二)
  5. ios ffmpeg audio decode
  6. UE4之FString转换
  7. UE4之设置打包程序分辨率
  8. linux uwsgi 非root,ubuntu-除非root用户,否则uWSGI Emperor权限被拒...
  9. mysql怎么判断2个时间戳为同一天_php如何判断两个时间戳是一天
  10. springmvc06 静态资源