DEX: Deep EXpectation of apparent age from a single image

这个论文我们使用深度学习解决了在静态人脸图像中面部年龄的估计。我们的卷积神经网络使用了VGG-16结构,并在用于图像分类的ImageNet的数据集上预训练。除此之外,由于面部年龄的注释图像数量的限制,我们探究了微调带有可用年龄的爬取的网络人脸图片的好处。我们从IMDB和Wikipedia上爬取了0.5百万张名人的图片,并公布出来。这是目前为止最大的用于年龄检测的数据集。我们提出了将年龄回归问题作为一个伴随着一个softmax期望值细化的深度分类问题 ,并展示了在CNNs的直接回归训练上的改进。我们提出的方法,Deep EXpectation(DEX)of apparent age,首先在图像中将人脸检测出来,然后在该截取图像上,从一个以20个网络为整体的网络上抽取该图像的CNN预测值。该DEX的CNNs网络先在爬取来的图像上微调,然后再在有面部年龄注释的提供的图片上微调。DEX没有使用明显的面部特征点。DEX在参加ChaLearn LAP 2015挑战赛的面部年龄估计的115支队伍中获得了第一名,明显优于人类参考的年龄结果

1. Introduction

在机遇单一人脸图像的年龄估计中有很多研究[1.3.6]和几个大的数据集[1,9,11]。相反,面部年龄的估计,即被别人感知的年龄,仍然在开始阶段。ChaLearn Looking At People 2015的组织者提供了迄今为止已知的最大的带着面部年龄注释的图像数据集之一,被称为LAP数据集,并用其挑战视觉社区

该工作的目标是通过深度学习从单一人脸图像开始学习面部年龄估计。我们的选择受到了在通过深度学习加速的领域如图片分类[2,8,12]和目标检测[5]最近的进展的激励。

我们的卷积神经网络使用VGG-16结构,并在用于图像分类的ImageNet的数据集上预训练。在这方面,我们从学习来从图像中区别目标类别的表征中受益。如我们下面的实验所示,该表征没能力实现好的年龄估计。在带有面部年龄估计的训练数据上微调CNN是为了得益于CNN表征能力的必需步骤。因为带有面部年龄估计的人脸图片的稀少,我们探究了在可用的(生物学的,真实的)年龄条件下,通过爬行的互联网人脸图像进行微调的好处。从IMDB和Wikipedia网站上爬取的524230张人脸图组成了我们新的数据集——IMDB-WIKI数据集。一些图像显示在图一中:

该数据集是公开可用的,是用于生物年龄预测的最大的数据集

当年龄来自一个连续范围的值时,年龄估计是一个回归问题。我们不仅是使用CNNs的回归训练,还训练CNNs用于年龄值在101个年龄标签[0,1,...100]的分类。我们提出了将年龄回归问题作为一个伴随着一个softmax期望值细化的深度分类问题 ,并展示了在CNNs的直接回归训练上的改进

我们提出的方法,Deep EXpectation(DEX)of apparent age,可见图2:

首先在图像上检测人脸,然后从一个20个网络的整体上抽取该截取人脸的CNN预测值。DEX在ImageNet上预训练,在我们的IMDB-WIKI数据集上微调获得模型,然后应用在LAP图像上。DEX在参加ChaLearn LAP 2015挑战赛的面部年龄估计的115支队伍中获得了第一名,明显优于人类参考的年龄结果

我们的主要贡献如下:

IMDB-WIKI数据集,是最大的用于生物年龄预测的数据集

一种新的回归公式,通过跟着期望值细化的深度分类网络实现

DEX体系,ChaLearn LAP 2015挑战赛的面部年龄估计中的冠军

在第二部分通过描述人脸检测和面部年龄预测组件来介绍了我们的方法DEX。第三部分描述了数据集(包括我们新提出的用于年龄估计的IMDB-WIKI数据集)、实验以及讨论了我们的方法和其在ChaLearn LAP 2015挑战赛上的性能。第四部分是总结

2. Proposed method (DEX)

我们提出的DEX方法就是沿着图二的管道实现的。下面我们将提供每一步的细节,以及最后CNNs 的整体。

2.1. Face Detection

对于训练和测试图像,我们运行Mathias et al.[10] 现成的人脸检测方法去获得人脸的位置

为了对齐人脸,我们不仅在原来的图像上运行人脸检测器,还在-60度到60度的区间中,以5度为增加单位对图像进行旋转来检测。对于一些倒着的或旋转角度为90度的图像,我们还会在-90度、90度和180度的角度上运行人脸检测,因为有限的计算资源,我们仅使用旋转图片的离散集。然后取出这些人脸中检测得分最强的那一个,并根据其之前的位置将其旋转为正对的样子

对于少数的图像(概率小于0.2%),人脸检测器不能找到人脸。在这些例子中我们只能取整个图像作为输入。在最后的LAP测试集中,该准则仅用于一个图像

然后我们将扩展人脸大小,并在其上下左右填充40%的边缘。添加该上下文信息将会提供预测的精确度。如果人脸基本上已经占据所有的图像,那么我们就会使用其边界的最后一个像素来进行填充。这将会保证所有截取出来的人脸总是在图像的相同位置

最后的结果将会被压缩成256*256像素大小,用其作为深度卷积网络的输入

2.2. Face Apparent Age Estimation

面部人脸检测是通过应用一个深度卷积神经网络到从上面处理步骤中得到的检测人脸中实现的。我们的方法使用了VGG-16[13]结构,其在ImageNet挑战赛上获得了令人瞩目的成绩

2.2.1 Deep learning with CNNs

我们所有的CNNs都从预训练于用于图像分类的ImageNet数据集的VGG-16结构开始的。然后该CNNs将会在我们的IMDB-WIKI数据集中进行微调。当为了回归进行训练时,为了回归年龄,输出层将被更改为只有一个单一的神经元;当为了分类进行训练时,输出层将会采用101个输出神经元,这与从0-100的自然数字相关,即用于年龄类别变迁的离散年份

2.2.2 Expected Value

年龄检测可以被看作是一个基于块的回归,或者是作为一个带有多个离散值标签的离散分类。类别数量越多,回归信号的离散误差越小。在我们的例子中,这是一个年龄的一维回归问题,从连续信号([0,100])中采样。

我们可以通过大量增加类的数目,从而更好地逼近信号,并结合神经元的输出来恢复信号,从而改进年龄回归的分类公式。增加类别的数量需要每一类别都有足够的训练样本,因为样本的不足或不均匀将增加训练年龄分布的过拟合及有类别不能正确训练的可能。在一系列初步实验后,我们决定使用101个年龄类。为了增加预测的准确性,如上图2所示,我们如下计算了一个softmax的预测值E:

O={0,1, ..., 100}是101维的输出层,表示softmax的输出概率,oi 属于O。yi表示与每个类i相关的离散年龄

即当我们使用CNNs网络得到预测结果,并使用softmax计算得到该图像为每个类别的概率之后,将每个类别的概率乘以每个类别的值得出最后的年龄精确结果,而不是一个概率最大结果

2.2.3 Ensemble of CNNs

在IMDB-WIKI数据集中微调后,我们将进一步在20个不同的ChaLearn LAP数据集[4]分片中微调最后的网络。在每个分片中使用90%作为训练数据,10%作为验证数据。该分片是分别为每个年龄类别随机选择的,比如在训练中的年龄分布总是相同的。然后我们将会在一个ChaLearn LAP数据集的增强版本上训练20个网络,即同时为每个图像添加10个增强版本(增加数据的方法)。每个增强都是将图片随机旋转的图像- 10◦到10◦,调整它- 10%到10%的大小和放缩到0.9至1.1的原始大小。在将数据分成训练和验证数据集后才进行该增强,用以保证两个数据集中没有重叠。然后每个网络将会被训练,我们将会挑选其中验证集性能最好的权重,然后继续训练的到最终的20个网络。

最后年龄的预测值就是将图像输入训练在稍微不同分割数据上的20个网络中,然后求20个网络的到的结果的平均值

3. Experiments

在部分我们将从首次从我们的实验中介绍数据集和评价指标。然后将提供我们DEX方法的实现细节,描述是要步骤和讨论结果

3.1. Datasets and evaluation protocol

3.1.1 IMDB-WIKI dataset for age prediction

为了有好的性能,通常大的CNN结构都需要大的训练数据集。由于公开可用的人脸图像数据集都是小型到中型的大小,很少有超过成千上万张图片的,而且经常没有年龄信息,因此我们决定收集一个大的名人数据集。为了该目标,我们获取了IMDB网站(www.imdb.com)上最出名的100000个演员列表,并自动爬取他们的档案出生日期、图片和注释。我们移除没有时间戳(即照该图片的日期)的图片,以及一张图片上有多个高分人脸检测的图片(可见如2.1部分)。假设该单一人脸图像能够显示演员,并且图片的时间戳和出生日期是正确的,我们就能够计算出该图片人脸的生理(真实)年龄。当然,我们不能保证赋值的年龄信息的准确性。这是因为错误的时间戳,许多图片都是电影的剧照,可能延长制作时间,因此会导致时间戳不准。总之我们从IMDB中获得了461871张名人的人脸图片

对于Wikipedia网站(en.wikipedia.org),我们从人物网页中爬取了所有的外在图片,并且根据应用在IMDB中的相同的准则去过滤这些图像,最后得到62359张图片。在表1中我们总结了发布的IMDB-WIKI数据集:

总之有524230张带着爬取年龄信息的人脸图像。这些图像中的一部分(尤其是从IMDB中来的)包含了多个人脸,我们仅使用他们中第二个最强的人脸检测分数在阈值下的图像,否则很容易检测到错误的人脸。为了使网络对所有年龄层一视同仁,我们均衡了年龄分布,即我们随机忽略了最常见年龄层的一些图像。因此最后留给我们的CNNs的仅有260282张训练图像

3.1.2 LAP dataset for apparent age estimation

ChaLearn LAP数据集[4]使用两个基于web的应用程序,一共包含4699张带有年龄标签的人脸图像。每个年龄标签都是至少10个独立用户的平均意见。因此,为每个年龄标签提供了一个标准差σ。LAP数据集被分成2476张图片用于训练,1136张图片用于验证,1087张图片用于测试。年龄分布在LAP数据集的三个集中都是一样的。LAP最多覆盖了20-40年的区间,而对于[0,15]和[65,100]区间,它每年的样本数量较少。

3.1.3 Evaluation protocol

在我们的论文中,对结果要么通过使用标准MAE措施,要么使用ChaLearn LAP挑战赛定义的ε-误差来估计。

MAE : 标准平均绝对值误差(MAE),即用估计年龄和真实年龄之间的绝对值误差之间的平均值计算而来。请注意,该误差并没有捕获标记为真实年龄的不确定性。但是ε-误差方法包含了这一点。

ε-误差 : LAP数据集图像带有通过多个用户票选得到的平均年龄和年龄的标准差σ。LAP挑战赛评估对每张图片拟合票选的均值为μ,标准差为σ的正态分布:

在图像级别中,图像集的ε-误差即上面介绍损失的平均值,ε最大值为1(最坏时),最小值为0(最好时)

3.2. Implementation details

pipeline过程被写在Matlab中。CNNs被训练在Nvidia Tesla K40C GPUs,使用的是caffe框架。人脸检测并行运行在Sun Grid Engine,这对IMDB和Wikipedia图像来说是至关重要的。

在IMDB和Wikipedia图像中训练网络需要大概5天。在ChaLearn数据集中微调一个单一网络需要3个小时。在每一个旋转中测试人脸检测需要1s。每张图片和网络的特征抽取需要200ms

开源代码和IMDB-WIKI数据集公开在http://www.vision.ee.ethz.ch/~timofter/

3.3. Validation results

在实验中我们注意到网络中训练于分类工作的softmax期望值比

  • 训练一个回归器
  • 在之前层的CNN特征上学习一个回归器(SVR)
  • 仅获取最高概率的年龄神经元

这三种方法都要好

在表2中我们展示了不同设置和单一CNN的MAE和ε-误差:

我们注意到最大的改进是因为在IMDB-WIKI数据集上额外的训练(可见在MAE上有2到4年的减少)。当网络为与在LAP数据集上的面部年龄估算值相关的年龄估计学习一个强有力的表征时,该结果与我们的期望相符。直接在LAP数据集的验证集中为回归训练一个网络将导致0.301的ε-误差(MAE为3.531)。将其转换为与整数年对应的101个输出神经元{0,1,···,100}的分类公式后(即仅获取最高概率),结果将改进为0.291的ε-误差(MAE为3.349)。再添加上我们的softmax期望值细化后,我们将在LAP验证集中得到最好的结果,0.278的ε-误差(MAE为3.221)

质量结果可见图3:

显示了我们推荐的解决方案能够在自然条件下和人类一样预测人脸的面部年龄。这一部分是因为我们通过从大的IMDB-WIKI数据集中学习了如何在自然条件中描绘人脸

在图4中:

显示了一些失败的例子,主要原因是:

  • 检测阶段的失败——要么是因为没有人脸被检测出来,要么就是检测出了错误的人脸(即一个背景人脸)
  • 极端条件和/或干扰,比如暗的图像、眼睛和老照片

3.4. Looking at people (LAP) challenge

ChaLearn Looking at people(LAP)挑战赛[4]在面部年龄检测中包含两个阶段:开发(验证)和测试阶段

3.4.1 Development phase

对于开发阶段,LAP数据集的训练和验证图像已经发布了。虽然训练图片有面部年龄标签,但是验证标签仍保持未知,直到第二阶段的开始。团队将验证图像上的结果提交给服务器,以获得性能分数。验证图像的记分牌的演变如图5所示:

为了绘制上面提到的记分牌,我们从比赛网站上抓取了分数。我们可以很容易地注意到,结果的质量平均随着时间的推移而提高。

3.4.2 Test phase

对于测试阶段,将发布验证标签,并授予对测试图像的访问权,但没有测试标签。参赛队伍被邀请将测试图像上的结果提交给竞赛服务器。在测试结束后,主办方公布了最终排名之前,这些分数将保持未知。我们的结果是使用带有20个CNNs的完整集成的DEX、分类预测和期望值细化得到的。

3.4.3 Final ranking 最后排名

ChaLearn LAP挑战赛[4]在面部人脸检测的最后排名匹配在线验证阶段的计分板演化,可见表3:

最好的4个方法的ε-误差都低于0.34,这是组织方在开发阶段报告的人员参考性能。

注意我们是前6个队伍中唯一没有使用人脸特征点的队伍。这说明我们相信当使用了特征点后,我们的DEX方法性能还会有所改进

4. Conclusions

我们处理了静态人脸图像的表观年龄估计。我们提出的深度期望(DEX)方法使用卷积神经网络(CNNs),并在ImageNet上预训练VGG-16结构。此外,我们抓取了互联网上可用年龄的人脸图像,以创建迄今为止最大的公开数据集,并对我们的CNNs进行预训练。此外,我们的CNN是根据表观年龄标记的人脸图像进行微调的。我们将年龄回归问题作为一个深度分类问题,然后进行softmax期望值细化,并对CNNs的直接回归训练进行了改进。DEX综合了20个网络对裁剪后的人脸图像的预测。DEX没有明确使用人脸特征点。我们提出的方法赢得了ChaLearn LAP 2015年[4]表观年龄估计挑战赛冠军(第一名),显著优于人类参考性能(ε-误差==0.34)。

IMDB-WIKI – 500k+ face images with age and gender labels论文学习的更多相关文章

  1. 定义私有属性: *String name; * int age; * String gender; * int salary; Date hiredate;//入职时间

    import java.text.SimpleDateFormat; import java.util.Date; /** * 定义私有属性: * String name; * int age; * ...

  2. DEX: Deep EXpectation of apparent age from a single image 论文阅读

    来自:IMDB-WIKI - 500k+ face images with age and gender labels  https://data.vision.ee.ethz.ch/cvl/rrot ...

  3. working with fitnesse wiki pages

    fitnesse提供一个简单易用的wiki创建一个web页面用于测试.测试页面有一个button,允许所有的测试在这个页面运行,因此任何人在任何时间都可以去这个页面点击这个按钮,查看测试是否通过.fi ...

  4. ROS wiki 学习(1)创建程序包时遇到的rosdep update出错

    1. 使用turtlebot官网的ubuntu14.04走ROS维基时,在创建程序包后出现错误. 按照提示执行之后,出现以下错误. 搜寻度娘,几经波折后,终于解决.解决过程如下: 首先删除默认文件20 ...

  5. 杂项:WiKi

    ylbtech-杂项:WiKi Wiki是一种在网络上开放且可供多人协同创作的超文本系统,由沃德·坎宁安于1995年首先开发,这种超文本系统支持面向社群的协作式写作,同时也包括一组支持这种写作.沃德· ...

  6. 标准格式包含: 私有属性 无参构造 有参构造 setter 和getter 需求中的方法 需求一: 员工类Employee 属性:姓名name,工号id,工资salary 行为:显示所有成员信息的方法show() 需求二: 动物类Animal 属性:姓名name,年龄age 行为:吃饭

      // 员工类 public class Employee { private String name; private int id; private double salary; public ...

  7. Python高手之路【三】python基础之函数

    基本数据类型补充: set 是一个无序且不重复的元素集合 class set(object): """ set() -> new empty set object ...

  8. Lua简易入门教程

    环境:lua for windows (lfW)主页:http://luaforwindows.luaforge.net/https://code.google.com/p/luaforwindows ...

  9. sqlite以及python的应用

    有点乱,自己平时,遇到了就记下来,所以没整理. 数据库sqlite,以及Qt对数据库的操作 sql学习网址: sqlite官网:http://www.sqlite.org http://www.w3s ...

随机推荐

  1. 【Java】《Java程序设计基础教程》第四章学习

    4.1 类的封装 封装指的是将东西包装在一起,然后以新的完整形式呈现.包含两个意义: 1). 把对象的全部属性和方法结合在一起,形成一个不可分割的独立单位(即对象). 2). 信息隐藏,即尽可能隐藏对 ...

  2. Dynamics 365 目录

    Dynamics 365 目录 1.Dynamics 365 on-premises 安装 2.Dynamics 365 安装过程中的问题 2.1Dynamics 365 安装问题——无法访MSCRM ...

  3. 错误信息: The server cannot or will not process the request due to something that is perceived to be a client error

    错误原因:在提交的表单中有 date 类型的数据,也就是不能传输日期类型的数据. 嗯!我知道,去吧!

  4. Validation参数验证

    在SpringBoot项目中其实已经默认引入了,如果不是sprongBoot项目则需要导入Maven <dependency> <groupId>org.hibernate.v ...

  5. centOS下实践查询版本/CPU/内存/硬盘容量等硬件信息

    更详细参考: https://blog.csdn.net/dream_broken/article/details/52883883 1.查看内存 DirectMap2M: 33544192 kB [ ...

  6. javaweb上传文件夹

    我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用. 首先我们需要了解的是上传文件三要素: 1.表单提交方式:post (get方式提交有大小 ...

  7. sed、awk命令速查

    awk与sed.grep一样都是为了加工数据流而做成的文本加工过滤器命令.awk会事先把输入的数据根据字段单位进行分割.在没有指定分割单位的情况下,以输入数据中的空格或Tab为分隔符.与sed相比,它 ...

  8. 《挑战30天C++入门极限》入门教程:C++中的const限定修饰符

        入门教程:C++中的const限定修饰符 const修饰符可以把对象转变成常数对象,什么意思呢? 意思就是说利用const进行修饰的变量的值在程序的任意位置将不能再被修改,就如同常数一样使用! ...

  9. 「SCOI2011」棘手的操作

    传送门 Description 有\(N\)个节点,标号从\(1\)到\(N\),这\(N\)个节点一开始相互不连通.第$ i\(个节点的初始权值为\)a_i$ ,接下来有如下一些操作: U x y ...

  10. MySQL Online DDL导致全局锁表案例分析

    MySQL Online DDL导致全局锁表案例分析 我这边遇到了什么问题? 线上给某个表执行新增索引SQL, 然后整个数据CPU打到100%, 连接数暴增到极限, 最后导致所有访问数据库的应用都奔溃 ...