前言

年龄估计任务

年龄估计,顾名思义就是要从人脸图片中估计出对象的年龄,一般情况下是一个整数,而不是年龄段(中年,青年)和小数(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岁;

年龄估计:Ordinal Regression相关推荐

  1. 年龄估计——Ordinal Regression with Multiple Output CNN

    <Ordinal Regression with Multiple Output CNN for Age Estimation> CVPR2016,Zhenxing Niu et al 将 ...

  2. 【论文翻译】年龄估计 SSR-Net: A Compact Soft Stagewise Regression Network for Age Estimation

    原文:SSR-Net: A Compact Soft Stagewise Regression Network for Age Estimation 链接:https://www.csie.ntu.e ...

  3. Deep Ordinal Regression Network for Monocular Depth Estimation 单目深度估计,论文阅读,DORN;视频笔记

    tags: 单目深度估计,论文阅读,DORN 原始论文是: Deep Ordinal Regression Network for Monocular Depth Estimation Huan Fu ...

  4. 最新年龄估计综述(Deep learning approach for facial age classification: a survey of the state of the art)

    目录 @[TOC](文章目录) #一.常用数据集 #二.常用的年龄识别方法 #1.多分类(MC) #2.度量回归(metric regression,MR) #3.排序(ranking) #4.深度标 ...

  5. Soft Labels for Ordinal Regression阅读笔记

    Soft Labels for Ordinal Regression CVPR-2019 Abstract 提出了简单有效的方法约束类别之间的关系(其实就是在输入的label中考虑到类别之间的顺序关系 ...

  6. Rank-consistent Ordinal Regression for Neural Networks

    Rank-consistent Ordinal Regression for Neural Networks 摘要 分类任务的网络结构已经得到显著的发展,但是常用的损失函数(例如多类别交叉熵)不能解决 ...

  7. 年龄估计系列(1)年龄性别调研:论文阅读和github资源汇总/数据库/挑战/思考

    目录 一.论文阅读和github资源汇总 1.1 论文 1.1.1 2012.人脸图像的年龄估计研究 1.1.2 2013.Age Estimation Face Images_Human vs Ma ...

  8. CVPR 2019 | 一种用于年龄估计的连续感知概率网络

    2019-11-16 04:26:34 作者 | BBuf 编辑 | 唐里 年龄估计是计算机视觉中一个重要且具有挑战性的问题.现有的年龄估计方法通常采用分治法来解决非平稳老化引起的异构数据.然而,面部 ...

  9. 年龄估计bridgeNet

    https://github.com/jacke121/Face_info https://github.com/juan-csv/Face_info 2020.12.12 这个也有年龄估计,也不是很 ...

  10. 【技术综述】人脸年龄估计研究现状

    文章首发于微信公众号<与有三学AI> [技术综述]人脸年龄估计研究现状 今天给大家带来一篇人脸识别中的年龄估计技术,年龄特征作为人类的一种重要生物特征,计算机要如何基于人脸图像估计年龄呢? ...

最新文章

  1. MultiBaC包消除不同组学数据之间的批次效应
  2. linux(6/17)--文件打包上传和下载
  3. Android SQLite数据库增删改查操作
  4. 【Linux】一步一步学Linux——more命令(39)
  5. ASP.Net导出EXCEL表(小结)
  6. 为什么说“进程是资源分配的单位、线程是调度的单位”?
  7. mongodb 无法查出数据_MongoDB,再见还是再等等?
  8. python airflow_airflow 简明指南
  9. mysql中如何删除空记录表_mysql删除表中的记录
  10. Ubuntu下安装 Mysql
  11. 测试连接数据库是否成功
  12. Linux命令行报错 bash: cannot create temp file for here-document: No space left on device
  13. 三种GDB类型的转换后字段类型的变化
  14. MIT Mini Cheetah 的驱动与结构原理解读以及对尺寸效应
  15. 博思得标签打印机驱动_博思得V6驱动|博思得Postek V6标签打印机驱动下载 官方版 - 比克尔下载...
  16. 最近做的一些文件破解的结果
  17. 重装系统后dell戴尔笔记本电脑插入耳机没有声音
  18. 数据可视化大屏案例系列 2
  19. 将iPad,iPhone或eReader的PDF电子书转换为ePub格式
  20. 正则表达式,匹配数字

热门文章

  1. C盘系统文件提示损坏怎么办?系统文件损坏怎么修复
  2. [hdu3873] Invade the Mars
  3. Ubuntu双显卡切换方法总结
  4. word关闭时卡死_word操作技巧:怎样快速退出正在进行的操作状态
  5. oracle查找用户名和密码忘记了,Oracle忘记用户名和密码的解决方案
  6. 2017年语义理解总结(二)
  7. 利用百度点击原理提升关键词排名
  8. 贝塞尔曲线(Bezier Curve)
  9. 初次软件开发(总结篇 之二)_-Chaz-_新浪博客
  10. 修改程序版本工具(ResHacker)使用说明20140902