论文笔记:DeepFace: Closing the Gap to Human-Level Performance in Face Verification
2014 CVPR
Facebook AI研究院
简单介绍
- 人脸识别中,通常经过四个步骤,检测,对齐(校正),表示,分类
- 论文主要阐述了在对齐和表示这两个步骤上提出了新的方法,模型的表现超越了前人的工作
- 对齐方面主要使用了3D人脸模型来对齐人脸,表示方面使用了9层的一个CNN,其中使用了局部卷积
人脸对齐
已经存在一些人脸数据库的对齐版本(比如LFW-a),但是对齐人脸仍然是一件很困难的事,由于受到姿态(人脸的非平面性),非刚性表情等因素的影响。已经有很多方法成功用于人脸对齐,论文使用的方法是基于基准点的3D建模方法,把人脸转为3D的正脸。主要步骤为:
- 用LBP+SVR的方法检测出人脸的6个基准点,眼镜两个点,鼻子一个点,嘴巴三个点,如下图(a)
- 通过拟合一个对基准点的转换(缩放,旋转,平移)对图像进行裁剪,得到下图(b)
- 对图像定位67个基准点,并进行三角剖分,得到下图(c)
- 用一个3D人脸库USF Human-ID得到一个平均3D人脸模型(正脸),如图(d)
- 学习一个3D人脸模型和原2D人脸之间的映射P,并可视化三角块,如图(e)
- 通过相关的映射,把原2D人脸中的基准点转换成3D模型产生的基准点,得到如图(f)所示,最后的正脸就是图(g)。
人脸表示
- 如下图所示,训练了一个DNN来提取人脸图像的特征表示
- C1和C3表示卷积层,M2表示最大池化层,“32x11x11x3@142x142”表示使用32个大小为11x11x3的卷积核,输出feature map的大小为142x142。前三层主要提取低水平特征,其中最大池化可以使输出对微小的偏移更加鲁棒(可能人脸对齐歪了一些也没关系),因为最大池化会损失信息所有没有使用太多。
- L4,L5,L6是局部卷积层,对于feature map上每个位置,学到不同的卷积核(即一张feature map上的卷积核参数不共享),因为人脸的不同区域会有不同的统计特征,比如眼睛和眉毛之间的区域比鼻子和嘴巴之间的区域具有更高的区分能力。局部卷积层会导致更大的参数量,需要很大的数据量才能支撑的起。
- F7和F8是全连接层,用来捕捉(不同位置的)特征的相关性,比如眼睛的位置和形状,和嘴巴的位置和形状。F7层的输出提取出来作为人脸特征,和LBP特征对比。F8层的特征喂给softmax用于分类
- .对F7层的输出特征进行归一化(除以训练集上所有样本中的最大值),得到的特征向量值都为0到1之间。
验证度量
验证就是输入两个实例,判断它们是不是属于同一类。用监督学习来进行人脸验证被广泛研究。但是有监督学习中训练数据和测试数据的不一致会导致很差的泛化能力,如果将模型拟合在小的数据集则会大大减小它泛化到其它数据集的能力。无监督度量是直接对两个特征向量做内积,而有监督度量有卡方相似度和孪生网络。
卡方相似度
\[ \chi^2(f_1, f_2) = \sum_i w_i(f_1[i] - f_2 [i]) ^2 \ / \ (f_1[i] + f_2[i])\]
其中\(f_1\)和\(f_2\)为DeepFace特征表示,在前面的阶段“人脸表示”得到。\(w\)用一个线性SVM学到,SVM的变量为\((f_1[i] - f_2 [i]) ^2 \ / \ (f_1[i] + f_2[i])\)。孪生网络(Siamese network)
把上面那个网络,复制两份,两个人脸分别输入两个小网络,两个小网络共享参数,最后计算两个输出的特征向量的距离,用一个全连接层映射为一个逻辑单元(相同还是不相同)。网络的参数和上面那个一致,为了防止过拟合,训练的时候只训练最高两层。特征的度量公式为\(d(f_1, f_2) = \sum_i \alpha \left | \ f_1[i] - f_2[i] \ \right |\)。网络结构可参考下图所示。
实验-SFC数据集(Social Face Classification)
- 4.4M人脸,4030人,每人800到1200张人脸。用人脸表示的网络训练(多分类任务)。
- DF-1.5K,DF-3.3K,DF-4.4K表示人数(1.5M,3.3M,4.4M的人脸),发现从1.5K到3.3K错误提升不大,说明模型可以容纳3.3M的人脸。到4K时错误率上升到了8.74%,可以使用更多的人脸(错误率升的不大)。
- DF-10%,20%,50%表现人脸数量比,10%的时候错误率为20.7%,表明数据集太少,过拟合了。
- sub1表示砍掉C3层,sub2表示砍掉L4和L5,sub3表示这三层都砍了。由结果可以看出网络深度的必要性。
实验-LFW数据集(Labeled Faces in the Wild database)
- 13,323网页照片,5,749个名人。将其分为6000个人脸对(10份这样的6000人脸对)
- DeepFace-single,像SFC一样用网络训练多分类任务
- unsupervised表示使用无监督度量,直接对两个特征向量内积,这个时候的表现已经和之前最好的表现差不多了。
- restricted表示训练时只能获取相同或不同的标签,这里DeepFace-single使用了卡方相似度,效果提升到97%
- DeepFace-ensemble,训练多个网络(不同类型的输入,3D对齐RGB;灰度图像加上梯度大小和方向;2D对齐RGB)做集成,效果再次提升。
- unrestricted表示训练时可以获得额外的训练对,允许加入更多的训练对,效果再次提升。
实验-YTF数据集(YouTube Faces)
- 3,425个视频,1,595个人。将其分为5,000个视频对(10分这样的视频对)
- 这里DeepFace-single使用了卡方相似度,可以看到表现超越了之前的模型
总结
- DeepFace是CNN用于人脸识别的开山之作,主要在人脸对齐和人脸表示方面提出了新方法
- 在人脸对齐方面使用3D模型来进行对齐
- 然后把对齐后的人脸送入到一个9层的网络中训练,模型的表现超越了前人的工作
论文笔记:DeepFace: Closing the Gap to Human-Level Performance in Face Verification的更多相关文章
- (转载)经典计算机视觉论文笔记——DeepFace\DeepID\DeepID2\DeepID3\FaceNet\VGGFace汇总
1. DeepFace:Closing the Gap to Human-Level Performance in Face Verification 最早将深度学习用于人脸验证的开创性工作.Face ...
- 基于3D卷积神经网络的人体行为理解(论文笔记)(转)
基于3D卷积神经网络的人体行为理解(论文笔记) zouxy09@qq.com http://blog.csdn.net/zouxy09 最近看Deep Learning的论文,看到这篇论文:3D Co ...
- Spectral Norm Regularization for Improving the Generalizability of Deep Learning论文笔记
Spectral Norm Regularization for Improving the Generalizability of Deep Learning论文笔记 2018年12月03日 00: ...
- 笔记:Bridging the Gap Between Relevance Matching and Semantic Matching for Short Text Similarity Modeling
笔记:Bridging the Gap Between Relevance Matching and Semantic Matching for Short Text Similarity Model ...
- 论文笔记之:Dueling Network Architectures for Deep Reinforcement Learning
Dueling Network Architectures for Deep Reinforcement Learning ICML 2016 Best Paper 摘要:本文的贡献点主要是在 DQN ...
- Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现(转)
Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现 zouxy09@qq.com http://blog.csdn.net/zouxy09 自己平时看了一些论文, ...
- 论文笔记之:Visual Tracking with Fully Convolutional Networks
论文笔记之:Visual Tracking with Fully Convolutional Networks ICCV 2015 CUHK 本文利用 FCN 来做跟踪问题,但开篇就提到并非将其看做 ...
- Deep Learning论文笔记之(八)Deep Learning最新综述
Deep Learning论文笔记之(八)Deep Learning最新综述 zouxy09@qq.com http://blog.csdn.net/zouxy09 自己平时看了一些论文,但老感觉看完 ...
- Twitter 新一代流处理利器——Heron 论文笔记之Heron架构
Twitter 新一代流处理利器--Heron 论文笔记之Heron架构 标签(空格分隔): Streaming-process realtime-process Heron Architecture ...
随机推荐
- linux下安装perl
1.在官网 http://www.perl.org/get.html 下载perl安装包 2.上传服务器并解压 3../Configure -des -Dprefix=安装目录 4.make&am ...
- App Store 加急审核解析
什么是加急审核 首先,提交二进制文件到 App Store,是要交给 App Store Review 团队去审核的.下面这句话是我从他们那边拿到的官方数据: On average, 50 perce ...
- 【2008-2009 ICPC NEERC D】Deposits(暴力)
题目链接 题意: 给你n个数a[i],m个数b[i],求出有几对数满足a[i]能整除b[i]. 思路: 直接暴力,先将第一组数存入a数组,第二组数存入b数组,然后在第二组数中遍历它整数倍的数(在10^ ...
- activemq的高级特性:集群实战
高级特性实战需求 当消费端是多个集群,集群A又包含多个服务. 当每个集群都要接受相同的一批消息,而集群内的每个服务都去分摊消息. 解决办法一:级联 增加一个中转者.但是不是特别的优化,而且性能也不是特 ...
- 在js中获取页面元素的属性值时,弱类型导致的诡异事件踩坑记录,
前几天写一个js的时候遇到一个非常诡异的事情,这个问题是这样的,我要获取一个页面的DOM元素的val值,判断这个值是否比某个变量大,这个需求原先数字最大也就是10,现在要改了,可能会更多,这个时候我发 ...
- docker 入门 (二)基本操作
这一篇讲docker的基本操作. 请自行安装docker到自己的电脑上. 镜像的获取 要获取镜像,最简单的当然是从仓库去获取,docker的官方网站很不好练,其他的可选项有docker中国官网,阿里镜 ...
- Python中级 —— 02函数式编程
函数式编程 函数是Python内建支持的一种封装,而函数式编程通俗说来就是把函数本身作为参数传入另一个函数,允许返回一个函数. 函数名其实也是变量,也可以被赋值.如果函数名被赋值为其他值,则不再指向原 ...
- Shell学习——子shell操作记录转储
概述 主要介绍子shell历史操作记录的保存以及解析,比如python, scala等,用于(准)实时监控用户行为. 背景 一级shell的历史操作记录已由系统实现,当用户从开始登录shell(这里指 ...
- 执行Go程序的三种方式及Go语言关键字
执行 Go 程序的三种方式及 Go 语言关键字 执行 Go 程序的三种方式 一.使用 go run 命令 二.使用 go build 命令 Step1. 对 go 源码源文件执行 go build 命 ...
- 生成并调用so动态库
本文更新于2019-01-03. 生成库 头文件fn.h如下: #ifndef __FN_H__ #define __FN_H__ #ifdef __cplusplus extern "C& ...