年龄估计的一个问题是同样年龄的不同人可能会有较大的外观差异。年老的人可能看上去很年轻,一些年轻人也可能看上去比较老。而另一个问题则是当前的模型都太大了,大小甚至超过500MB,无法在端侧移动设备上部署运行。
SSR-Net(Soft Stage wise Regression Network) 提出网络非常大的原因是最后的分类层占据了大量的参数,因此提出了一种级联分类的年龄估计方法。通过将原来的需要输出 100 个分类类别数降低到设定数目,并使用多个层级进行分类,对每个层级进行均值计算来得到年龄估计。最后提出的 SSR-Net 使用 0.32MB 大小的模型,得到了和之前大模型相匹配的估计精度。而且 SSR-Net 仅使用一个回归损失进行训练,不需要分布或者秩信息。
现有的年龄估计方法,一般都会将年龄估计问题抽象为一个分类问题,然后计算分类的期望值作为最终估计的年龄值。
在 DEX(Deep Expectation of Real and Apparent Age from a Single Image Without Facial Landmarks) 中,将一个
[
0
,
V
]
[0, V]
[0,V] 的年龄段划分为
s
s
s 个不重叠的区间,每个区间的长度是
w
=
V
s
w=\frac{V}{s}
w=sV,对于第
i
i
i 个区间,DEX 认为它的年龄期望值为
μ
i
=
i
(
V
s
)
\mu_i=i(\frac{V}{s})
μi=i(sV),最终的年龄估计值就是如下式所示。使用每个区间的概率
p
p
p 和区间宽度
w
w
w 的加权和得到最终的输出年龄:
但是为了获得更高的年龄估计精度,DEX 将区间宽度设置为了
1
1
1,也就是对于一个
[
0
,
100
]
[0, 100]
[0,100] 范围内的年龄区间使用了
101
101
101 个 bin,这仍然带来了巨大的参数开销。
为了降低最后的全连层输出的分类数进而降低参数量,SSR-Net 提出多阶段的分类方法,最终的年龄估计如下式所示:
其中
K
K
K 为分层数目,
s
k
s_k
sk 为每层分类分段区间数目。
为了提高年龄估计精度,设计模型额外输出一个分段数目调整偏移量
Δ
k
\Delta_k
Δk(通过调整分段数目,达到了调整每个分段宽度的效果)和
η
\eta
η 对所处的 bin 进行调整,经过这两个额外的输出,最终的分段区间数和所在 bin 位置如下式所示:
为了充分利用人脸图像信息,SSR-Net 使用一种双分支结构,整体结构图如下图所示。这两个分支都使用
3
×
3
3×3
3×3 卷积和
2
×
2
2×2
2×2 池化,但是使用了不同的激活函数(ReLU、Tanh)和池化方法(avg、max)。对于
Δ
k
、
η
k
、
p
k
\Delta_k、\eta_k、p_k
Δk、ηk、pk 使用这两个分支的输出,经过几层卷积核全连层得到预测输出,如下图中间所示。
最终多阶段的年龄预测输出如下式所示。可以看到通过使用每个阶段、每个区间的概率加权和得到最终的年龄输出。
最终计算预测值年龄和真实年龄的
L
1
L1
L1 损失进行模型训练。
预处理中,使用人脸关键点(5个点)对人脸图像进行对齐,并且crop以及resize到 64×64 大小,这与以往使用的 224×224 小了许多。
另外默认情况下,设定使用 3 个 stage,每个 stage 分 3 个 bin。
实验结果发现,相比 SSR-Net,MobileNet 和 DenseNet 有更多的过拟合现象。(可能还是数据集太小了或者数据分布不一致)。
在 MORPH 2 数据集指标如下所示。可以看到相对非常大的模型指标仍然很有优越性。
在 MegaAge-Asian 数据集上的结果如下所示。可以看到相比 MobileNet 和 DenseNet 有不小的提升。