论文题目:Representation Learning and Identity Adversarial Training for Facial Behavior Understanding
论文地址:https://arxiv.org/pdf/2407.11243
一、 背景
面部动作单元(Action Unit, AU)检测是面部表情分析的重要任务,因为AU可以提供关于面部肌肉运动的详细信息,帮助更精确地解码复杂的面部表情。然而,现有的AU检测方法往往面临数据不足和模型容易捕捉身份特征等问题。这篇论文提出了一种新颖的解决方案,通过引入大规模的面部图像数据集和身份对抗训练(Identity Adversarial Training, IAT),有效地提升了AU检测的准确性。
训练一个模型时,模型会尝试从数据中找到区分不同动作单元的特征。然而,数据集中同一个人的图像往往很多,而不同人的面部结构有明显差异。因此,模型可能会“偷懒”——它会通过识别这个人的特征(比如,某人的鼻子形状或脸型)来做出预测,而不是专注于学习面部表情本身的变化。这种现象被称为捷径学习。
因为模型依赖于人的身份特征(如脸的整体形状)来做预测,它可能在识别数据集中未见过的人的面部表情时表现不佳。也就是说,模型的泛化能力会受到限制——它在识别新面孔的表情时效果不好。
主体身份正则化的目的是防止模型依赖这些与身份相关的特征。我们希望模型学习到的是那些能真实反映动作单元(AU)的特征,而不是与具体某个人的脸型、鼻子形状等相关的特征。
二、实现方法
1. 大规模面部预训练
(1) 数据收集与处理
研究团队从多个公开的数据集中收集了面部图像,这些数据集包括CelebA、FFHQ、VGGFace2、CASIA-WebFace、MegaFace、EDFace-Celeb-1M、UMDFaces和LAION-Face。这些数据集中的图像涵盖了各种场景下的身份信息。例如,UMDFaces中的图像不仅捕捉了面部,还包括上半身,并且图像尺寸各不相同;而其他一些数据集(如FFHQ和CASIA-WebFace)则主要集中在面部中心。为了保证数据的一致性,研究人员丢弃了宽高比或高宽比超过1.5的图像,并将剩余的图像统一调整为224×224像素。经过处理,最终得到了一个包含900万张面部图像的数据集,称为Face9M,用于后续的自监督面部预训练。
(2) 表示学习方法
为了充分利用这些数据,研究团队采用了掩码自动编码器(Masked Autoencoder, MAE)进行自监督预训练。MAE通过随机掩码掉部分图像像素,然后让模型重建这些被掩码的部分,从而学习到更加细粒度的特征表示。这些特征对于面部行为的理解尤为重要。通过在Face9M数据集上进行MAE预训练,研究团队为下游任务(如AU检测)提供了强大的初始特征表示。
MAE,即掩码自动编码器(Masked Autoencoder),是一种自监督学习模型,常用于表示学习任务。MAE的工作原理是将输入数据的一部分(例如图像的一部分像素)进行掩码(即隐藏起来),然后要求模型从剩余的部分来重建被掩码的部分。这种方式迫使模型在学习过程中捕捉输入数据的深层结构和重要特征。
步骤:
- 掩码输入:输入图像中的一部分像素被随机掩码(隐藏)。
- 编码器:将未被掩码的部分输入到编码器,提取特征表示。
- 解码器:将编码器输出的特征表示输入到解码器中,尝试重建原始图像的掩码部分。
- 损失计算:通过计算重建的图像与原始图像之间的差异(如使用均方误差损失),来指导模型更新参数。
2. 身份对抗训练(Identity Adversarial Training, IAT)
AU数据集中个体身份的有限性使得模型很容易依赖身份特征进行预测,这样的“捷径学习”会导致模型在未见过的数据上表现不佳。为了解决这一问题,研究团队提出了身份对抗训练(IAT)方法。
1. 梯度反转层(Gradient Reversal Layer, GRL)的工作原理
假设我们有一个用于AU检测和身份ID识别的多任务模型:
- 主干网络 G f ( ⋅ ; θ f ) G_f(·; \theta_f) Gf(⋅;θf):提取输入图像的特征向量 f f f。
- 任务头 G y ( ⋅ ; θ a u ) G_y(·; \theta_{au}) Gy(⋅;θau):基于特征向量 f f f 预测AU标签。
- 身份头 G d ( ⋅ ; θ i d ) G_d(·; \theta_{id}) Gd(⋅;θid):基于特征向量 f f f 预测身份标签。
我们希望通过对抗训练,使主干网络生成的特征向量 f f f 对身份信息不敏感。
梯度反转层(GRL) 是一种特殊的层,它在正向传播时不会对数据做任何改变,但在反向传播时会将梯度反转(乘以一个负的系数)。它的作用是让主干网络和身份头之间的优化目标相反。
正向传播
-
输入图像 x x x 被传递给主干网络 G f ( ⋅ ; θ f ) G_f(·; \theta_f) Gf(⋅;θf),生成特征向量 f f f。
-
特征向量 f f f 被传递给身份头 G d ( ⋅ ; θ i d ) G_d(·; \theta_{id}) Gd(⋅;θid),身份头输出身份预测 d ′ d' d′,并计算身份损失 L i d L_{id} Lid(即预测的身份与真实身份之间的差异)。
-
特征向量 f f f 同时也被传递给任务头 G y ( ⋅ ; θ a u ) G_y(·; \theta_{au}) Gy(⋅;θau),任务头输出AU预测 y ′ y' y′,并计算AU损失 L a u L_{au} Lau。
反向传播
-
计算梯度:
- 在标准的反向传播中,我们会根据损失函数(如 L i d L_{id} Lid 和 L a u L_{au} Lau)来计算梯度,并更新相应的参数。例如,身份损失 L i d L_{id} Lid 的梯度 ∂ L i d ∂ θ i d \frac{\partial L_{id}}{\partial \theta_{id}} ∂θid∂Lid 会用于更新身份头的参数 θ i d \theta_{id} θid。
-
梯度反转层的作用:
- 梯度反转层(GRL) 被插入在主干网络 G f ( ⋅ ; θ f ) G_f(·; \theta_f) Gf(⋅;θf) 和身份头 G d ( ⋅ ; θ i d ) G_d(·; \theta_{id}) Gd(⋅;θid) 之间。
- 当我们进行反向传播时,GRL 会将从身份损失 L i d L_{id} Lid 计算得到的梯度 ∂ L i d ∂ θ f \frac{\partial L_{id}}{\partial \theta_f} ∂θf∂Lid 反转,变为 − λ ∂ L i d ∂ θ f -\lambda \frac{\partial L_{id}}{\partial \theta_f} −λ∂θf∂Lid,其中 λ \lambda λ 是一个正的常数,通常用于控制反转的力度。
- 这意味着,在反向传播过程中,主干网络的参数 θ f \theta_f θf 不再试图最小化身份损失 L i d L_{id} Lid,而是被强制去最大化 L i d L_{id} Lid。这会迫使主干网络提取的特征尽量减少与身份相关的信息,从而专注于与AU相关的特征。
举例说明
假设有一个特征向量 f f f 来自图像 x x x,它包含了某个人的身份信息。如果没有GRL,身份头会根据这个特征向量 f f f 计算 L i d L_{id} Lid 并反向传播,促使 θ f \theta_f θf 进一步优化以提取更多身份信息。
有了GRL后:
- 假设 L i d L_{id} Lid 计算得到的梯度为 ∂ L i d ∂ θ f = 0.5 \frac{\partial L_{id}}{\partial \theta_f} = 0.5 ∂θf∂Lid=0.5,通常这会增加主干网络中的身份信息。
- 通过GRL,这个梯度会被反转为 − λ ∂ L i d ∂ θ f = − 0.5 λ -\lambda \frac{\partial L_{id}}{\partial \theta_f} = -0.5\lambda −λ∂θf∂Lid=−0.5λ,这意味着现在主干网络 G f ( ⋅ ; θ f ) G_f(·; \theta_f) Gf(⋅;θf) 会被优化成减少身份信息,迫使特征向量 f f f 更加与身份无关。
最终效果
通过这种方式,梯度反转层帮助主干网络在不影响任务头(如AU检测)的情况下,去除特征向量中的身份信息,从而提高模型的泛化能力。
2. 公式讲解
首先定义了两个损失函数:
L a u L_{au} Lau (动作单元损失)
L a u = E ( x , y ) ∼ D s [ CE ( G y ( G f ( x ; θ f ) ; θ a u ) , y ) ] L_{au} = \mathbb{E}_{(x,y) \sim D_s} [\text{CE}(G_y(G_f(x; \theta_f); \theta_{au}), y)] Lau=E(x,y)∼Ds[CE(Gy(Gf(x;θf);θau),y)]
- ( x , y ) (x, y) (x,y):表示从数据集 D s D_s Ds 中采样的图像 x x x 及其对应的AU标签 y y y。
- G f ( x ; θ f ) G_f(x; \theta_f) Gf(x;θf):主干网络(Backbone)提取的特征向量 f f f,参数 θ f \theta_f θf 是主干网络的参数。
- G y ( f ; θ a u ) G_y(f; \theta_{au}) Gy(f;θau):任务头(Task Head),接收特征向量 f f f 并输出预测的AU标签,参数 θ a u \theta_{au} θau 是任务头的参数。
- CE ( ⋅ , ⋅ ) \text{CE}(·, ·) CE(⋅,⋅):交叉熵损失函数,用于衡量预测的AU标签与真实标签 y y y 之间的差异。
- L a u L_{au} Lau:表示模型在AU检测任务上的损失,目标是最小化这个损失,使模型更准确地预测AU标签。
L i d L_{id} Lid (身份损失)
L i d = E ( x , d ) ∼ D s [ CE ( G d ( G f ( x ; θ f ) ; θ i d ) , d ) ] L_{id} = \mathbb{E}_{(x,d) \sim D_s} [\text{CE}(G_d(G_f(x; \theta_f); \theta_{id}), d)] Lid=E(x,d)∼Ds[CE(Gd(Gf(x;θf);θid),d)]
- ( x , d ) (x, d) (x,d):表示从数据集 D s D_s Ds 中采样的图像 x x x 及其对应的身份标签 d d d。
- G f ( x ; θ f ) G_f(x; \theta_f) Gf(x;θf):同样的主干网络提取的特征向量 f f f。
- G d ( f ; θ i d ) G_d(f; \theta_{id}) Gd(f;θid):身份头(ID Head),接收特征向量 f f f 并输出预测的身份标签,参数 θ i d \theta_{id} θid 是身份头的参数。
- L i d L_{id} Lid:表示模型在身份识别任务上的损失,目标是在对抗训练中最大化这个损失,使模型去除身份信息。
优化目标
在对抗训练中,我们的目标是同时优化模型的三个部分:主干网络 G f G_f Gf,任务头 G y G_y Gy 和身份头 G d G_d Gd。具体目标如下:
目标1: 最小化 L a u L_{au} Lau 并最大化 L i d L_{id} Lid
( θ f ∗ , θ a u ∗ ) = arg min θ f , θ a u [ L a u ( D s ; θ f , θ a u ) − λ L i d ( D s ; θ f , θ i d ∗ ) ] (\theta_f^*, \theta_{au}^*) = \arg \min_{\theta_f, \theta_{au}} \left[ L_{au}(D_s; \theta_f, \theta_{au}) - \lambda L_{id}(D_s; \theta_f, \theta_{id}^*) \right] (θf∗,θau∗)=argθf,θaumin[Lau(Ds;θf,θau)−λLid(Ds;θf,θid∗)]
- L a u L_{au} Lau 的最小化:通过优化 θ f \theta_f θf 和 θ a u \theta_{au} θau,使得模型在AU检测任务上的表现尽可能好,即最小化 L a u L_{au} Lau。
- L i d L_{id} Lid 的最大化:通过引入 λ L i d \lambda L_{id} λLid 项,并优化 θ f \theta_f θf,试图让主干网络在不影响AU检测任务的前提下,去除身份信息。 λ \lambda λ 是一个正的权重,控制了最大化 L i d L_{id} Lid 的力度。
这个目标函数通过最小化 L a u L_{au} Lau(即使AU检测更准确)并同时最大化 L i d L_{id} Lid(即减少身份相关信息)来优化主干网络 G f G_f Gf 和任务头 G y G_y Gy 的参数 θ f \theta_f θf 和 θ a u \theta_{au} θau。
目标2: 最小化 L i d L_{id} Lid
θ i d ∗ = arg min θ i d L i d ( D s ; θ f ∗ , θ i d ) \theta_{id}^* = \arg \min_{\theta_{id}} L_{id}(D_s; \theta_f^*, \theta_{id}) θid∗=argθidminLid(Ds;θf∗,θid)
- 这个目标是通过最小化 L i d L_{id} Lid 来优化身份头 G d G_d Gd 的参数 θ i d \theta_{id} θid。这部分的优化在模型的身份识别任务中单独进行,目标是尽可能准确地识别身份。
对抗训练中的最小化与最大化:
对抗训练的核心思想是让主干网络学到的特征尽量少包含身份信息,以增强模型的泛化能力,特别是在AU检测任务中。
主干网络(
G
f
G_f
Gf)的目标是最大化身份损失
L
i
d
L_{id}
Lid,这意味着它试图生成的特征尽量不包含身份信息。这是通过梯度反转层(GRL)实现的。
同时,身份头(
G
d
G_d
Gd)依然在最小化
L
i
d
L_{id}
Lid,试图从特征中尽可能地预测出身份。这两个目标互相对抗,从而达到对抗训练的效果。
三、 实验与结果
通过在多个标准数据集上的实验,研究团队验证了他们的方法在AU检测任务中的优越性。特别是他们的FMAE-IAT方法在BP4D、BP4D+和DISFA等数据库上达到了新的F1评分记录,显著超过了之前的工作。
四、 总结与未来工作
这篇论文提出了一种基于大规模预训练和身份对抗训练的面部动作单元检测方法。这种方法不仅提高了模型的准确性,还增强了模型的泛化能力。未来的研究方向包括进一步优化模型,探索使用更多的身体特征(如全身姿态)来进行表情识别,以及引入对抗训练和半监督学习来进一步提升模型性能。