Purify then Guide: Rethinking Domain Generalization for Multimodal Face Anti-Spoofing¶
会议: ECCV 2026
论文: ECCV 2026
代码: https://github.com/murInJ/MMDA
领域: 人体理解
关键词: 人脸活体检测;多模态;领域泛化;CLIP;差分注意力
一句话总结¶
本文把多模态领域泛化人脸活体检测(FAS)重新表述为「先纯化、再引导」:先用同域跨样本的差分注意力 MD2A 减掉融合特征里与域/模态相关的公共残差,再把纯化后的 RGB/IR/DEPTH 特征软对齐到 CLIP 文本定义的 real/spoof 子空间(RS2),并用 U 形双空间适配(U-DSA)在增强任务能力的同时保住预训练几何,在 WMCA/CeFA/PADISI/SURF 上把平均 HTER 从 13.63% 降到 4.00%。
研究背景与动机¶
人脸识别已经进入支付、门禁、监控这些高风险场景,活体检测(FAS)因此成为必需的一环。为了让判别更可靠,近年的系统越来越多地同时采集 RGB、红外(IR)和深度(DEPTH)三路信号——外观、几何、材质三类线索互补,确实比单模态更容易把真人脸和攻击道具分开。但多模态 FAS 的跨域泛化依然很差:换相机、换光照环境、换攻击类型,性能就大幅下滑。而且多模态跨域比单模态多出两重耦合的漂移:一是跨模态关系本身(RGB 与 IR 的互补程度、可信度、尺度)随域变化,融合表示因此跟着漂移;二是只在有限源域上微调学出的新决策边界,会被过度平滑以容纳各种「域 × 模态」组合,导致困难的目标样本恰好落在边界附近(论文图 1(b) 的示意)。
现有方法大多直接在这个有噪声的融合空间上做对齐或重学边界:MMDG 分析领域泛化目标与多模态融合之间的冲突,用不确定性矫正和模态再平衡来缓解;DADM 则对域和模态做双重对齐,是目前最强的多模态基线。问题在于,融合特征里「能区分真假的线索」和「域/模态伪影」是纠缠在一起的,直接对齐等于把有用和无用的模式一起强行拉平;论文的两个诊断实验也支持这一点:按类统计每个模态与融合表示的嵌入,ANOVA 式的组间/总方差比 \(r=\text{Var}_{between}/\text{Var}_{total}\) 显示跨域差异(尤其是真人样本)带有明显的均值平移成分,说明存在一个近似加性的偏置;同域样本对在 \(\ell_2\) 与余弦距离下都显著近于跨域样本对(bootstrap 置信区间不重叠),说明局部邻域在同一组内是相对稳定的。既然同组内的邻域稳定、跨组差异又主要表现为平移,那么差异里有相当一部分是可以被「同组条件」估计出来并提前减掉的组共享残差,而不该留给后面的对齐去硬扛。
于是本文把融合特征看成「组不变的语义 + 组相关偏置」的叠加,先做纯化把偏置项压掉,再把干净的表示引导到一个稳定的真/假语义结构里——前者的载体是 MD2A(Modality-Domain Joint Differential Attention),后者由 RS2(Representation Space Soft alignment)和 U-DSA(U-shaped Dual Space Adaptation)共同完成:RS2 负责软引导,U-DSA 负责在加深任务适配的同时不破坏 CLIP 的预训练几何。核心 idea:把多模态域泛化 FAS 拆成「先纯化、再引导」两步——用同域跨样本的差分注意力估计并减去域/模态共享残差,再把纯化后的特征软对齐到 CLIP 文本空间里由多个 prompt 张成的 real/spoof 子空间,并用 U 形双空间适配让任务适配不反过来毁掉预训练几何。
方法详解¶
整体框架¶
MMDA 的输入是同一批样本的 RGB/IR/DEPTH 三路图像,加上一组描述真人与攻击的文本描述;输出是每个样本「活体 / 攻击」的二分类判决。三路图像与文本分别送入 CLIP 的图像编码器和文本编码器,其中文本编码器全程冻结,图像编码器在 FAS 数据上和新增模块一起微调。多模态视觉嵌入先经 MD2A 融合并去噪——这一步是「纯化」,它不改变网络主干,只在融合后的表示上做减法;随后表示进入 U-DSA,沿向下的支路逐层做参数高效的适配(每层是一个 MoE),再沿反馈支路把深层表示重映射回浅层空间,而 RS2 作为一个逐层施加的软约束把各层表示拉向文本定义的 real/spoof 子空间——这两步合起来是「引导」。最后,浅层共享分类器在适配后的视觉嵌入上给出判决。
需要说明的是下面框架图里 RS2 与 U-DSA 画成一前一后,是为了和关键设计的顺序一一对应;实现上 RS2 不是一个独立的前向模块,而是一个逐层作用的损失约束,作用在 U-DSA 各层的中间表示上。
%%{init: {'flowchart': {'rankSpacing': 24, 'nodeSpacing': 28, 'padding': 6, 'wrappingWidth': 400}}}%%
flowchart TD
A["RGB / IR / DEPTH 与文本描述"] --> B["CLIP 图像编码 + 多模态融合"]
B --> C["MD2A<br/>同域跨样本差分去噪"]
C --> D["RS2<br/>对齐 real/spoof 文本子空间"]
D --> E["U-DSA<br/>深层适配 + 回映射浅层"]
E --> F["共享分类器 → 活体 / 攻击"]
关键设计¶
1. MD2A:把差分注意力的「噪声分支」换成同域的另一个样本
差分注意力(Differential Attention, DA)原本的用法是:对同一样本的两个视图各跑一支注意力,把两支的响应相减,从而抑制样本级的虚假模式。MD2A 只改了一处——噪声分支不再喂同一个样本的另一个视图,而是喂同域内另一个样本的多模态特征。具体地,设一个小批次的融合特征为 \(X=\{x_0,\dots,x_b\}\)、对应的域标签为 \(D\),对每个 \(x_i\) 在同域中随机挑一个样本 \(\tilde x_i\)(有同域的其他样本时要求 \(\tilde x_i \neq x_i\),没有时退化为 \(\tilde x_i = x_i\)),把 \((x_i,\tilde x_i)\) 按特征维拼接后统一投影,再切分成主分支 \((Q,K)\) 与差分分支 \((Q',K')\),得到两套注意力图 \(A\) 与 \(A'\),最终的纯化输出为
其中 \(\lambda\) 沿用原版差分注意力的参数化(由可学习向量决定,且随层索引变化,论文取 \(l=14\);该式在缓存原文中 OCR 受损,⚠️ 精确形式以原文为准)。这一步为什么成立,关键在于「两支共享了什么、又在什么上不同」:主分支与差分分支共享同一个域条件和同一套模态配置,只在身份和攻击内容上不同,于是两支的差分响应主要捕捉的是域与模态相关的成分,而不是区分真假的语义。把这个响应当作残差减掉,就等于在全批次范围内减去了同域共模成分,剩下的表示更突出与 spoof 判别相关的线索。当所有 \(\tilde x_i=x_i\) 时,MD2A 退化为原始差分注意力,因此它严格包含旧方法作为特例。论文还声称可以从理论上说明 MD2A 能够收紧多模态 FAS 的泛化误差界(证明未在正文展开,⚠️ 细节见原文/附录)。
2. RS2:对齐到一个由多 prompt 张成的子空间,而不是单个 prompt
纯化之后的表示需要被「引导」到一个稳定的真/假结构里,但选什么当对齐目标是有讲究的:用有限源域数据自己定义一个目标,等于把我们想消除的偏见又编码回去;而把视觉特征硬对齐到单个文本嵌入,又会把本来丰富的 spoof 流形压塌成一个点。RS2 因此把对齐目标从「点」换成「子空间」:给定一组 caption,用冻结的 CLIP 文本编码器得到文本嵌入集合 \(T\),对每个视觉嵌入 \(v_i\),只要求它靠近同类文本嵌入 \(T(\hat y_i)\) 张成的区域,度量取到同类文本嵌入的最小余弦距离
再对这个基于距离的分数做平滑二分类交叉熵:标签先做 \(\epsilon=0.2\) 的平滑(真类取 \(1-\epsilon\)、另一类取 \(\epsilon\)),避免模型追逐过度自信的目标;同时,视觉嵌入与文本嵌入共用一个二分类器,两边都接受判别监督。两路损失相加即为 \(\mathcal{L}_{\text{RS2}}=\mathcal{L}_{\text{cls}}+\mathcal{L}_{\text{align}}\)。这样做的收益是双向的:最小值操作让特征只需落进「该类子空间」的任意合理位置,不必牺牲细粒度线索去贴合某一个 prompt;而共享分类器把文本侧也纳入判别监督,使文本嵌入不只是被动的锚点。
3. U-DSA:深层适配、浅层回映射,别把 CLIP 几何改坏
RS2 的前提是 CLIP 表示空间本身的结构还有意义,但在有限的 FAS 数据上做任务适配恰恰最容易把这个结构扭坏——不加深层适配,特征提取器缺乏任务能力;激进地微调深层,又会扭曲预训练表示空间、把它的判别边界一起带偏。U-DSA 用两件事化解这个矛盾:一是把 RS2 逐层施加,二是搭一条 U 形的双空间通路,把深层的适配结果搬回更浅、更领域不变的层。向下的支路逐层做轻量适配,\(v_i=\text{Adapt}_i(v_{i-1})\),每层的 \(\text{Adapt}_i\) 是一个参数高效的 MoE;反馈支路则从最深一层开始逐级把深层表示映射回第 \(i\) 层的空间,\(v'_i = v_i + \text{Remap}_i(v'_{i+1})\),同样用 MoE 实现。RS2 的损失同时作用在 \(v_i\) 与 \(v'_i\) 上,等价于要求每一层的表示都别漂离文本定义的 real/spoof 结构。结果是深层负责捕捉任务特异的多模态模式,反馈路径加逐层约束则把整体表示锚在预训练几何附近,最终分类器工作在一个「既被适配增强、又被原始真假分离锚定」的空间里。论文的实验也印证了这种不对称作法:U-DSA 深度增加到 7 层时 AUC 分布整体向高值移动(深层适配确实有用),但在 1 到 7 层的所有配置里,取得最佳性能的层几乎都是浅层或中层,最深一层从未成为最佳。
一个完整示例:一个 mini-batch 里的纯化与引导¶
设一个 mini-batch 有 576 个多模态样本,来自 3 个源域。对其中来自域 A 的某个样本 \(x_i\),MD2A 在同一个 batch 里再找一个域 A 的样本 \(x_j\),把两者的融合特征拼起来,投影后切分给主分支和差分分支;两支各算一次注意力,相减之后,\(x_i\) 的表示里那些「域 A 的采集特性 + 这套模态组合的固有偏置」被大幅抵消,留下的是身份与攻击方式相关的部分。这一步在训练和推理阶段都照做(论文明确指出拼接配对在训练与推理中都会执行,见下面「局限」的讨论)。纯化后的表示随后沿 U-DSA 向下走 7 层 MoE 适配,每层都会被 RS2 拉一次;最深一层的表示再沿反馈支路逐级重映射回浅层空间,分类器最终在这个被搬回来、同时又被逐层约束过的表示上给出活体/攻击判决。
损失函数 / 训练策略¶
训练目标就是把 RS2 的软对齐损失(平滑的 BCE 距离项 + 共享分类器的判别项)逐层累加,配合 CLIP 图像编码器与 MD2A / U-DSA 模块的联合微调;文本编码器始终冻结。主干是 CLIP ViT-B/16,输入统一缩放到 224×224、切成 14×14 个 patch token、嵌入维度 512;优化器 AdamW,学习率 5×10⁻⁶,权重衰减 1×10⁻³,batch size 576,所有协议统一训练 100 个 epoch;除非特别说明,U-DSA 用 7 层。论文 §3 说分类器同时作用在视觉嵌入与文本嵌入上,§4.1 又说分类器作用在适配后的视觉嵌入上,⚠️ 两处表述略有出入,以原文实现为准。论文没有给出「总损失 = 各层 RS2 之和」的显式公式,这里按 §3.3 的文字描述归纳,⚠️ 权重细节以原文为准。
实验关键数据¶
主实验¶
实验在 WMCA (W)、CASIA-CeFA (C)、PADISI (P)、CASIA-SURF (S) 四个多模态 FAS 基准上做跨数据集测试,指标是 HTER(越低越好)与 AUC(越高越好)。协议一为完整模态:训练与测试都用全部可用模态,做四组留一域划分(CPS→W 表示在 C/P/S 上训练、在 W 上测试)。
| 方法 | CPS→W HTER | CPW→S HTER | CSW→P HTER | PSW→C HTER | 平均 HTER ↓ | 平均 AUC ↑ |
|---|---|---|---|---|---|---|
| FLIP(单模态 DG 最强) | 13.19 | 11.73 | 17.39 | 22.14 | 16.11 | 90.83 |
| MMDG | 12.79 | 15.32 | 18.95 | 29.93 | 19.24 | 87.96 |
| DADM(此前最好) | 11.71 | 6.92 | 19.03 | 16.87 | 13.63 | 92.96 |
| CLIP(零样本式基线) | 14.55 | 18.17 | 24.13 | 38.33 | 24.63 | 83.00 |
| MMDA(本文) | 1.22 | 4.21 | 4.34 | 6.25 | 4.00 | 98.94 |
协议二在协议一的基础上引入测试时缺失模态(缺 DEPTH / 缺 IR / 两者都缺),协议三只用两个数据集当源域,模拟源域稀缺。
| 协议 | 测试条件 | 此前最好(DADM)HTER / AUC | MMDA HTER / AUC |
|---|---|---|---|
| 协议二 | 缺失 DEPTH | 21.56 / 85.17 | 11.10 / 93.97 |
| 协议二 | 缺失 IR | 20.82 / 85.28 | 5.98 / 98.30 |
| 协议二 | 缺失 DEPTH + IR | 22.61 / 84.04 | 13.36 / 93.74 |
| 协议二 | 平均 | 21.66 / 84.83 | 10.14 / 95.33 |
| 协议三 | CW→PS | 12.61 / 93.81 | 7.52 / 96.84 |
| 协议三 | PS→CW | 20.40 / 89.51 | 6.30 / 98.35 |
消融实验¶
MD2A 的消融在 PS→CW 划分上比较了两种适配器骨架(Dense 与 MoE)× 四种融合注意力配置;RS2 的消融以 MoE + MD2A 为基线,比较三种对齐方案。
| 配置 | HTER ↓ | AUC ↑ | 说明 |
|---|---|---|---|
| Dense 适配器(基线) | 23.26 | 84.92 | 无额外注意力 |
| Dense + MHSA | 25.85 | 82.95 | 标准多头自注意力反而掉点 |
| Dense + DA | 16.49 | 92.05 | 原版差分注意力 |
| Dense + MD2A | 13.47 | 94.20 | 同域跨样本差分 |
| MoE 适配器(基线) | 22.92 | 85.84 | 无额外注意力 |
| MoE + MHSA | 12.83 | 93.25 | |
| MoE + DA | 12.72 | 93.89 | |
| MoE + MD2A | 9.70 | 95.23 | 消融最优配置 |
| MoE + MD2A,替换为 Vanilla 对齐 | 9.70 | 95.23 | 硬对齐到对应文本 prompt |
| MoE + MD2A,替换为 Smooth 对齐 | 9.17 | 96.32 | 加入标签平滑 |
| MoE + MD2A,RS2 对齐(完整) | 8.88 | 97.20 | 平滑 + 最近文本子空间 + 共享分类器 |
论文还用「配对交换不变性」检验 MD2A 到底是在做共模抑制还是在做任意的语义减法:固定 \(x\),只把配对样本 \(\tilde x\) 在同域 / 随机 / 跨域三种策略间互换,每种重复配对 10 次,统计残差的批内方差 Var[R]、判决的批内方差 Var[z],以及特征与域标签之间的 HSIC(越小说明域依赖越弱)。
| 配对策略 | Var[R] | Var[z] | 说明 |
|---|---|---|---|
| 同域配对 | 4.31×10⁻⁷ | 1.672×10⁻³ | 残差最稳定 |
| 随机配对 | 7.48×10⁻⁷ | 1.662×10⁻³ | |
| 跨域配对 | 6.94×10⁻⁷ | 1.728×10⁻³ | 均值残差出现明显漂移(漂移量 9.55×10⁻⁷) |
关键发现¶
- MD2A 是收益最大的单点改动:在 MoE 骨架上把 HTER 从 22.92% 压到 9.70%(-13.22),而且它带来的增益明显超过原版 DA(12.72→9.70),说明「噪声分支换成同域另一个样本」这个改法本身而不只是「用了差分注意力」在起作用。
- 有趣的是标准多头自注意力在 Dense 骨架上反而有害(23.26→25.85):加一个不带任何去噪归纳偏置的注意力模块,只会把域/模态噪声也一起融合进来。
- RS2 相对「硬对齐 + 平滑」的增益在 HTER 上只有 0.29,但 AUC 从 96.32 涨到 97.20(+0.88),说明子空间软对齐主要改善的是分数排序质量而非单纯压低阈值处的错误率;论文据此认为「塑造 CLIP 空间的几何」比「只更新权重或对齐到单 prompt」更有效。
- 缺失模态方面,缺 IR 时 MMDA 仍有 5.98% HTER / 98.30% AUC,论文称已非常接近完整模态的水平——纯化后的 RGB 与 DEPTH 特征加上 RS2 软对齐可以补上 IR 的缺口;缺 DEPTH 则掉得更明显(11.10% / 93.97%),说明几何信息更难从 RGB 与 IR 中恢复。
- 配对交换测试支持「共模抑制」的解释:同域配对的残差方差最小,换成跨域配对时残差均值出现 9.55×10⁻⁷ 的系统性漂移;减去残差后特征与域标签的 HSIC 从 1.596 降到 0.269(降幅 1.327),而判决方差 Var[z] 仍保持在 10⁻³ 量级,说明去噪没有把判决本身搅乱。
- t-SNE 上,微调后的 CLIP 基线里同类的跨域样本聚成若干互相重叠的簇,而 MMDA 的类间分离更干净、类内跨域混得更充分;沿 U-DSA 从输入到最深层重映射后的输出,样本逐步收得更紧,说明适配在精修特征的同时没有漂离稳定的判决结构。
亮点与洞察¶
- 把差分注意力的「同一样本两个视图」改成「同一个域的另一个样本」,是一个改动极小的替换,却把「样本级噪声抑制」升级成了「组级公共残差抑制」。这个思路可以迁移到任何批次效应明显的任务上:跨中心医学影像、跨传感器检测、跨被试的生理信号建模,只要 mini-batch 里还能凑出同组样本,就能用同样的差分结构估计并减掉共模成分。
- 用「交换配对样本 + 三条不变性指标」来验证去噪机制,而不是只看 HTER 涨了多少,是这篇论文里最值得学的一处实验设计:Var[R] 看估计是否稳定、Var[z] 看判决是否被搅动、HSIC 看域依赖是否真的下降,三者一起把「机制确实按设想在跑」和「结果变好」区分开了。
- 把对齐目标从单点扩展到子空间(取到同类文本嵌入的最小距离),本质上是在给多模态语义留出「合法的模糊性」:真人脸的表达方式本来就多样,硬贴一个 prompt 会把这种多样性当作误差惩罚掉。任何用 CLIP 做细粒度二分类的工作都可以直接套用这个技巧。
- U-DSA 的 U 形结构给出了一个可复用的经验规律——「适配要往深走,但判决要在浅层做」:论文图 4 显示在 1 到 7 层的各种深度配置下,最优层几乎总是浅层或中层,最深一层从未最佳。这条规律对任何「在预训练模型上微调 + 需要跨域泛化」的场景都值得先试一下。
局限与展望¶
- 作者承认的局限是 MoE 层在预训练空间里对优化比较敏感,这一点在训练稳定性上应该会体现出来(论文未给训练曲线或方差),未来想往更稳定、更自适应的双空间适配走。
- 实现上的一个隐性问题:MD2A 的配对(Concat)在训练和推理阶段都会执行,这意味着测试时单个样本无法独立推理,必须凑出一个含有同域同伴的 batch,并且需要知道测试样本的域标签。论文没有说明测试时域标签从何而来、配对池如何维护,也没报告 batch size 变小(同域同伴不足)时的性能退化。⚠️ 这一点对实际部署(尤其流式单帧验证)是个不小的约束。
- 协议三只有 CW→PS 与 PS→CW 两组两源域划分,源域数量的变化只覆盖到「2 源」与「3 源」两档;跨攻击类型、跨种族的更极端 shift 没有被单独拆出来分析。
- 论文宣称 MD2A 「理论上能收紧泛化误差界」,但正文只给了一句结论,没有给出假设与证明思路。⚠️ 以原文/附录为准,读者不宜把它当作本文方法已获得理论保证的证据。
- 消融的组合是 2 种适配器 × 4 种注意力/对齐,缺少配对策略(同域 vs 随机 vs 跨域)作为训练变量时的端到端性能对比——表 6 只做了推理期的配对交换分析,训练时用随机配对会掉多少分并未报告。
相关工作与启发¶
- vs MMDG(CVPR 2024):MMDG 分析领域泛化目标与多模态融合的冲突,用不确定性矫正和模态再平衡在融合特征层面做缓解;本文认为矛盾的根源在于「融合特征里语义与伪影纠缠」,因此先把域/模态共享残差减掉再做对齐。结果是平均 HTER 19.24% 对 4.00%,但要注意 MMDG 未使用 CLIP 预训练,这个差距里也包含骨干的贡献。
- vs DADM:DADM 同时对齐域与模态,是本文之前最强的基线;本文沿用其协议,在最难的 PS→CW 上把 HTER 从 20.40% 压到 6.30%,且不依赖额外的模态专用 dropout 或为缺失模态重训。
- vs Differential Transformer:原版差分注意力在同一个样本的两个视图上做差分以抑制样本级噪声;MD2A 把噪声分支换成同域另一个样本,把「样本级」提升到「组级」,并保留了原版作为 \(\tilde x_i = x_i\) 时的退化特例。
- vs FLIP 等 CLIP 视觉语言 FAS:这类方法主要关心如何更新或正则化预训练权重与 prompt,且多为单模态或简单 late fusion;本文关注的是预训练表示空间本身的几何如何被利用与保留,并把这一思路扩到多模态融合与缺失模态场景。
评分¶
- 新颖性: ⭐⭐⭐⭐ 「同域跨样本配对」这个改动本身很小,但它把差分注意力的适用层级从样本级搬到组级,并把「先纯化再对齐」整理成了一条清晰的原则;子空间软对齐是已有思想的合理延伸,不算首创。
- 实验充分度: ⭐⭐⭐⭐ 四个数据集、三类协议(完整模态 / 缺失模态 / 少源域)加上机制验证级的配对交换分析,覆盖面在 FAS 领域内属上乘;扣分在缺少训练期配对策略的端到端消融与部署相关的 batch 敏感度分析。
- 写作质量: ⭐⭐⭐⭐ 动机链有诊断实验支撑(方差比 + 同域邻域稳定性),方法叙述清楚;多处公式在文中排版混乱(部分疑为排版/OCR 问题),且 §3 与 §4.1 对分类器输入的描述不一致,读者需要留意。
- 价值: ⭐⭐⭐⭐ 平均 HTER 13.63%→4.00%、AUC +5.98 的跨域提升幅度很大,且「先纯化再引导」与「深层适配、浅层判决」两条经验对多模态泛化类任务有直接参考价值。