PerformRecast
在影视和动画工业中,一个常见的后期需求是:只修改演员的面部表情,同时严格保持头部姿态、镜头运动、背景和身份不变。这就是 PerformRecast 所定义的"表情-only 视频表演编辑"(expression-only portrait video performance editing)任务 #Liang et al., 2026。
这个任务看似简单——不就是换张脸的表情吗?但它和主流的"肖像动画"(portrait animation)有着本质区别。肖像动画的目标是用一段驾驶视频驱动一张静态照片,生成新的动画视频;而表情编辑的目标是修改一段已有视频中演员的表情,保持其他一切不变。前者是"从静到动",后者是"从动到动"——难度完全不同。
PerformRecast 的核心洞察来自 3D Morphable Face Model(3DMM):3DMM 天然地用独立参数分别表示身份(identity)、表情(expression)和头部姿态(head pose),实现了自然解耦 #Blanz and Vetter, 1999。如果能让肖像动画模型的关键点变换与 3DMM 的前向过程一致,就能继承这种解耦能力。
为此,PerformRecast 做了三件事:①修改 LivePortrait 的关键点变换公式,使其与 FLAME 模型一致 #Li et al., 2017;②用 Pixel3DMM 跟踪的显式 3D 关键点直接监督运动提取器 #Giebenhain et al., 2025;③设计边界对齐模块(BAM)解决面部与非面部区域的错位问题。论文还构建了基于 MetaHuman 的测试 benchmark,并开源了全部代码和数据。
2.1 LivePortrait 的关键点变换公式
要理解 PerformRecast 的改进,我们需要先回到 LivePortrait #Guo et al., 2024 的关键点变换公式。LivePortrait 的运动提取器从源帧和驾驶帧中预测以下参数:规范关键点 $x_c \in \mathbb{R}^{K \times 3}$、头部姿态 $R \in \mathbb{R}^{3 \times 3}$、表情形变 $\delta \in \mathbb{R}^{K \times 3}$、缩放因子 $s \in \mathbb{R}^3$ 和平移 $t \in \mathbb{R}^3$。源帧和驾驶帧的 3D 关键点通过以下公式变换:
注意这里的运算顺序:先乘 $R$,再加 $\delta$。这意味着表情形变 $\delta$ 是在头部姿态旋转之后才叠加的——$\delta$ 中不可避免地会混入头部姿态的信息,因为旋转操作会改变表情形变在 3D 空间中的基准方向。
2.2 FLAME 模型的前向过程
作为对比,我们来看 FLAME #Li et al., 2017——一个广泛使用的 3DMM 模型——的前向过程:
在 FLAME 中,模板网格 $\mathbf{T}$ 先加上身份形变 $B_S(\beta)$ 和表情混合形状 $B_E(\psi)$,然后再施加头部姿态旋转 $\theta$。也就是说,表情参数 $\psi$ 和姿态参数 $\theta$ 在数学上是完全独立的——先塑形再旋转。
2.3 问题的本质
这不仅仅是一个数学细节。在实际效果上,当 LivePortrait 尝试只替换表情而保持头部姿态时(即表情编辑任务),由于 $\delta$ 中混入了姿态信息,模型无法精确控制表情变化——生成的视频中头部会跟着表情一起动。此外,LivePortrait 的隐式关键点缺乏明确的物理意义和直接监督,运动提取器的精度受限。
PerformRecast 的思路非常清晰:如果关键点变换公式和 3DMM 一致,那么 3DMM 的自然解耦能力就能被继承到 warping-based 肖像动画框架中。
PerformRecast 建立在 LivePortrait 的框架之上,包含外观特征提取器 $\mathcal{F}$(基于 DINOv2 #Oquab et al., 2023 backbone)、运动提取器 $\mathcal{M}$(ConvNeXt-V2-Tiny #Woo et al., 2023)、warping 模块 $\mathcal{W}$ 和 SPADE 解码器 $\mathcal{G}$ #Park et al., 2019。核心改动在三个方面。
3.1 FLAME 一致的关键点变换公式
PerformRecast 将关键点变换公式修改为:
现在是先加 $\delta$ 再乘 $R$,与 FLAME 的前向过程一致。这样修改后,表情形变 $\delta$ 在规范空间中定义,不包含头部姿态的信息——旋转操作统一施加在已经塑形完毕的关键点上,实现了表情和姿态的数学解耦。
3.2 FLAME Loss:三组显式 3D 关键点
修改公式只是第一步。为了让运动提取器学到准确的、有物理意义的关键点,PerformRecast 使用 Pixel3DMM #Giebenhain et al., 2025 从输入视频中提取 FLAME 参数,然后在 FLAME 网格顶点上选取 $K=49$ 个显式 3D 关键点直接监督。
关键的设计在于三组关键点的构造:
- $V_c$(规范关键点)
- 从规范 FLAME 网格 $T_c$ 提取,只含身份形变,姿态和表情都设为零。用于监督 $x_c$。
- $V_{\text{exp}}$(表情关键点)
- 从 $T_{\text{exp}}$ 提取,在 $T_c$ 基础上加入表情混合形状和下颌/眼球关节旋转,但颈部和全局头部姿态保持为零。用于监督 $x_c + \delta$。
- $V_{\text{kp}}$(完整关键点)
- 从所有 FLAME 参数启用的完整网格 $T_{\text{kp}}$ 提取。用于监督 $x_s$ / $x_d$。
FLAME Loss 使用 Wing Loss #Feng et al., 2018 计算三组关键点与对应变换结果的距离:
3.3 丢弃四项辅助损失
FLAME Loss 提供了远比 LivePortrait 原有损失更强的监督信号。因此,PerformRecast 丢弃了 LivePortrait 的四项辅助损失:隐式关键点等变性损失(equivariance loss)、关键点先验损失(keypoint prior loss)、形变先验损失(deformation prior loss)和头部姿态损失(head pose loss)。
这是一个大胆的设计——LivePortrait 依赖这些损失来约束隐式关键点的学习,而 PerformRecast 用显式 3D 关键点监督替代了它们。此外,由于更好的解耦,PerformRecast 不需要 LivePortrait 的第二阶段训练(stitching 和 retargeting 模块),简化了训练流程。
flowchart TD
subgraph LP["LivePortrait: 先旋转再加表情"]
A1["规范关键点 xc"] --> A2["乘头部姿态 R"]
A2 --> A3["加表情形变 δ"]
A3 --> A4["缩放 s + 平移 t"]
end
subgraph PR["PerformRecast: 先加表情再旋转"]
B1["规范关键点 xc"] --> B2["加表情形变 δ"]
B2 --> B3["乘头部姿态 R"]
B3 --> B4["缩放 s + 平移 t"]
end
subgraph FLAME["FLAME 3DMM"]
C1["模板网格 T"] --> C2["加身份形变 BS + 表情 BE"]
C2 --> C3["乘头部姿态 θ"]
end
PR -.->|"与 FLAME 一致"| FLAME
3.4 边界对齐模块(BAM)
表情编辑任务有一个独特的问题:当只替换表情而保持头部姿态时,warping 模块生成的关键点运动场会影响面部边界以外的区域,导致面部与非面部区域之间出现错位(misalignment)。
BAM 采用 Teacher-Student 架构解决这一问题。Teacher 模型 $M_t$ 用完整的动画损失训练,虽然全局结果有错位,但面部区域的表情合成是精确的。Student 模型 $M_s$ 同时学习两个任务:①用 Teacher 的面部替换结果 $\hat{I}_s^t$ 监督面部区域;②用原始动画损失监督驾驶帧重建。
对于面部区域,计算感知损失 $\mathcal{L}_{P, \text{facial}}$ 和 $L_1$ 损失 $\mathcal{L}_{1,\text{facial}}$(Student vs Teacher);对于非面部区域,计算 $\mathcal{L}_{P, \text{non-facial}}$ 和 $\mathcal{L}_{1,\text{non-facial}}$(Student vs 源帧 ground truth)。这种分区监督确保面部区域的表情编辑精度和非面部区域的稳定性都能得到保证。
4.1 训练损失
PerformRecast 的整体训练损失为:
其中级联感知损失 $\mathcal{L}_{P,\text{cascade}}$、级联 $L_1$ 损失 $\mathcal{L}_{1,\text{cascade}}$ 和级联 GAN 损失 $\mathcal{L}_{G,\text{cascade}}$ 分别在全局、面部和嘴唇三个区域上计算。GAN 损失使用三个从零训练的判别器:全局判别器 $\mathcal{D}_\text{global}$、面部判别器 $\mathcal{D}_\text{face}$ 和嘴唇判别器 $\mathcal{D}_\text{lip}$。Face-ID 损失使用 ArcFace #Deng et al., 2019 提取的身份特征保持源帧身份。
Teacher 模型直接用 $\mathcal{L}_\text{animate}$ 训练。Student 模型在 $\mathcal{L}_\text{animate}$ 之外,额外加入 BAM 的分区损失 $\mathcal{L}_\text{facial}$ 和 $\mathcal{L}_\text{non-facial}$。
4.2 训练配置
| 配置项 | 值 | 披露状态 |
|---|---|---|
| 训练硬件 | 128 × NVIDIA H20 GPU | 论文披露 |
| 训练时长 | 约 1 周 | 论文披露 |
| Batch size | 8 per GPU | 论文披露 |
| 优化器 | Adam | 论文披露 |
| 外观提取器学习率 | $5 \times 10^{-5}$ | 论文披露 |
| 运动提取器/Warping/Decoder 学习率 | $1.2 \times 10^{-4}$ | 论文披露 |
| 全局判别器学习率 | $1 \times 10^{-4}$ | 论文披露 |
| 面部判别器学习率 | $2.5 \times 10^{-5}$ | 论文披露 |
| 嘴唇判别器学习率 | $1.5 \times 10^{-5}$ | 论文披露 |
| 学习率调度 | — | 未披露 |
| Checkpoint 选择策略 | — | 未披露 |
| 训练数据 | VFHQ + MEAD + Nersemble + FEED + ETH-XGaze + 网络视频,共 597,331 clips | 论文披露 |
| 输入/输出分辨率 | $512 \times 512$ | 论文披露 |
| 关键点数 $K$ | 49 | 论文披露 |
训练鲁棒性技巧
作者在训练时对提取的关键点 $x_s$ 和 $x_d$ 添加小方差高斯噪声,以提高模型对关键点波动的鲁棒性。推理时不加噪声。此外,还额外计算 $x_{d,\text{self}} = s_d \cdot ((x_{c,d} + \delta_d) R_d) + t_d$ 加速训练——这个额外的自驱动关键点用 FLAME Loss 的第三项监督,让运动提取器同时从 source 和 driving 两个方向学习。
4.3 面部/非面部区域 mask 计算
BAM 需要面部区域的 mask 来分区计算损失。PerformRecast 使用 LivePortrait 中预训练的 2D 面部 landmark 检测器提取每帧的 203 个 landmark,然后将源帧的 landmark 向外扩展并计算凸包作为面部区域,其余区域为非面部区域。
PerformRecast 提供两种推理模式,分别适用于不同的后期制作场景。
5.1 Replacement 模式
Replacement 模式直接用驾驶视频第 $i$ 帧的表情替换源视频第 $i$ 帧的表情,保持源帧的其他所有参数不变:
注意第二行:缩放 $s_s$、姿态 $R_s$ 和平移 $t_s$ 都来自源帧,只有表情形变 $\delta_d$ 来自驾驶帧。这实现了纯粹的"只换表情"。适用场景:演员整体表演到位,但某个镜头的表情不够到位,需要替换为另一段表演。
5.2 Enhancement 模式
Enhancement 模式在源视频已有表情的基础上叠加驾驶视频的表情增量:
关键在于 $\delta_{s,i} + \delta_{d,i} - \delta_{d,0}$:用驾驶视频第 $i$ 帧相对于第 0 帧的表情变化量 $\delta_{d,i} - \delta_{d,0}$,叠加到源视频第 $i$ 帧的原始表情 $\delta_{s,i}$ 上。适用场景:源视频的表演基本可用,只需在某些时刻增强表情强度。
5.3 Portrait Animation 推理
对于传统的肖像动画任务(同时迁移表情和姿态),推理时使用与训练相同的关键点变换公式——驾驶帧的 $s_d$、$R_d$、$\delta_d$ 和 $t_d$ 全部来自驾驶帧,外观特征 $f_s = \mathcal{F}(I_s)$ 来自源帧。
6.1 MetaHuman 测试 Benchmark
为了精确评估表情编辑能力,PerformRecast 构建了一个基于 MetaHuman 的测试 benchmark。具体流程:从 18 段专业面部动作演员的表演视频中提取表情参数,选取 20 个 MetaHuman 数字人,每个数字人渲染 19 段视频(18 段带表情 + 1 段无表情),所有视频添加预定义的头部姿态旋转。原始分辨率 $2560 \times 1440$,裁剪并缩放到 $512 \times 512$,每段 150 帧,30 FPS。
6.2 表情编辑主实验
| 方法 | PSNR↑ | SSIM↑ | LPIPS↓ | CSIM↑ | MAE(°)↓ | AED↓ | APD↓ | FID↓ | FVD↓ |
|---|---|---|---|---|---|---|---|---|---|
| SkyReels-A1 | 24.91 | 0.859 | 0.162 | 0.716 | 13.08 | 0.716 | 0.016 | 50.20 | 1249.70 |
| Hunyuan-Portrait | 22.43 | 0.792 | 0.169 | 0.736 | 10.40 | 0.661 | 0.035 | 38.60 | 1925.07 |
| FantasyPortrait | 23.95 | 0.820 | 0.188 | 0.734 | 16.78 | 0.795 | 0.017 | 60.44 | 606.63 |
| Wan-Animate | 22.82 | 0.802 | 0.132 | 0.614 | 11.97 | 0.700 | 0.024 | 28.10 | 849.22 |
| Act-Two | 20.83 | 0.791 | 0.163 | 0.682 | 15.96 | 0.790 | 0.072 | 36.19 | 322.07 |
| LivePortrait | 27.73 | 0.899 | 0.059 | 0.749 | 10.47 | 0.610 | 0.016 | 14.36 | 165.10 |
| PerformRecast | 29.27 | 0.914 | 0.047 | 0.761 | 9.12 | 0.499 | 0.012 | 12.01 | 102.99 |
(Replacement 模式,数据来自论文 Table 1)
6.3 Portrait Animation 主实验
在传统肖像动画任务上,PerformRecast 同样表现出色。在 VFHQ 测试集的 self-reenactment 上,PerformRecast 在 SSIM(0.790)、LPIPS(0.159)、CSIM(0.843)、MAE(5.00°)、AED(0.261)等指标上取得最优,仅在 PSNR 上略低于 LivePortrait(22.71 vs 22.88)。在 MEAD 数据集上更是全面领先,PSNR 达到 33.72(LivePortrait 为 32.91)。
6.4 消融实验
| 变体 | PSNR↑ | FID↓ | FVD↓ | 关键发现 |
|---|---|---|---|---|
| 完整模型 | 29.27 | 12.01 | 102.99 | — |
| w/ LP 关键点变换 | 27.06 | 27.68 | 288.84 | PSNR -2.21,FID 翻倍 |
| w/o FLAME Loss | 24.99 | 18.40 | 188.11 | PSNR -4.29,掉点最多 |
| w/o BAM | 27.73 | 14.41 | 136.41 | PSNR -1.54,FID +2.40 |
6.5 失败案例
当源视频中嘴巴闭合而驾驶视频需要张嘴时,PerformRecast 在牙齿区域产生模糊结果。这是因为 GAN 模型的生成能力有限——它无法像扩散模型那样"想象"并合成训练分布外的未见内容。作者表示未来计划将 3DMM 的解耦能力与扩散模型的生成能力结合。
7.1 技术定位
PerformRecast 的核心贡献不在于提出新的网络架构,而在于用 3DMM 的数学结构约束 warping-based 方法的运动表示。这是一个重要的范式转变:此前 warping-based 方法(Face Vid2vid、LivePortrait)依赖隐式关键点和各种辅助损失来约束运动学习,而 PerformRecast 证明了——如果关键点变换公式与 3DMM 一致,并用显式 3D 关键点监督,就可以丢弃大部分辅助损失,同时获得更好的解耦能力。
7.2 与扩散方法的对比
| 维度 | PerformRecast (GAN warping) | Diffusion 方法 |
|---|---|---|
| 表情/姿态解耦 | 3DMM 一致公式,天然解耦 | 难以解耦,需额外模块 |
| 推理速度 | 6 FPS(消费级 GPU) | 多步去噪,秒级 |
| 训练成本 | 128 × H20,约 1 周 | 通常更高 |
| 生成质量 | 已知区域清晰,未见区域模糊 | 可以"想象"未见内容 |
| 时序一致性 | 逐帧独立推理,天然一致 | 需要额外时序模块 |
| 训练流程 | 单阶段(不需 LP 的第二阶段) | 通常需多阶段 |
7.3 可操作启发
- 公式一致性 > 损失堆叠:PerformRecast 证明了让数学公式与物理模型一致,比堆叠更多损失函数更有效。对于其他需要解耦的任务(如姿态/表情/身份分离),可以考虑类似的"让变换公式与 3DMM 一致"策略。
- 显式监督 > 隐式学习:用 Pixel3DMM 跟踪的显式 3D 关键点替代隐式关键点的自监督学习,是 PerformRecast 能丢弃四项辅助损失的关键。当有可靠的外部工具可以提供监督信号时,直接监督通常比间接约束更有效。
- Teacher-Student 分区监督:BAM 的 Teacher-Student 设计是一种通用的"分区监督"模式——当全局损失导致某些区域质量下降时,可以训练一个 Teacher 提供该区域的局部监督信号。
- GAN 的生成上限:PerformRecast 的失败案例(牙齿模糊)揭示了 GAN warping 方法的固有局限——它本质上是"搬移"而非"生成"。对于需要合成未见内容的场景,扩散模型仍有不可替代的优势。
7.4 局限性与未来方向
PerformRecast 的主要局限在于 GAN 的生成能力上限——无法合成源视频中不可见的区域(如闭嘴时的牙齿)。作者在结论中提到,未来计划将 3DMM 的解耦能力与大规模预训练扩散模型的生成能力结合 #Liang et al., 2026。这暗示了一个有趣的研究方向:用 3DMM 提供解耦的运动控制,用扩散模型提供高质量的图像生成——两者的互补可能催生新一代肖像动画系统。
另一个值得关注的点是,PerformRecast 的 49 个显式关键点选取策略是手工设计的。能否自动学习最优的关键点配置?这是一个有待探索的问题。
参考来源
- Liang, J. et al. (2026). PerformRecast: Expression and Head Pose Disentanglement for Portrait Video Editing. CVPR 2026. arXiv:2603.19731 · GitHub
- Guo, K. et al. (2024). LivePortrait: Efficient Portrait Animation with Stitching and Retargeting Control. arXiv:2407.03168 · 精读 →
- Li, T. et al. (2017). Learning a Model of Facial Shape and Expression from 4D Scans (FLAME). SIGGRAPH Asia 2017. Project Page
- Giebenhain, O. et al. (2025). Pixel3DMM: A Large-Scale Dataset of 3D Face Annotations for Digital Humans. arXiv:2505.00615
- Blanz, V. & Vetter, T. (1999). A Morphable Model for the Synthesis of 3D Faces. SIGGRAPH 1999.
- Wang, T. et al. (2021). One-Shot Free-View Neural Talking-Head Synthesis for Video Portraits (Face Vid2vid). CVPR 2021 Oral. arXiv:2011.15126
- Feng, Z. et al. (2018). Wing Loss for Robust Facial Landmark Localisation with Convolutional Neural Networks. CVPR 2018. arXiv:1711.06753
- Oquab, M. et al. (2023). DINOv2: Learning Robust Visual Features without Supervision. arXiv:2304.07193
- Woo, S. et al. (2023). ConvNeXt V2: Co-designing and Scaling ConvNets with Masked Autoencoders. arXiv:2301.00808
- Park, T. et al. (2019). Semantic Image Synthesis with Spatially-Adaptive Normalization (SPADE). CVPR 2019.
- Deng, J. et al. (2019). ArcFace: Additive Angular Margin Loss for Deep Face Recognition. CVPR 2019. · 精读 →