论文标题:POSTER V2: A simpler and stronger facial expression recognition network
论文地址:https://arxiv.org/pdf/2301.12149v2
这篇论文主要提出了一种名为POSTER++的改进版面部表情识别(FER)网络,相较于原有的POSTER方法,POSTER++在性能和计算效率上都有显著提升。以下是论文的主要内容和贡献的总结:
研究背景
面部表情识别是人机交互中一个重要的研究领域。POSTER方法通过结合面部关键点和图像特征,在FER任务中取得了良好的效果,但其复杂的架构导致了较高的计算成本。
POSTER++的改进
1. 二流设计简化:
在原始的POSTER架构中,二流设计包括两个关键的交叉分支:
- 图像到关键点分支(image-to-landmark branch):图像特征作为查询,用于与关键点特征进行交叉注意力计算。
- 关键点到图像分支(landmark-to-image branch):关键点特征作为查询,用于与图像特征进行交叉注意力计算。
这两个分支旨在解决面部表情识别中的类内差异和类间相似性问题。
为了评估这两个分支对FER性能的贡献,作者进行了消融实验,分别移除了图像到关键点的分支和关键点到图像的分支。
结果显示:
移除图像到关键点分支后,准确率仅有小幅下降,表明此分支对整体性能的影响较小。相比之下,移除关键点到图像分支后的性能下降更为明显,表明这个分支在面部表情识别中发挥了更为关键的作用。
尽管图像到关键点的分支在某种程度上对FER有帮助,但它带来了较大的计算资源消耗。这个分支需要额外的计算来处理从图像特征到关键点特征的查询,这会增加模型的复杂度和推理时间。
鉴于消融实验的结果和计算资源的考虑,作者决定在POSTER++中移除图像到关键点的分支。通过这种简化,POSTER++在保持高效性能的同时,大幅降低了计算复杂度。
2. 基于窗口的交叉注意力机制:
传统的注意力机制(如Transformer中的自注意力机制)在计算注意力时,会对整个输入序列或图像的所有部分进行全局计算。这种全局自注意力机制虽然能够捕捉到长距离依赖关系,但其计算复杂度是平方级的,具体来说,计算复杂度为 O ( N 2 ⋅ D ) O(N^2 \cdot D) O(N2⋅D) ,其中 N 是输入序列的长度(或图像中token的数量),𝐷 是特征的维度。这种全局计算导致的计算成本极高,难以实际应用。因此,窗口注意力机制被提出。核心思想是在图像或特征图中划分出多个不重叠的局部窗口,然后在每个窗口内独立地应用自注意力机制。具体步骤如下:
1. 划分窗口:
图像特征矩阵
X
img
∈
R
N
×
D
X_{\text{img}} \in \mathbb{R}^{N \times D}
Ximg∈RN×D,其中 N 是token数量,假设一个图像被表示为100个token,N=100 。 D是每个token的特征维度:每个token都包含D维度的特征。
将整个图像的100个token划分为10个窗口,每个窗口包含
M
=
N
10
M = \frac{N}{10}
M=10N 个token。 这意味着每个窗口的形状为
Z
img
∈
R
M
×
D
Z_{\text{img}} \in \mathbb{R}^{M \times D}
Zimg∈RM×D,其中 M = 10 。这10个窗口共同覆盖了整个图像的100个token,每个窗口专注于图像的一部分。
2. 应用局部自注意力:
在每个窗口内部独立地应用self-attention机制。对于每个窗口执行与标准self-attention机制相同的操作,包括,Query、Key、Value的计算,以及注意力得分的计算。
基本符号和概念:
z lm z_{\text{lm}} zlm 和 z img z_{\text{img}} zimg:分别代表关键点特征和图像特征的局部窗口。
w q , w k , w v , w o w_q, w_k, w_v, w_o wq,wk,wv,wo:这些是线性映射矩阵,用于将输入特征映射到查询(query)、键(key)、值(value)和输出(output)空间。
θ ( ⋅ ) \theta(\cdot) θ(⋅):表示 softmax 函数,通常用于将分数转换为概率分布。
b
b
b:这是相对位置偏置矩阵,帮助模型在不同位置之间引入相对位置信息。
具体操作步骤
线性映射:
q = z lm w q q = z_{\text{lm}} w_q q=zlmwq:关键点特征通过线性映射得到查询向量 q q q。
k = z img w k k = z_{\text{img}} w_k k=zimgwk:图像特征通过线性映射得到键向量 k k k。
v = z img w v v = z_{\text{img}} w_v v=zimgwv:图像特征通过线性映射得到值向量 v v v。
计算注意力得分:
o ( i ) = θ ( q ( i ) k ( i ) T d + b ) v ( i ) o^{(i)} = \theta\left(\frac{q^{(i)} k^{(i)T}}{\sqrt{d}} + b\right) v^{(i)} o(i)=θ(dq(i)k(i)T+b)v(i):
对于每个注意力头
i
i
i:
首先计算查询向量
q
(
i
)
q^{(i)}
q(i) 和键向量
k
(
i
)
k^{(i)}
k(i) 的点积,然后除以
d
\sqrt{d}
d(这里
d
d
d 是查询/键的维度,用于缩放分数)。
将这个点积加上相对位置偏置
b
b
b,并应用 softmax 函数
θ
(
⋅
)
\theta(\cdot)
θ(⋅) 转换为权重。
这些权重用于加权值向量
v
(
i
)
v^{(i)}
v(i),从而得到输出向量
o
(
i
)
o^{(i)}
o(i)。
合并多头注意力输出:
o
=
[
o
(
1
)
,
…
,
o
(
I
)
]
w
o
o = [o^{(1)}, \dots, o^{(I)}] w_o
o=[o(1),…,o(I)]wo:
所有注意力头的输出
o
(
i
)
o^{(i)}
o(i) 被连接在一起(通过
[
⋅
]
[\cdot]
[⋅] 操作),然后通过映射矩阵
w
o
w_o
wo 线性组合,得到最终的输出向量
o
o
o。
由于注意力仅限于窗口内部,计算复杂度从全局自注意力的平方级 O ( N 2 ⋅ D ) O(N^2 \cdot D) O(N2⋅D) 降低到线性级 O ( N ⋅ M 2 ⋅ D ) O(N \cdot M^2 \cdot D) O(N⋅M2⋅D),其中 M M M 是窗口的大小。
3. 计算复杂度分析
窗口注意力机制通过限制注意力计算的范围,有效地降低了计算复杂度。如果将输入划分为 N M 2 \frac{N}{M^2} M2N 个窗口,则每个窗口的计算复杂度为 O ( M 2 ⋅ D ) O(M^2 \cdot D) O(M2⋅D)。整体计算复杂度为:
O ( N M 2 ⋅ M 2 ⋅ D ) = O ( N ⋅ D ) O\left(\frac{N}{M^2} \cdot M^2 \cdot D\right) = O(N \cdot D) O(M2N⋅M2⋅D)=O(N⋅D)
与全局自注意力相比,这种方法将计算复杂度从平方级降低到了线性级,使得在处理大规模图像或长序列时更为高效。
3. 实验结果
通过在多个标准数据集上的实验,POSTER++在保持或提升FER性能的同时,大幅减少了计算资源的消耗。例如,在RAF-DB数据集上,POSTER++达到了92.21%的准确率,同时只用了8.4G的浮点运算(FLOPs)和43.7M的参数(Param)。
4. 结论
POSTER++通过对POSTER架构的多项优化,成功实现了一个更简单、更强大的面部表情识别网络。它在性能和计算效率之间达到了更好的平衡,为未来的FER研究和应用提供了新的方向。