DeepID2——强大的人脸分类算法

Deep Learning Face Representation by Joint Identification-Verification

转载请注明:http://blog.csdn.net/stdcoutzyx/article/details/41497545

这篇文章是论文Deep Learning Face Representation by Joint Identification-Verification的笔记。

1. Main Contribution

这篇论文使用deep learning学习特征,使用联合贝叶斯模型作为分类器,选取七组特征分别训练分类器,得到的结果使用SVM进行组合,得到的最终模型在LFW(Labeled Face in the Wild)数据集上的人脸验证任务中,达到了99.15%的准确率,目前排名第一。

2. Basic Concepts and Ideas

Face Identification,人脸识别,将一个输入图像进行分类,类别集合会很大。

Face verification,人脸验证,对两个图像进行判断,确认是不是同一个人的图像。

论文的主要创新点就是利用deep learning学习图像特征,具体的创新点就是通过扩大类间距离和缩小类内距离。

3. Pipeline

论文提出的人脸识别算法流程如下:

首先,使用SDM算法抽取人脸上的21个标记,然后根据得到的标记对人脸进行对齐。通过变化位置、尺度、颜色通道,得到200个face patch,对每个face patch,使用该patch及其水平反转的图像进行特征学习。所以,一共需要200个深度卷积神经网络。

注:因为LFW是wild数据,不像AR数据集那样是对齐好的数据,所以需要通过SDM寻找landmark来分patch;SDM算法是CVPR2013年提取的。

第二步,学习特征,论文提出一种学习特征的卷积神经网络框架,称之为DeepID2。构建200个DeepID2来学习上一步得到的patch。每个DeepID2都将输入图像表示成一个160维的向量。

第三步,对每张图像而言,经过200个DeepID2学习到的特征数目为200*160,特征数目太大了。所以论文中使用前向后向贪心算法来选取一些有效且互补的DeepID2向量,以节约时间。注意,特征选择在每个DeepID2向量间进行,也就是一个DeepID2输出的向量,要么全被选中,要么全不被选中。选中的向量对应的patch如图。

 

第四步,选中25个向量后,每张图像的维度是25*160=4000维。仍然太大,因而使用PCA进行降维,降维后大约有180维。

第五步,对于输出后的向量,就可以使用来进行人脸验证任务了。论文构建了一个联合贝叶斯模型来进行分类。联合贝叶斯模型如下:

 

即使用类间距除以类内距的对数值来衡量一个图像对是不是同一个人。在训练集上可以得到一个阈值,当结果值大于阈值时,不是同一个人;当结果值小于阈值时,是同一个人。

4. DeepID2

DeepID2的创新点在于在学习特征的时候,该网络不仅考虑分类准确率,还考虑类间差距。具体的做法就是在目标函数中添加一项类间差距。该添加的创新就在于类间差距是在两个样本间进行衡量的,因而添加类间差距后,训练过程需要变化。

DeepID2所做的第二点小创新就是将卷积层的倒数第一层和倒数第二层都作为最终层的输入。(因为添加了类间差距,所以最终层不能再成为是softmax层了)

DeepID2学习特征的整体卷积神经网络结构图如下:

 

4.1 Details of Structure

四层卷积,前三层后面都跟着max-pooling层,第三层卷积的神经单元的参数在2*2的局部区域内共享;第四层卷积则是全连接,参数在神经单元之间不共享。

第三卷积层的输出和第四卷积层的输出以全连接的方式连接到最后一层,最后一层也称为DeepID2层。因为第四层学习到的特征比第三层的更全局一些,所以这样的连接方式被称为是多尺度卷积神经网络。

4.2 Goal functions

在本论文中,使用DeepID2进行学习的目的是得到输出向量,并不是为了使识别率最大化。因而论文添加了类间距项。使用卷积层得到输出向量可用函数表示:

 

正确分类的函数就是softmax的目标函数,目的是使交叉熵最小化。

 

样本间距最大化的目标函数如下。

 

该公式的作用是,当两个样本相同时,则需要最小化它们之间的距离,当两个样本不同时,则需要最小化m与它们的距离值之差,m是一个需要手动调整的参数,提出m的目的在于目标函数需要最小化,而不是最大化。

当样本之间的距离函数时余弦距离时,样本间距最大化的目标函数如下。

 

在最终组合目标函数时,将Ident与Verif加权。

4.3 Training process

训练过程如下图。

 

5 Experiment

5.1 Experiment datasets

LFW是最终使用模型的数据集,共13233张脸,分属于5749个人。但此数据集太小,所以需要引入外部数据集CelebFace+,拥有202599张脸,分属于10177个人。

将CelebFace+数据集分为CelebFace+A数据集和CelebFace+B数据集。CelebFace+A有8192个人的数据,随机从CelebFace+中选取,用于训练DeepID2学习特征。CelebFace+B是剩余的1985个人的脸,用来进行特征选取和联合贝叶斯概率模型的学习。

在学习DeepID2的时候,CelebFace+A是训练集,CelebFace+B是验证集来确定学习速率,训练迭代次数,目标函数的融合参数lambda。

在特征选择的时候,CelebFace+B中分出500个人的数据作为验证集。

最后,在整个CelebFace+B中训练联合贝叶斯模型。

在LFW上使用训练好的模型进行实验。

5.2 Experiment settings

论文进行了如下几组实验:
  • 考察目标函数融合参数lambda的效果,包括最终效果分析、方差分析、PCA降至2维时的数据分析。
  • 考察信息量的影响,即通过变换训练集的大小(32指数增长到8192),查看效果。
  • 改变用于验证的目标函数即Verif的距离计算方法后的实验效果。考察了一阶范数、余弦距离等。
  • 选取了七组不同的特征集合,然后将模型使用svm进行融合,得到最终结果99.15%。

6 Reference

[1] Sun Y, Chen Y, Wang X, et al. Deep learning face representation by joint identification-verification[C]//Advances in Neural Information Processing Systems. 2014: 1988-1996.

  • 16
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
### 回答1: 我可以为您推荐几个优秀的人脸识别算法库,例如 OpenCV、Face Recognition、dlib、PyImageSearch 和 DeepFaceLab。它们都提供了 Python 接口,可以让您在 Python 中轻松实现人脸识别功能。 ### 回答2: 人脸识别算法是一种通过计算机技术来识别和验证人脸的技术。Python是一种流行的编程语言,具有易学易用和广泛的应用领域。在人脸识别算法中,Python可以用于图像处理、机器学习等关键步骤。 首先,人脸识别算法需要处理输入的图像。Python提供了多种图像处理库,例如OpenCV和PIL,可以用于加载和处理图像,包括调整大小、裁剪和灰度化等操作。这些处理步骤有助于提取图像中的人脸区域。 接下来,人脸识别算法使用特征提取方法来从人脸图像中提取关键特征。常用的方法包括主成分分析(PCA)和局部二值模式(LBP)。Python中的机器学习库,如scikit-learn和tensorflow,提供了这些特征提取方法的实现。 然后,人脸识别算法使用这些特征来训练分类器模型。常见的分类器包括支持向量机(SVM)和人工神经网络(ANN)。Python中的机器学习库提供了许多现成的分类器模型和算法,可以帮助我们进行训练和测试。 最后,人脸识别算法将训练好的分类器应用于新的人脸图像。它会将该图像的特征提取并与已知人脸图像的特征进行比较,进而判断出该图像是否为人脸以及是属于哪个人。 总的来说,Python作为一种强大的编程语言,可以在人脸识别算法中发挥重要作用。它提供了丰富的图像处理和机器学习库,使得人脸识别算法的开发和实施更加简洁高效。同时,Python还具有广泛的社区支持和资源,可以促进人脸识别算法的不断发展和改进。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值