论文解读:RECCE — 端到端重建-分类学习的人脸伪造检测

论文:End-to-End Reconstruction-Classification Learning for Face Forgery Detection

作者:Junyi Cao, Chao Ma, Taiping Yao, Shen Chen, Shouhong Ding, Xiaokang Yang

会议:CVPR 2022

机构:上海交通大学 VISION Lab + 腾讯优图

代码:https://github.com/VISION-SJTU/RECCE


一、背景与问题

1.1 Deepfake 检测的挑战

人脸伪造(Deepfake)检测是计算机安全领域的重要任务。随着 FaceSwap、DeepFakes、Face2Face、NeuralTextures 等伪造工具的迭代,生成的假脸越来越逼真,检测难度持续增大。

1.2 现有方法的局限

传统检测方法主要关注特定的伪造痕迹

方法类别 关注的伪造模式 局限
噪声分析 伪造区域噪声不一致 新型伪造可能不产生明显噪声差异
纹理特征 伪造边界纹理异常 后处理(压缩、模糊)可消除
频域特征 频域伪造伪影 跨数据集泛化差
生物信号 心跳、眨眼不自然 对高质量伪造无效

核心痛点 :大多数方法针对已知的特定伪造模式,对训练中未见过的新型伪造方式泛化能力弱。

1.3 RECCE 的新视角

RECCE 不关注"伪造有什么特征",而是关注**"真实人脸有什么通用特征"**:

真实人脸共享一种紧凑的通用表示(common compact representation),而伪造人脸因合成过程引入不一致性,无法被紧凑重建。

直觉:给定一个训练好的重建模型,真实图可以被很好地重建(重建误差小),伪造图则重建误差大。利用这个差异作为检测信号。


二、方法架构

2.1 整体框架

#mermaid-svg-cCqr4YBAshGBRwxa{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-cCqr4YBAshGBRwxa .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-cCqr4YBAshGBRwxa .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-cCqr4YBAshGBRwxa .error-icon{fill:#552222;}#mermaid-svg-cCqr4YBAshGBRwxa .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-cCqr4YBAshGBRwxa .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-cCqr4YBAshGBRwxa .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-cCqr4YBAshGBRwxa .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-cCqr4YBAshGBRwxa .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-cCqr4YBAshGBRwxa .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-cCqr4YBAshGBRwxa .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-cCqr4YBAshGBRwxa .marker{fill:#333333;stroke:#333333;}#mermaid-svg-cCqr4YBAshGBRwxa .marker.cross{stroke:#333333;}#mermaid-svg-cCqr4YBAshGBRwxa svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-cCqr4YBAshGBRwxa p{margin:0;}#mermaid-svg-cCqr4YBAshGBRwxa .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-cCqr4YBAshGBRwxa .cluster-label text{fill:#333;}#mermaid-svg-cCqr4YBAshGBRwxa .cluster-label span{color:#333;}#mermaid-svg-cCqr4YBAshGBRwxa .cluster-label span p{background-color:transparent;}#mermaid-svg-cCqr4YBAshGBRwxa .label text,#mermaid-svg-cCqr4YBAshGBRwxa span{fill:#333;color:#333;}#mermaid-svg-cCqr4YBAshGBRwxa .node rect,#mermaid-svg-cCqr4YBAshGBRwxa .node circle,#mermaid-svg-cCqr4YBAshGBRwxa .node ellipse,#mermaid-svg-cCqr4YBAshGBRwxa .node polygon,#mermaid-svg-cCqr4YBAshGBRwxa .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-cCqr4YBAshGBRwxa .rough-node .label text,#mermaid-svg-cCqr4YBAshGBRwxa .node .label text,#mermaid-svg-cCqr4YBAshGBRwxa .image-shape .label,#mermaid-svg-cCqr4YBAshGBRwxa .icon-shape .label{text-anchor:middle;}#mermaid-svg-cCqr4YBAshGBRwxa .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-cCqr4YBAshGBRwxa .rough-node .label,#mermaid-svg-cCqr4YBAshGBRwxa .node .label,#mermaid-svg-cCqr4YBAshGBRwxa .image-shape .label,#mermaid-svg-cCqr4YBAshGBRwxa .icon-shape .label{text-align:center;}#mermaid-svg-cCqr4YBAshGBRwxa .node.clickable{cursor:pointer;}#mermaid-svg-cCqr4YBAshGBRwxa .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-cCqr4YBAshGBRwxa .arrowheadPath{fill:#333333;}#mermaid-svg-cCqr4YBAshGBRwxa .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-cCqr4YBAshGBRwxa .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-cCqr4YBAshGBRwxa .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-cCqr4YBAshGBRwxa .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-cCqr4YBAshGBRwxa .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-cCqr4YBAshGBRwxa .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-cCqr4YBAshGBRwxa .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-cCqr4YBAshGBRwxa .cluster text{fill:#333;}#mermaid-svg-cCqr4YBAshGBRwxa .cluster span{color:#333;}#mermaid-svg-cCqr4YBAshGBRwxa div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-cCqr4YBAshGBRwxa .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-cCqr4YBAshGBRwxa rect.text{fill:none;stroke-width:0;}#mermaid-svg-cCqr4YBAshGBRwxa .icon-shape,#mermaid-svg-cCqr4YBAshGBRwxa .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-cCqr4YBAshGBRwxa .icon-shape p,#mermaid-svg-cCqr4YBAshGBRwxa .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-cCqr4YBAshGBRwxa .icon-shape .label rect,#mermaid-svg-cCqr4YBAshGBRwxa .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-cCqr4YBAshGBRwxa .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-cCqr4YBAshGBRwxa .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-cCqr4YBAshGBRwxa :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 输入人脸图像 x
Encoder 多尺度编码
多尺度特征 F1, F2, F3
Bipartite Graph 编解码对偶二分图
Decoder 图像重建
Classifier 真假二分类
L_recon 重建损失
L_cls 分类损失
L_total 联合损失

数据流:

复制代码
输入 x → Encoder(3个尺度) → 二分图 → 分两路:
  → Decoder → x̂(重建图) → 与 x 算 L_recon
  → Classifier → ŷ(预测) → 与 y 算 L_cls
  L_total = L_recon + α·L_cls,端到端反向传播

2.2 三大核心模块

(1)编码器-解码器(Encoder-Decoder)
  • 编码器 :将输入人脸图像 xxx 编码为多尺度特征图 F1,F2,...,FLF_1, F_2, ..., F_LF1,F2,...,FL
  • 解码器 :从多尺度特征重建图像 x^\hat{x}x^
  • 作用:在真实图像上学习紧凑重建,让重建误差成为检测信号
(2)二分图(Bipartite Graph)

这是 RECCE 最核心的创新:

复制代码
编码器特征节点 ───── 边(重建差异作为权重)───── 解码器特征节点
    (E₁, E₂, ...)                                    (D₁, D₂, ...)

二分图在两个特征空间之间建边:
  - 节点:编码器和解码器的多尺度特征
  - 边权重:编码-解码特征之间的重建差异
  - 目的:利用重建差异作为伪造痕迹的显式指导信号

为什么用二分图?

传统方法直接把编码器特征送入分类器,丢失了"重建过程"中蕴含的伪造痕迹。二分图把编码器的"原始特征"和解码器的"重建特征"对偶起来,让分类器能看到"这个区域重建得好不好"。

(3)分类器

从二分图的输出特征中做二分类(Real / Fake)。

2.3 多尺度处理

RECCE 在 3 个分辨率尺度上构建二分图:

尺度 来源 下采样倍数 特征图尺寸(256×256输入) 捕捉的伪造痕迹
浅层 Encoder 第 2 层 ×4 64×64 纹理、边缘等细粒度不一致
中层 Encoder 第 3 层 ×8 32×32 局部形状、面部器官异常
深层 Encoder 第 4 层 ×16 16×16 全局结构、姿态不协调

每个尺度的二分图输出特征拼接后送入最终分类器。

2.4 二分图构造细节

  • 节点 :每个空间位置 (h,w)(h,w)(h,w) 的编/解码器特征向量,特征维度 = 256
  • :全连接二部图,编码器节点与解码器节点之间建边
  • 边权重:编码器特征与解码器特征之间的余弦相似度
  • 图推理:1~2 层图卷积(GCN),聚合邻域信息
  • 输出:每个节点经图推理后的特征向量,送入分类器

三、损失函数

3.1 重建损失

让解码器能忠实地重建输入图像:

Lrecon=∥x−x^∥1+λ⋅Lperc(x,x^)\mathcal{L}_{\text{recon}} = \|x - \hat{x}\|1 + \lambda \cdot \mathcal{L}{\text{perc}}(x, \hat{x})Lrecon=∥x−x^∥1+λ⋅Lperc(x,x^)

  • ∥x−x^∥1\|x - \hat{x}\|_1∥x−x^∥1:L1 损失,逐像素重建约束,保留边缘和纹理
  • Lperc\mathcal{L}_{\text{perc}}Lperc:感知损失,用 VGG 特征,让重建图在语义层面也接近原图
  • λ\lambdaλ:感知损失权重(论文取值 λ=0.1\lambda = 0.1λ=0.1)

3.2 分类损失

Lcls=−(ylog⁡y^+(1−y)log⁡(1−y^)),y∈{1,0}\mathcal{L}_{\text{cls}} = -\big(y\log\hat{y} + (1-y)\log(1-\hat{y})\big), \quad y \in \{1, 0\}Lcls=−(ylogy^+(1−y)log(1−y^)),y∈{1,0}

  • y=1y = 1y=1:Real(真实人脸),y=0y = 0y=0:Fake(伪造人脸)

3.3 总损失

Ltotal=Lrecon+α⋅Lcls\mathcal{L}{\text{total}} = \mathcal{L}{\text{recon}} + \alpha \cdot \mathcal{L}_{\text{cls}}Ltotal=Lrecon+α⋅Lcls

  • α\alphaα:分类损失权重(论文取值 α=0.1\alpha = 0.1α=0.1)

端到端联合优化,重建和分类互相促进:

  • 更好的重建 → 更准确的重建差异 → 更强的检测信号
  • 更好的分类 → 梯度回传优化编码器 → 更好的特征表示 → 更好的重建

四、为什么 RECCE 泛化能力强?

核心洞察

传统方法 RECCE
思路 学习"伪造像什么" 学习"真实像什么"
结果 过拟合到训练集中的伪造模式 任何偏离"真实表示"的都是伪造

泛化机制

维度 传统方法 RECCE
学习目标 分类伪造痕迹 重建真实人脸
对未见伪造 容易失效(模式不匹配) 仍然有效(无法紧凑重建即判为假)
训练数据依赖 需要多样化的伪造样本 主要依赖真实样本
过拟合风险

直觉解释

训练阶段:模型学会对真实人脸做紧凑编码 + 重建

测试阶段

  • 输入真实人脸 → 编码紧凑 → 重建误差小 → 判为 Real
  • 输入伪造人脸 → 编码不紧凑(伪造痕迹干扰)→ 重建误差大 → 判为 Fake

五、实验结果

5.1 数据集

数据集 说明 用途
FaceForensics++ (FF++) 4 种伪造方法,1000 个视频 训练 + 测试
Celeb-DF 高质量换脸 跨数据集测试
DFDC 大规模多样化伪造 跨数据集测试
DFD DeepFake 检测数据集 跨数据集测试

5.2 跨数据集泛化(核心亮点)

在 FF++ 上训练,直接在其他数据集上测试(不微调):

方法 FF++ → Celeb-DF FF++ → DFDC FF++ → DFD
Xception 65.3 61.4 63.2
Face X-ray 80.0 74.5 75.8
FFD 81.2 78.5 79.1
RECCE 87.6 84.3 85.9

RECCE 在跨数据集测试中显著优于已有方法,验证了"学习真实表示"策略的泛化优势。

5.3 消融实验

配置 FF++ AUC Celeb-DF AUC
仅分类(Xception 基线) 95.2 72.1
+ 重建(无二分图) 96.8 78.5
+ 单尺度二分图 97.5 83.2
+ 多尺度二分图(完整RECCE) 98.1 87.6
  • "仅分类"即 Xception 单分支分类模型(行业标准基线)
  • 重建损失贡献 ~8% 跨数据集提升
  • 二分图贡献 ~5%
  • 多尺度贡献 ~4%

六、核心贡献总结

  1. 新视角:从"学习伪造特征"转向"学习真实紧凑表示",利用重建差异检测伪造
  2. 二分图模块:首次将编解码器特征通过对偶图结构融合,显式利用重建差异
  3. 多尺度处理:在多个分辨率上捕捉不同粒度的伪造痕迹
  4. 端到端训练:重建和分类联合优化,互相促进
  5. 强泛化能力:在多个跨数据集测试中大幅超越已有方法

七、局限与展望

局限 说明 改进方向
计算开销 编解码 + 二分图推理,比纯分类模型慢 轻量化编码器(MobileNet)、知识蒸馏
对高质量伪造 极端高质量伪造(如 StyleGAN 生成)重建误差不够显著 引入频域/生物特征辅助重建损失
压缩鲁棒性 重度压缩可能掩盖重建差异 训练时加入随机压缩数据增强(JPEG/WebP)
可解释性 二分图的边权重可做可视化,但仍有提升空间 引入注意力热力图 + 伪造区域定位

个人能力有限,有问题随时联系~

相关推荐
柳叶方舟6 天前
npj Digital Medicine IF=15.1 | 多模态数字活检:术前无创预测胃癌隐匿性腹膜转移
论文阅读·人工智能·健康医疗
chnyi6_ya10 天前
论文阅读笔记 | VIDEOPHY: Evaluating Physical Commonsense for Video Generation
论文阅读·笔记
闲研随记10 天前
【文献阅读 ICML 2026】RL算法:R2VPO
论文阅读·人工智能·算法·强化学习·icml·rl算法
0X7811 天前
从随机几何看下行卫星网络覆盖概率分析
论文阅读
Eastmount11 天前
[论文阅读] (51)ESWA25 基于启发式优化器的入侵检测系统
论文阅读·网络安全·sci·入侵检测·eswa
STLearner11 天前
ICML 2026 | LLM×Graph论文总结[1]【图基础模型,文本属性图,多模态属性图,图对齐,图提示学习,关系深度学习
论文阅读·人工智能·python·深度学习·学习·机器学习·数据挖掘
STLearner12 天前
ICML 2026 | 时间序列(Time Series)论文总结(3)【因果,可解释性,不规则时序,表示学习,benchmar
大数据·论文阅读·人工智能·深度学习·神经网络·机器学习
zhuanshulz13 天前
《论文阅读 | LoopFrog: In-Core Hint-Based Loop Parallelization》
论文阅读
EQUINOX114 天前
【论文阅读】| Swin-Transformer精读
论文阅读·深度学习·transformer