Portrait4D: Learning One-Shot 4D Head Avatar Synthesis using Synthetic Data 学习笔记
- **目标**:学习一个模型,能够从源图像 $I_s$ 和驱动图像 $I_d$ 中提取外观和动作信息,合成出具有 $I_s$ 外观和 $I_d$ 动作的3D人头。- **3D表示**:采用基于 Tri-plane 的 NeRF 作为底层的3D表示方式,兼具高保真度和高效率。- **核心组件**:- **GenHead模型 $G$**:用于合成多视角、多 identitiy 、多 motion 的
1 Method
1.1 总体
- 目标:学习一个模型,能够从源图像 I s I_s Is 和驱动图像 I d I_d Id 中提取外观和动作信息,合成出具有 I s I_s Is 外观和 I d I_d Id 动作的3D人头。
- 3D表示:采用基于 Tri-plane 的 NeRF 作为底层的3D表示方式,兼具高保真度和高效率。
- 核心组件:
- GenHead模型 G G G:用于合成多视角、多 identitiy 、多 motion 的人头图像,提供训练数据。
- 可动画化的 Tri-plane 重建器 Ψ \Psi Ψ:从单张图像直接重建4D人头NeRF模型。
1.2 GenHead模型
将单目图像数据转换成4D数据,以支持后续的4D NeRF重建的学习。
其实这样在 EG3D 基础上使用 3DMM 的方法生成出来的数据难以表现出像真实图像的一样的细节,导致最后与真实数据相比,用于训练的数据不够生动,这一点会在 Portrait4Dv2 中改善,其舍弃了这个 GenHead 模型
方法:在 EG3D 的基础上增加了一个局部形变场。现有的人头GAN模型无法实现对面部、眼睛、嘴巴和脖子的全面运动控制。
- 提出了一个局部生成模型 GenHead,用于处理复杂的人头动画。模型组成:
- **局部 Tri-plane 生成器 G ca G_{\text{ca}} Gca **:用于合成规范的人头NeRF。
- **局部形变场 D D D **:用于对规范人头进行形变,实现动画效果。
1.2.1 局部 Tri-plane 生成器 G ca G_{\text{ca}} Gca
网络架构:使用 StyleGAN2 作为骨干网络。
G ca : ( z , α ) → [ T h , T p ] ∈ R 256 × 256 × 96 × 2 G_{\text{ca}} : (z, \alpha) \rightarrow [T_h, T_p] \in \mathbb{R}^{256 \times 256 \times 96 \times 2} Gca:(z,α)→[Th,Tp]∈R256×256×96×2
-
输入:
- 随机噪声 z ∈ R 512 z \in \mathbb{R}^{512} z∈R512
- FLAME模型的形状编码 α ∈ R 300 \alpha \in \mathbb{R}^{300} α∈R300
-
输出:
- 头部区域的 Tri-plane T h T_h Th
- 眼睛和嘴巴区域的 Tri-plane T p T_p Tp
1.2.2 局部形变场 D D D
通过形变将观测空间中的点 x x x 映射到规范空间,以获取相应特征。
D : ( x , α , β , γ ) → [ Δ x h , Δ x p ] D : (x, \alpha, \beta, \gamma) \rightarrow [\Delta x_h, \Delta x_p] D:(x,α,β,γ)→[Δxh,Δxp]
- 输入:
- 观测空间中的点 x x x
- 形状编码 α \alpha α
- FLAME的表情编码 β ∈ R 100 \beta \in \mathbb{R}^{100} β∈R100
- 姿态编码 γ = [ γ eye , γ jaw , γ neck ] ∈ R 9 \gamma = [\gamma_{\text{eye}}, \gamma_{\text{jaw}}, \gamma_{\text{neck}}] \in \mathbb{R}^9 γ=[γeye,γjaw,γneck]∈R9
- 输出:
- 局部3D形变 [ Δ x h , Δ x p ] ∈ R 3 × 2 [\Delta x_h, \Delta x_p] \in \mathbb{R}^{3 \times 2} [Δxh,Δxp]∈R3×2
实现方法:使用FLAME网格 m ( α , β , γ ) m(\alpha, \beta, \gamma) m(α,β,γ) :
-
计算 m ( α , β , γ ) m(\alpha, \beta, \gamma) m(α,β,γ) 与平均脸网格 m ( 0 , 0 , γ ca ) m(0, 0, \gamma_{\text{ca}}) m(0,0,γca) 之间的形变,其中 γ ca = [ 0 , γ jaw,ca , 0 ] \gamma_{\text{ca}} = [0, \gamma_{\text{jaw,ca}}, 0] γca=[0,γjaw,ca,0] 表示张开嘴巴的规范姿态。
-
对于自由空间中的点 x x x,根据其最近顶点的形变,使用加权平均方法推导出形变 Δ x h \Delta x_h Δxh 和 Δ x p \Delta x_p Δxp。
-
对于 Δ x h \Delta x_h Δxh (头部形变):不考虑眼睛注视方向 γ eye \gamma_{\text{eye}} γeye 。
-
对于 Δ x p \Delta x_p Δxp (眼睛和嘴巴形变):
-
眼睛区域:使用包含表情编码的形变 m ( α , β , γ ) m(\alpha, \beta, \gamma) m(α,β,γ) 。
-
嘴巴区域:使用不包含表情编码的形变 m ( α , 0 , γ ) m(\alpha, 0, \gamma) m(α,0,γ) ,以处理表情引起的嘴唇和牙齿的相对运动。
-
-
1.2.3 4D数据合成
特征提取与渲染
- 特征提取:从 Tri-plane T h T_h Th 和 T p T_p Tp 获取特征 f h f_h fh 和 f p f_p fp。
- 体渲染:使用体渲染方法分别渲染出两个特征图。
- 融合:使用基于 m ( α , β , γ ) m(\alpha, \beta, \gamma) m(α,β,γ) 的光栅化掩模在视角 θ \theta θ 下融合渲染的特征图。
背景生成与最终合成
- 背景生成:使用另一个 StyleGAN2 生成2D背景图像 I bg I_{\text{bg}} Ibg 。
- 图像融合:将渲染的前景图像 I f I_f If 与背景 I bg I_{\text{bg}} Ibg 融合。
- 超分辨率处理:将融合后的图像输入2D超分辨率模块,生成最终高分辨率图像。
对抗训练:参考EG3D
4D数据合成:
-
动作和视角参数的提取:
- 使用现有的 3DMM 重建方法从单目图像和视频中提取 3D 参数,为了提高准确性,进一步利用基于关键点的优化方法对这些参数进行微调。包括:
- 形状 α \alpha α 、表情 β \beta β 、姿态 γ \gamma γ 、摄像机视角 θ \theta θ
- 使用现有的 3DMM 重建方法从单目图像和视频中提取 3D 参数,为了提高准确性,进一步利用基于关键点的优化方法对这些参数进行微调。包括:
-
动态数据的构造(不同视角的动态头像):用于学习头部动作 reenactment,动作和视角的多样性帮助模型学习复杂场景中的头部动画。
- 随机组合生成 identitiy ( z , α ) ( z, \alpha ) (z,α)
- 为每个 identitiy 分配从同一视频片段中提取的表情 β \beta β
- 为每个动作分配随机的摄像机视角 θ \theta θ
-
静态数据的构造(不同视角的静止头像):用于提升 3D 重建的泛化能力。更专注于头部静态几何形状的重建,去除动态因素的干扰。
- 类似地生成随机 identitiy ,但每个 identitiy 仅对应一个随机动作 ( β , γ ) ( \beta, \gamma ) (β,γ) ,并分配多个视角 θ \theta θ 。
在生成 4D 数据时,GenHead 提供了中间结果作为额外的监督信号,包括:
- 三平面特征 T ˉ ( x ) \bar{T}(x) Tˉ(x) :表示 3D 点在三平面上的投影特征。
- 低分辨率渲染图 $\bar{I}_f $ 和 I ˉ b g \bar{I}_{bg} Iˉbg :包括前景特征图和背景图。
- 深度图 I ˉ depth \bar{I}_{\text{depth}} Iˉdepth :提供几何深度信息。
- 不透明度图 I ˉ opa \bar{I}_{\text{opa}} Iˉopa :用于分离前景和背景。
1.3 Tri-plane 重建器

实现头部 reenactment,将源图像的 identitiy I s I_s Is 和驱动图像的动作 I d I_d Id 融合,生成具有源外观和驱动动作的目标图像。
Ψ : ( I s , I d ) → T , R : ( T , θ ) → I re \Psi : (I_s, I_d) \to T, \quad R : (T, \theta) \to I_{\text{re}} Ψ:(Is,Id)→T,R:(T,θ)→Ire
- Ψ \Psi Ψ :负责从源图像和驱动图像重建 Tri-plane T T T 。
- R R R :渲染器,用于将 T T T 渲染为特定视角 θ \theta θ 下的图像 I re I_{\text{re}} Ire 。
1.3.1 Ψ \Psi Ψ 组成
-
外观编码器 E global E_{\text{global}} Eglobal 和 E detail E_{\text{detail}} Edetail :采用中 Live 3D Portrait 的 CNN 结构
$$ F=Conv(ViT(𝑭_{low})) $$ $Conv$ 是一个 CNN & ViT 是来自 **Segformer** 的 ViT Block,具有高效的自注意力机制
- E global E_{\text{global}} Eglobal :提取 I s I_s Is 的全局外观特征 F global F_{\text{global}} Fglobal
- E detail E_{\text{detail}} Edetail :提取局部细节特征 F detail F_{\text{detail}} Fdetail ,在解码阶段补充精细信息
-
动作编码器 E mot E_{\text{mot}} Emot :直接使用的 PD-FGC
用于从 I d I_d Id 提取动作向量 v ∈ R 548 v \in \mathbb{R}^{548} v∈R548 。 v v v 包括 identitiy 无关的动画信息,优于传统的 FLAME 表情参数 β \beta β 。
E mot E_{\text{mot}} Emot 是要冻结的,因为假设其是能训练的,当把驱动的图片输入进去,会导致他过拟合到驱动图片上(因为监督的图片就是驱动图片)
-
特征规范化与再现模块 Φ \Phi Φ:
- Φ de \Phi_{\text{de}} Φde :规范化 F global F_{\text{global}} Fglobal ,消除 I s I_s Is 表情信息。(可以避免模型的注意力层过度拟合,提升泛化能力)
- Φ re \Phi_{\text{re}} Φre :注入 I d I_d Id 的动作信息,再现目标动作。
结构:两个基于 Transformer 的模块,具有相同的结构,包含多个 Transformer 块,包括:
- 交叉注意力层:全局特征图提供 Queries ,动作特征提供 Keys 和 Values,实现表情中和和动作注入
- 自注意力层:处理全局特征图内部的依赖关系。
- MLP:用于姿态规范化。
学习解耦:通过将所有交叉注意力层的输出乘以零或不乘以零,实现3D重建和 reenactment 过程的解耦。提高模型在真实图像上的泛化能力。
-
Tri-plane 解码器 G T G_T GT :
- 将再现后的特征 F re F_{\text{re}} Fre 和细节特征 F detail F_{\text{detail}} Fdetail 结合,解码生成 T T T
1.3.2 渲染流程
- 提取全局外观特征 F global F_{\text{global}} Fglobal 和局部细节特征 F detail F_{\text{detail}} Fdetail
- F global F_{\text{global}} Fglobal 经 P h i de Phi_{\text{de}} Phide 消除表情,再由 P h i re Phi_{\text{re}} Phire 融入 I d I_d Id 的动作信息,生成再现特征 F re F_{\text{re}} Fre
- F re F_{\text{re}} Fre 与 F detail F_{\text{detail}} Fdetail 结合,通过 G T G_T GT 生成Tri-plane T T T
- 应用FLAME衍生的变形场 D n e c k D_{neck} Dneck 处理颈部姿态旋转,简化为几乎均匀的刚性变换,无需高精度的3DMM重建。
- 使用浅层U-Net预测2D背景特征图 I b g I_{bg} Ibg 。将渲染的前景图像 I f I_f If 与背景 I b g I_{bg} Ibg 融合,生成最终图像。
1.4 解耦学习
除固定的动作编码器 E m o t E_{mot} Emot 外,整体重建器 Ψ \Psi Ψ 使用 GenHead 的合成数据进行端到端训练。
1.4.1 训练合成模型 Ψ \Psi Ψ 的方法
自我 reenactment 训练方式:
- 随机选择两张具有相同 identitiy 的图像,分别记为 I s I_s Is 和 I d I_d Id
- 选择另一张有 I d I_d Id 的 identitiy 和动作但是不同视角的图像作为真实再现图像 I ‾ r e \overline{I}_{re} Ire
- 训练目标是让模型生成的重现图像 I re I_{\text{re}} Ire 在内容上匹配 I ˉ re \bar{I}_{\text{re}} Iˉre
1.4.2 解耦学习策略
将模型从仅依赖合成数据的训练扩展到能够泛化到真实数据。
问题:
模型中过多依赖 Φ \Phi Φ 中的自注意力和 MLP 层来处理表情去除和姿态规范化,导致对合成数据的过拟合,降低对真实图像的泛化能力。
解决方案:
解耦自注意力和 MLP 层:仅让自注意力和 MLP 层专注于姿态规范化。让交叉注意力层处理所有与动作相关的过程。
-
实现方式:随机以一定概率对跨注意力层的输出乘以零,使网络退化为静态 3D 重建任务,同时使用静态数据来执行退化任务
动态数据则用于正常的动作重现训练。
-
效果:通过这种随机退化策略,网络的不同部分被迫专注于特定任务,从而实现对重建与重现的学习解耦。
1.4.3 Loss
L \mathcal{L} L 是多个损失函数的加权和
L = L re + L f + L tri + L depth + L opa + L id + L adv \mathcal{L} = \mathcal{L}_{\text{re}} + \mathcal{L}_f + \mathcal{L}_{\text{tri}} + \mathcal{L}_{\text{depth}} + \mathcal{L}_{\text{opa}} + \mathcal{L}_{\text{id}} + \mathcal{L}_{\text{adv}} L=Lre+Lf+Ltri+Ldepth+Lopa+Lid+Ladv
-
重现损失 L re \mathcal{L}_{\text{re}} Lre :计算生成图像 I re I_{\text{re}} Ire 与目标图像 I ˉ re \bar{I}_{\text{re}} Iˉre 之间的感知差异和 L 1 L_1 L1 距离
-
特征图损失 L f \mathcal{L}_f Lf:计算 I f I_f If、 I bg I_{\text{bg}} Ibg 与其对应的目标特征图的 L 1 L_1 L1 距离。
-
三平面损失 L tri \mathcal{L}_{\text{tri}} Ltri :比较采样三平面特征 T ( x ) T(x) T(x) 与目标特征 T ˉ ( x ) \bar{T}(x) Tˉ(x) 的 L 1 L_1 L1 距离。
注意: Ψ \Psi Ψ 和 GenHead 的三平面代表不同的几何,因此不能直接比较。
-
深度图损失 L depth \mathcal{L}_{\text{depth}} Ldepth :比较深度图 I depth I_{\text{depth}} Idepth 和目标深度图 I ˉ depth \bar{I}_{\text{depth}} Iˉdepth 的 L 1 L_1 L1 距离。
-
透明度图损失 L opa \mathcal{L}_{\text{opa}} Lopa :比较透明度图 I opa I_{\text{opa}} Iopa 和目标透明度图 I ˉ opa \bar{I}_{\text{opa}} Iˉopa 的 L 1 L_1 L1 距离。
-
身份损失 L id \mathcal{L}_{\text{id}} Lid:使用面部识别特征 ArcFace 计算 I re I_{\text{re}} Ire 和 I ˉ re \bar{I}_{\text{re}} Iˉre 的负余弦相似度。
-
对抗损失 L adv \mathcal{L}_{\text{adv}} Ladv :利用 GenHead 的鉴别器,对 I re I_{\text{re}} Ire 和 I ˉ re \bar{I}_{\text{re}} Iˉre 执行对抗性学习。
2 Limitations
-
训练数据的局限:
- GenHead 数据合成依赖于 3DMM 模型来控制表情,这些生成的表情与真实数据相比可能不够生动。
原因:3DMM 基于简单线性模型,缺乏对复杂表情的细腻控制。
在 Portrait4Dv2 得到了解决:使用伪多视角视频来学习4D头像合成器
采用两阶段学习方法:
- 先学习3D头像合成器,用于将单目视频转换为多视角视频
- 再利用生成的伪多视角视频通过跨视角 self-reenactment 来学习4D头像合成器
-
复杂配饰和妆容:
- 模型在处理复杂配饰(如帽子、耳环)和浓重妆容时表现不佳 。
- 背景中高频细节的重建能力不足。
潜在改进:增加体渲染的分辨率,可以让信息流更细致,同时减轻 2D 超分辨率模块导致的纹理闪烁问题。
-
大角度侧脸图像:
- 当输入图像为接近侧脸的大偏航角度图像时,模型表现较差,主要因为训练数据分布不均。
-
特定表情的伪影:
- 对于特定表情(如眨眼),模型可能生成伪影。这是因为 GenHead 数据主要来源于 FFHQ 数据集,该数据集包含较少闭眼的图像。
改进方向:引入包含更多多样表情和姿态的数据以增强模型的泛化能力。
-
4D 数据合成与训练挑战:
- 合成高质量 4D 数据需要提前训练可动画的 3D GAN,这一过程本身具有挑战性。
- GAN 模型可能面临模态丢失的问题,导致生成数据的多样性受限。
- 与静态 3D 数据相比,使用 4D 数据训练更容易过拟合。
未来方向:
- 生成更高质量和多样性的 4D 数据以支持一次性重建流程。
- 探索将真实数据与 3D 先验(如 3DMM 或深度图)结合的端到端训练方法。
- 扩展当前管道,支持少样本学习,以更高效利用训练数据。

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。
更多推荐
所有评论(0)