您的位置:首页 > 其它

Deep Learning Face Representation from Predicting 10,000 Classes

2016-01-28 10:34 369 查看

摘要

  这篇paper旨在通过深度网络来学习高维特征,所谓的深度网络就是DeepID,用于人脸识别。我们将说明DeepID可以有效应用于多类人脸识别任务。同时也可以泛化到其他识别领域以及训练集中没有出现过的新样本。此外,其泛化能力随着训练任务中的类别的增多而增强。DeepID的特征来自ConvNets的最后一层隐层。当训练集能够识别出10000个人脸后,逐步减少每层神经元个数,ConvNets会逐步习得紧致的与识别相关联的特征,并最终在顶层输出。所提及的特征是从人脸的多个部位提取的,以形成过完备和互补的描述。基于这些高层次特征,可以获得任何最优分类。

简介

  长久以来,大家对人脸识别的研究热情不减,因为它很实用,还有一个叫LFW的公开数据集用于测试算法。目前的最优识别算法都是基于过完备的低层特征和浅层模型。最近,ConvNets由于被证明能够有效提取高层特征,因此被用于人脸检测。在本文中,我们将通过人脸识别来学习高维识别特征。例如,将训练集的图像分为10000类。尽管这比人脸识别更具挑战(不是一样的?),但是它可以使得学习特征表示时有更好的泛化能力。尽管是通过识别学习到的,这些特征也在人脸验证和没有出现过的人脸识别中很有效。

  图1中给出了我们提取的特征的图例,ConvNets能够区分所有训练集的人脸,利用的是最后一个隐层的输出。



  长方形的图片是用31×39×k31\times39\times k,而正方形图片是用31×31×k31\times31\times k 作为输入,后续的网络大小根据图片的大小做相应的改变,最终的输出特征固定为160维,上图给出了针对长方形图片的网络结构。需要注意的是,最后一层连接了第3个卷积层和第4个卷积层,原因是第4层比第三层包含更多的全局信息,但由于下采样导致的瓶颈可能会有信息损失,所以又需要第三层来补充。该网络通过基于SGD的bp来训练。

特征提取

  我们通过已有算法检测了5个面部标识,包括两眼中心、鼻尖、两个嘴角。通过两眼中心和嘴角将人脸全局对齐。特征提取自60个面部块,包括了10个区域、3种尺度以及RGB或者灰度。图3显示了两个特殊的脸部区域的10个面部区域和3种尺度。

  我们训练了60个ConvNets网络,每一个都从某一个面部块及其水平对称图像中提取了两个160维特征。最后,我们得到了19200维的特征( 160×2×60160\times 2\times 60 )。

人脸识别

  我们使用基于DeepID的联合贝叶斯技术来搞人脸识别。该技术将所提取的人脸特征x(已经减去了均值的)表示为两个独立高斯变量的和:x=μ+ϵx=\mu+\epsilon 这里μ∼N(0,Su)\mu\sim N(0,S_u) 表示人脸识别,ϵ∼N(0,Sϵ)\epsilon\sim N(0,S_\epsilon) 表示内在个体差异。联合贝叶斯模型模拟了两类人脸在内在以及外在个体差异假设下的联合概率分布P(x1,x2|HI)P(x_1,x_2|H_I) 和P(x1,x2|HE)P(x_1,x_2|H_E) 。具体结果可以由EM算法求解。

  此外我们还自己建了一个神经网络来验证和与联合贝叶斯算法对比效果。我们使用了ReLUs作为隐层神经元,sigmoid作为输出神经元。此外,我们还在每层都用了dropout,因为梯度的弥散,高层网络不用dropout就很难收敛啦。



实验

  我们在LFW上测试算法,但LFW的人脸不够多,所以又用了CelebFaces数据集来训练模型。当然,这两个数据集中的人是互相不同的。

  我们从CelebFaces中随机选了80%的人来训练DeepID(特征学习阶段),剩下了20%来学习之后的联合贝叶斯或者是神经网络(人脸识别阶段)。

  对于特征学习阶段,ConvNets需要将4349个人同时分类。我们随机选择了训练集中10%的图像作为验证集。每训练一代,我们就看一下验证集的错误率,选择其中最小的模型。

  对于人脸识别阶段,我们使用PCA降维后再作为联合贝叶斯模型的输入。随着输入数据维数在相当大的范围内变化时,算法结果几乎保持不变。在测试时,判断两张脸是否是同一个人是通过看联合贝叶斯的极大似然比来决定的,该阈值通过训练集确定。

  为了评价我们的方法在更大的训练规模下的表现,我们把训练集从CelebFaces变为了CelebFaces++,其他保持不变。

4.1. 多尺度ConNets

  所谓的多尺度就是将第三层卷积层也连到了最后的输出上,使得输出层可以同时看到第3和第4层的卷积层的输出。下图对比了效果,发现top1的错误率平均要低4.72%,从后来的人脸识别中也可以看到,准确率从95.35%升到了96.05%

4.2. 学习有效的特征

  同时区分大量的类别是学习有区分能力和简洁的特征的关键。为了证明这点,我们将训练的softmax输出层由136增加到4349个,然后观察top1分类能力以及之后的人脸识别能力。然后发现,准确率几乎都是随着识别种类的翻倍而线性增长的(即横轴为指数坐标系)。而且效果提升很明显。联合贝叶斯和神经网络的准确率都获得了10.03%和8.42%的增长。

  此外,我们还试图把4349个输出作为特征,后续的测试惨不忍睹,所以不能这么搞(用脚想想都知道这么搞特征太稀疏,维数太高,相关性还特别强,用处不大,显摆自己实验做得多么……)

4.3. 超完备描述

  我们试图将用的特征从1增加到5,15,30,60。由于很难枚举所有组合,所以我们只选了最有代表性的组合。然后发现,人脸块(patch)用的越多,效果越好,用到60的时候准确率分别提升了4.53%和5.27%,图示曲线可以看出还有增长空间。

4.4. 方法比较

  为了显示出我们的算法会从训练集的增大中收益,我们把训练集从CelebFaces变为了CelebFaces++。我们从该数据集中随机选取了8700个人来学习DeepID,用剩下的1477个人来学习人脸识别的算法。既然增多人脸块有用,那我们就通过使用5种尺度(而不是3个)把人脸块的数量增加到100个,这导致输出增加到了32000维,然后用PCA降维。最后联合贝叶斯算法在LFW数据集上取得了97.20%的准确率。

  由于CelebFaces++和LFW的数据集分布有差异,所以训练的模型也是有偏的,所以又用一个已有算法修正后,准确率来到了97.45%,与人类的辨识能力97.53%相差无几。

  表1给了算法最优结果的对比,显然我们最好。当然此时Facebook独立开发的算法也取得了97.25%的成绩,不过他们是做了针对三色通道的预处理的(……搞了半天还没我们好的意思?)。

总结和讨论

  本文旨在学习能够揭示人脸识别的高层特征,这些特征是通过利用ConvNets的顶层层次提取。通过用少数隐层变量表示大量不同身份信息,迫使该特征具有很强的区分能力和简洁性。从人脸的不同区域提取的特征是超完备的,这也增强了特征的效果。

  如果给出更多身份,该网络的表现还会继续增强。最近有方法通过利用很多不同的数据集做训练,使得准确率达到了98.52%,超过了人类的识别率。这可能是由于非参数的贝叶斯核方法可以适应数据分布的模型复杂度。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: