轻量级年龄估计模型--C3AE(旷视研究院)
文章目录
-
1. 参考资料:
-
2. 模型结构
-
3. 创新点
-
- 3.1 通过两点分布表示年龄
- 3.2 轻量级网络
-
4. 启发
1. 参考资料:
paper:Investigating the Potential of Compact Architectures in Age Prediction
code:https://github.com/StevenBanama/C3AE
2. 模型结构

将原始图像裁剪为三个不同尺寸的区域作为网络输入,并将这些区域经过CNN模型提取特征向量后进行融合。随后通过第一个全连接层(对应图中的权重矩阵W1)计算出年龄的概率分布区间;接着通过第二个全连接层(对应图中的权重矩阵W2)生成最终的年龄预测结果。
为了提高预测效果,本网络采用两个关键指标作为约束条件:一是预测年龄与真实年龄之间的L1距离;二是预测概率分布与真实概率分布之间的KL散度。具体而言,
\text{L1距离} = \sum_{i=1}^{n}|y_i - \hat{y}_i|
\text{KL散度} = \sum_{i=1}^{m}p_i \log\left(\frac{p_i}{q_i}\right)
其中y_i表示真实标签值,\hat{y}_i表示对应的预测值;p_i和q_i分别代表真实概率分布和预测概率分布在第i个类别上的取值。

在KL损失计算过程中引入了针对变量W_1的L1范式作为惩罚项的主要目的是为了抑制目标分布的稀疏性特征(基于ground truth age distribution呈现为双峰特性,在理想预测结果中各年龄段的概率值应与ground truth保持一致)


3. 创新点
3.1 通过两点分布表示年龄
在C3AE模型提出之前,在此之前已有不少年龄估计模型将正态分布用作补充约束条件。
观察到C3AE首次提出将年龄表示为两点分布后顿悟不已感慨万千:"妙哉!"
论文中的图表对两点分布进行了详细阐述并清晰展示了其概念及其应用特点,并通过直观的数据展示了其优势。
该方法具备了捕捉图像中人脸细节特征的能力。

论文中详细描述了两点分布的计算方法:
对于任意年龄y_n而言,其表达式可表示为:
y_n = \lambda_1 \cdot z_n^{(1)} + \lambda_2 \cdot z_n^{(2)}
基于给定的区间大小以及变量y_n的值,则可确定端点值的具体数值。
基于上述端点值,则可获得对应于点n的概率权重:
\lambda_1 = 1 - \frac{y_n - z_n^{(1)}}{K}
\lambda_2 = 1 - \frac{z_n^{(2)} - y_n}{K}
相应的Python代码实现如下(代码来源于参考资料中的code):
def label_to_vector(label, num_points=11, interval=10):
""" label = lambda1 * z1 + lambda2 * z2"""
# calculate which two points the label is located between
z1 = np.floor(label / interval) * interval
z2 = np.ceil(label / interval) * interval
# calculate the probability of two points
lambda1 = 1 - (label - z1) / interval
lambda2 = 1 - (z2 - label) / interval
vector = [0] * num_points
vector[int(z1 // interval)] = lambda1
vector[int(z2 // interval)] = lambda2
return vector
3.2 轻量级网络
该研究团队放弃使用现有的成熟轻量化架构(MobileNet等),而构建了一个小型常规CNN架构(特别针对小尺寸输入设计)。该模型仅包含5个卷积层,并且在性能上超越了MobileNet和ShuffleNet。

那么作者为何不用现成的轻量级网络而非自己设计一个呢?作者在文中是这样解释的:对于小尺寸图像而言,在使用深度可分离卷积时需要更多的滤波器数量才能达到与标准卷积相似的效果。从而使得计算开销减少更多。
4. 启发
在连续值回归问题中,除了L1范数之外,还可以借助两点分布模型来引入额外约束。为了提高预测稳定性,在构建模型时可采用分阶段策略进行设计。这将有助于提升预测稳定性
