概述
年龄估计是一个经典的计算机视觉问题。虽然有许多深度神经网络(例如 AlexNet、Vggnet、Resnet等)被提出,但是它们都不适用于端侧或者移动设备。文章设计了一个轻量化的年龄估计网络 C3AE(Compact yet efficient Casade Context-based Age Estimation model)来解决移动设备上的年龄估计问题。
当前的年龄估计方法,可以大致分为基于结合分类与回归和分布估计两类方法。而脸部的年龄经常是不可控以及个性化的,传统方法进行年龄估计经常会遇到泛化性的问题。文章的主要贡献在于:
- 提出了一个用于年龄估计的轻量化的网络结构(相比 MobileNet 和 ShuffleNet 具有更少的参数)。分为普通版和加强版(使用 SE 模块);
- 提出使用多尺寸的人脸图像输入;
- 提出结合分类、回归和分布回归的级联模型;
- 提出基于两个相邻点的年龄表示方法;
- 提出在小网络中 Resnet 模块没有作用但是 SE-Net 模块仍然有效;
- 提出由于深度分离卷积需要更多的通道数目来达到和普通卷积的效果,因此在小尺寸图像输入和小模型中可以直接考虑使用普通卷积,进而在精度和大小方面取得一个更好的平衡。
详细分析
模型结构
提出的普通版模型包含 5 个卷积层和两个全连层,结构如下图所示:
至于为什么使用普通卷积而不是分离卷积,作者进行了详细的说明。对于一个输入特征图
D
F
×
D
F
×
M
D_F×D_F×M
DF×DF×M 和一个输出特征图
D
F
×
D
F
×
N
D_F×D_F×N
DF×DF×N,分离卷积和普通卷积需要的计算量的比值如下式所示:
但在实际中,为了获得和普通卷积同样的精度,分离卷积需要更多的通道数目。例如对于一个 32 个通道的普通卷积,分离卷积可能需要 144 甚至更多个特征通道,这使得分离卷积的计算量甚至更大一些。
年龄的两点表征方法
文章同时还提出一个年龄的两点表征方法。对于一个年龄分段
[
0
,
10
,
20
,
30
,
40
,
50
,
60
,
60
,
70
,
80
,
90
,
100
]
[0, 10, 20, 30, 40, 50, 60, 60, 70, 80, 90, 100]
[0,10,20,30,40,50,60,60,70,80,90,100],每个年龄值都可以用它相邻的两个年龄分段值进行加权表示。这使得一个具体的浮点型的年龄值转化为一个分布向量,如下图所示:
当然这个年龄值同样也可以使用多个数值进行表示,但是那样就没有意义了,因此最后还是使用相邻两个 bin 进行表示。
级联训练
由于使用两点表征法将浮点型的年龄使用一个分布向量进行了表征,因此文章一方面使用 KL 散度损失对分布进行建模,另一方面还使用 MAE(L1 loss) 损失对从分布计算出来的浮点型年龄值进行回归。两个损失以及最终损失如下式所示:
其中
α
=
10
\alpha = 10
α=10。
基于上下文的回归模型
由于输入的人脸是一张很小的图像,为了充分挖掘这张小图像里面的年龄信息,对于一个人脸图像,文章使用 3 个不同的尺度对人脸图像进行 crop 操作,crop 结果如下图所示。
对 crop 出来的 3 张不同尺度的人脸图像都输入设计的年龄估计网络,然后 concat 3 个输出特征,得到最终的特征向量。整体网络结构如下图所示:
讨论
由于残差模块是为了解决深度模型的梯度消失问题而提出,因此文章认为残差模块对小模型没有作用,并通过实验进行了验证;而 SE 模块对小模型性能提升具有帮助。具体实验验证结果如下图所示:
实验与结果
文章在 IMDB-WIKI、Morph Ⅱ、FG-Net 数据集上进行了验证实验。其中 IMDB-WIKI 作为预训练数据集。输入尺寸固定为
64
×
64
×
3
64×64×3
64×64×3。最终在 0.25MB 大小的升级版模型上,提出的 C3AE 以更小的模型大小在 Morph Ⅱ 和 FG-Net 数据集上取得了更高的年龄识别精度: