《Deep Learning Face Representation from Predicting 10000 Classes》论文解读


这篇论文来自香港中文大学汤晓鸥课题组,发表于CVPR2014,论文原文见:

http://www.ee.cuhk.edu.hk/~xgwang/papers/sunWTcvpr14.pdf

人脸验证(Face Verification)就是判断两个人脸是不是同一个人,一个常用的场景是判断身份证是不是本人。

概述

文章使用深度学习的方法来提取人脸高级特征(high-level features),这种特征被称为DeepID。DeepID特征是通过人脸分类任务学习得到的,这样的特征可以使用在人脸验证中,最终在LFW数据集上取得了97.45%的结果。

相关研究

之前的人脸验证任务主要的方法是使用过完备的(over-complete)低层次特征,结合浅层的机器学习模型进行的。过去的方法常常是将人脸提取出几万乃至几百万的特征,然后将特征进行降维,再计算两个特征的相似度。

人脸特征提取

本文使用卷积神经网络来提取人脸特征,特征提取框架如下图所示:

首先将每个人脸分成多个小块(patch),每个patch分别输入到卷积神经网络中。图中CNN里每层旁边的数字代表神经元的数量,最后一个隐层的输出叫做Deep hidden identity features(DeepID),DeepID特征为160维。特征提取的最后,把每个patch的DeepID特征连起来就构成了这张脸的特征。

DeepID

DeepID特征是在人脸识别(face identification,人脸身份认定)任务中训练得到的。人脸识别就是给定一张人脸,然后判断这张人脸属于谁,这个任务可以看成是分类模型,也就是给定一张脸,将它分类到n个身份中的一个。这个任务比人脸验证任务更有挑战性,因此人脸识别任务中学习到的特征可以更好地泛化到别的任务中。
文章使用CNN进行DeepID特征学习。CNN的结构如下图所示:

CNN的训练输入是人脸的某个patch,任务目标是将这个输入图片分类到某个具体的身份类别中。

CNN从左向右使用了4个卷积层,3个池化层。当patch是长方形时,输入尺寸为39*31*k,当patch是正方形时,输入尺寸为31*31*k。这里的k代表颜色通道,k=3代表彩色,k=1代表黑白。值得注意的是CNN最后一层DeepID层不仅和Convolutional layer 4直接相连,也和Max-pooling layer 3相连,作者将之称为Multi-scale ConvNets。这样做的原因是第四层神经元数量少,携带的信息比较少,使用第三层可以减少信息损失。这一步的具体做法是:先将Convolutional layer 4和Max-pooling layer 3这两层拉平(flatten),然后再将其和DeepID层全连接,经过ReLU激活函数后的输出就是DeepID特征。DeepID层后面接着Softmax层,将不同的DeepID特征分类到不同的身份类别中。至此,DeepID特征学习完毕。

Face patch

首先对人脸图片检测5个特征点(两个眼睛,鼻尖,两个嘴角),然后将人脸进行变换对齐。

在对齐的脸上生成10个区域,分别是5个全局区域和以5个特征点为中心的区域。对每个区域还要生成3种尺度,每种尺度有RGB和gray两种颜色,最终10个区域形成60个patch。

文章先使用60个patch训练60个CNN,每个CNN使用patch本身和patch的翻转生成两个160维的DeepID特征,每个人脸最终提取为160*2*60=19200维特征。

人脸验证

上一部分已经提取出了人脸的特征,现在需要做的是判断两张脸是不是同一个人。这篇文章使用了Joint Bayesian和Neural Network两种方法进行区分。

Joint Bayesian

联合贝叶斯在之前的人脸验证任务中取得了良好的效果。x1x_1x2x_2代表两张图片的特征,Joint Bayesian就是计算似然比:

r(x1,x2)=logP(x1,x2|HI)P(x1,x2|HE)

r(x_1,x_2)=\log \frac{P(x_1,x_2|H_I)}{P(x_1,x_2|H_E)}
更多Joint Bayesian可以参考论文《 Bayesian Face Revisited: A Joint Formulation》,也可以参考我的另一篇博客《 人脸验证:Joint Bayesian》。

Neural Network

文章还使用了NN进行人脸验证,将人脸验证任务变为一个分类问题。NN结构如图:

输入层是两张图片的DeepID特征,共640*60个输入,随后是一个局部连接层和全连接层,最后只有一个输出。这个输出使用了sigmoid激活函数,输出两张人脸的相似度。局部连接层只和第一层输入特征中的一个组相连接,用来学习局部关系并降低特征维度。后面的全链接层用来学习全局关系。输入的特征被分成60个组,每个组对应两张图片的同一个patch。每个patch要经过一次翻转,则每张图片每个patch生成160*2个特征,两张图片则为640个特征。所有的隐层在训练时需要使用dropout,而输入层不能使用dropout。高维特征的学习不使用dropout会导致梯度扩散(gradient diffusion)的问题。为解决这一问题,文章先将原始大网络拆成小网络进行训练。图中深色部分就代表一个这样的子网络,子网络的输入为原始输入的一个组。然后使用训练好的子网络的第一层权重初始化原来的网络,并在训练中这部分权重保持不变,通过训练调节第二层和第三层权重。

结果

为了训练这一模型,文章使用了CelebFaces库。CelebFaces库包含5436个人的87628张照片,平均每个人有16张图片。先随机选取80%的图片训练DeepID再使用剩下的20%训练人脸验证模型。在使用Joint Bayesian时,使用PCA将特征维数降低到150维。

Multi-scale ConvNets

CNN最后一层DeepID层不仅和Convolutional layer 4直接相连,也和Max-pooling layer 3相连,这一结构被称为Multi-scale ConvNets。

从上图看出,这一结构对结果有一定的提升。

Learning effective features

使用不同身份类别数量训练出来的模型结果如上图所示,可以看出分类类别越多,提取出来的DeepID特征越好。

Over-complete representation

将DeepID特征进行可视化。从图中可以看到相同人脸的DeepID相似度比较高,而不同人脸的差别比较大。

文章的后面作者还进行了一些其他的实验,不再一一道来。

总结

人脸验证任务的主要难点在于寻找到一种人脸特征提取方法,这种提取方法在同一个人的脸上相似而不同的人之间差别尽可能的大。在特征提取的基础上,人脸验证的任务可以看成一个分类模型。

人脸验证:DeepID相关推荐

  1. 人脸验证 DeepID 算法实践

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

  2. 人脸验证 DeepID 算法介绍及实战

    1.DeepID是什么? 2.DeepID的强大的两个因素是什么? 3.拿到图片数据后,本文做了那两件事情? 首先明确一个概念什么是DeepID? DeepID是人脸识别算法. ########### ...

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

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

  4. 人脸验证:DeepID(转)

    原文地址:http://blog.csdn.net/tinyzhao/article/details/53002441 <Deep Learning Face Representation fr ...

  5. 人脸识别之人脸验证(二)--DeepID

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

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

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

  7. 人脸验证:Joint Bayesian

    <Bayesian Face Revisited: A Joint Formulation>论文解读 这篇文章发表于ECCV2012,来自MSRA的孙剑组.论文原文见: http://ho ...

  8. 人脸验证:Lightened CNN

    <A Lightened CNN for Deep Face Representation>论文解读 本文来自中科院,原文地址为: https://arxiv.org/abs/1511.0 ...

  9. 快速人脸验证--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 ...

最新文章

  1. Postgresql 物理热备份 -- PITR 时间点恢复(Point In Time Recovery)
  2. JavaScript的运行模式
  3. python3 乱序函数 shuffle 简介
  4. Python编程基础:第八节 判断语句If Statements
  5. 微信小程序——收起和查看更多功能
  6. linux查看内存、CPU占用资源最多的进程
  7. 软考考后常见问题汇总
  8. 从用户反馈的可解释性提升推荐模型
  9. springMVC接收前端参数的方式
  10. ES6系列之Set Map
  11. OS- -文件系统(二)
  12. 模板:拉格朗日插值(多项式)
  13. leetcode1123. 最深叶节点的最近公共祖先(dfs)
  14. 边缘计算是流行词还是风口?开发者怎样选开源项目?
  15. js-事件处理(重点)
  16. macOS 下的数据库客户端工具
  17. VMware安装win7操作系统
  18. Pysyft学习笔记
  19. Matlab中FrechetDistance方法实现---比较两条曲线的相似性,并绘制曲线
  20. 【RDMA】infiniband网卡安装|ib网卡命令|ibdump 用法说明

热门文章

  1. 吉时利Keithley软件2600系列2601B|2602B|2604B|2606B NS-SourceMeter源表软件
  2. ENVI学习之0001
  3. revit2018注册表删除_如何完全卸载Revit
  4. 深入Windows开发--Preview and Thumbnail
  5. OSChina 周三乱弹 ——grath最近睡了一主播
  6. 怎么看区块链正规项目与否,区块链投资前你应知道这三点
  7. CPU与CPU散热器 杂项
  8. 程序员:为了提升自己的竞争力!哪些含金量高的证书可以考?
  9. 坚持终生学习--芒格的13条人生建议
  10. 2020年全球吸附分离材料行业现状、竞争格局与发展环境分析,各国政策扶持,市场空间大「图」