年龄估计:Ordinal Regression

前言

年龄估计任务

年龄估计,顾名思义就是要从人脸图片中估计出对象的年龄,一般情况下是一个整数,而不是年龄段(中年,青年)和小数(25.5),这一点符合人的常理,我们在提及自己的年龄时,也不会说“我今年25.5岁”。
在人脸应用中,年龄估计一般会作为人脸属性识别中的一个属性,就像下面这张图呈现出的效果(来源于百度demo)
在这里插入图片描述

常见思路

Classification
由于年龄估计任务的输出是一个整数,比如0-99岁年龄范围,显然他可以看做一个100分类问题,0-99正好看做100个类。虽然分类的方法是最直接清晰的思路,但是年龄本身有连续性,而分类问题忽略了这种天然的内在联系,因为常规的分类任务,类别间是完全独立的,比如猫狗分类。举个例子:
我们一般用softmax+交叉熵做分类任务的损失,假如有三个类别,分别是猫、狗、鸟,它们分别对应的one-hot编码是[1 0 0]、[ 0 1 0]、[0 0 1],当前对一张实际类别是猫的图片进行预测,假设预测结果P1为[0.2 0.6 0.2],P2为[0.2 0.2 0.6],显然这两次预测结果都是错误,并根据交叉熵计算损失是一样大的,在猫、狗、鸟的三分类问题中,这样来计算损失是合理的。
但是假如我们把这个三分类分别对应0岁,1岁和2岁,这样计算损失就不再合理,因为1岁要比2岁,更加接近于0岁,而1岁和2岁产生的损失却一样大,这就是分类问题应用到年龄估计中的弊端,softmax仅仅强调了类间差异的最大化,却忽略了年龄问题本身的连续性。

Regression
由于年龄的连续性,年龄估计也可以看做回归问题,但是回归处理假设人的衰老是一个“静态”过程,即不同年龄的人的衰老变化规律一致。

Ranking
年龄估计过程可以看成是对大量人脸有效信息对进行比较的过程,也就是通过若干组二值分类结果就可以得到相应的年龄估计值,通过寻找当前年龄标签在年龄序列中的相对位置来确定最终的年龄值,从而有效克服了传统的年龄估计方法忽略了人类面部衰老过程中的动态性、模糊性以及个性化的特点。

Ordinal Regression Model

下面就是这篇论文《Ordinal Regression with Multiple Output CNN for Age Estimation》的重点了,这篇论文不同于传统的分类问题或回归问题处理年龄估计,而是引入了一种Ordinal Regression思想,是在用多个二分类问题实现顺序的年龄回归任务,从而考虑到年龄的连续性特点。

前向推理

在这里插入图片描述
整体模型如上所示:
模型的卷积部分整体采用Conv+Relu+BN+Pooling的形式做堆叠,最后一层卷积其实是一个“全尺寸”的卷积运算,也可以看做为全连接层,卷积核尺寸为11*11,刚好与特征图一样大,所以没有再用Pooling操作;
最后输出的特征向量长度为80维,这80维向量再通过全连接层做多任务输出,如图一共输出K-1个子任务,每一个子任务都是一个二分类模型。
而二分类的输出就是:是否大于当前的Rank。在本文中,Rank是Ordinal的,如果我们要做1-100岁的年龄估计,那么Rank就有99个,分别对应1-99个年龄,如果第1个任务为1,那么表征预测的人脸年龄大于1,第二个任务为1,预测的人脸年龄大于2,依次类推,直到最后一个任务T=100-1,如果该任务为1,及预测的人脸年龄大于99。
最后的年龄q等于上述所有输出为1的子任务的和,及:
在这里插入图片描述
这样定义年龄估计有两个好处:
1.在实际生活中,我们去判断一个人的年龄大于还是小于另一个年龄,要比直接去估计这个年龄更容易,这符合人的主观认知;
2.Ordinal的思想不同于直接分类,利用了年龄本身连续性的特点。

损失函数

由于,该方法本质上是在用多个二分类子任务构建Ordinal Regression,所以损失函数采用的是交叉熵,即对每一个子任务的损失函数加权求平均,当我们认为每个要子任务都是同等重要的,那么权为1:
在这里插入图片描述
而当有一些年龄在任务中是比较重要的,此时引入年龄的权重:
在这里插入图片描述

实验效果

在这里插入图片描述
评价标准:
首先是实验所使用的评价标准,是MAE,大家一般都这样用。
对比数据集:
其次,实验用到了一个自建数据集AFAD,也就是说除了AFAD,只对比了一个MORPH开源数据集。
对比方法:
最后,关于对比方法,其实也只有一个,就是BIFs+OHRank,可能是因为这篇论文比较古老了,是2016的CVPR,所以他对比的方法更加古老,是2011年的,而这会用的还不是CNN,为了避免因为CNN的使用带来的涨点,所以实验部分还提出了一个MR-CNN的方法,如下图:
在这里插入图片描述
是在用相同的主干网络,直接加上Euclidean loss,以证明Ordinal Regression的效果。
所以本质上,实验对比部分只有一个数据集,一个方法的比较,这个略单薄。

实现方法

caffe的开源代码已有有很多版本了,需要添加下对应的op就好,比如:
https://github.com/luoyetx/OrdinalRegression

其他

最后,这篇论文的自建数据集终于开源了,在19年初的时候才放上来:http://afad-dataset.github.io/
BUT:
1.这个数据集没有提供原图,而是直接crop了,这导致如果自己的任务对齐方式和他的不一致的话,就很尴尬;
2.年龄范围太小,只有15-40岁;
在这里插入图片描述

发布了203 篇原创文章 · 获赞 1355 · 访问量 146万+

猜你喜欢

转载自blog.csdn.net/chaipp0607/article/details/90739483