GAGAvatar: Generalizable and Animatable Gaussian Head Avatar 学习笔记

1 Overall

GAGAvatar(Generalizable and Animatable Gaussian Avatar),一种面向单张图片驱动的可动画化头部头像重建的方法,解决了现有方法在渲染效率泛化能力上的局限。 旋转参数

现有方法的局限性:

  • 基于NeRF的方法:
    • 优点:在头像合成和细节(如头发、饰品)上效果优秀。
    • 局限:NeRF老毛病渲染慢,实时性较差。
  • 基于 3DGS 的方法:
    • 优点:实现实时渲染
    • 局限:针对每个 identity 需要进行特定的训练,无法推广泛化。

Contributions:

  1. 引入 Dual-lifting 方法及结合 3DMM 先验,解决了从单张图片构建 3D 高斯模型的难题。
    • 通过预测图像平面中每个像素的 lifting 距离(即从 2D 到 3D 的深度信息)。
    • 利用 forward and backward lifting 生成几乎闭合的 3D 高斯点分布,最大程度还原头部形状。
    • 结合 3DMM 的先验,约束 lifting 过程,确保生成细节。
  2. 通过结合 3DMM 和高斯分布,既能准确传递表情信息,又避免了冗余计算。

2 Method

image-20241120164256729

本文方法分为两个主要分支:重建分支(Reconstruction Branch)和表情控制分支(Expression Branch)

重建分支生成静态高斯点,而表达分支生成动态高斯点。

主要步骤:

  1. 从源图像中提取全局和局部特征,用 DINOv2 进行多尺度视觉特征提取。
  2. 基于局部特征,提出了双 lifting (Dual-lifting)方法,预测 3D 高斯点的位置和参数。
  3. 同时,结合全局特征和 3DMM 顶点特征,生成另一个表情高斯点集合。
  4. 将所有 3D 高斯点通过 splatting 生成粗图像 I c I_c Ic
  5. 使用神经渲染器对 I c I_c Ic 进行细化,生成最终结果 I f I_f If

2.1 重建分支

Dual-lifting 策略:

  • 在单次 lifting 方法中,模型可能无法确定将像素 lifting 到可见表面还是物体背面,导致学习过程中的歧义。双重 lifting 通过分别预测前向和后向偏移,解决了这一问题,消除歧义,稳定优化过程。最终,两组 lifting 点几乎形成封闭的高斯点分布。

过程:

image-20241120195710831
  1. 提取特征:

    • 使用冻结的 DINOv2 模型提取 296 × 296 296 \times 296 296×296 的局部特征平面 F local F_{\text{local}} Flocal
  2. 预测参数:不是直接预测 3D 高斯

    • 利用两个卷积网络 E C o n v 0 E_{Conv0} EConv0 E C o n v 1 E_{Conv1} EConv1,分别预测每个像素相对于特征平面前向后向偏移量,即 lifting 距离。

    • 参数预测:预测每个点的颜色、透明度、缩放和旋转参数 G c , o , s , r G_{c,o,s,r} Gc,o,s,r
      G c , o , s , r = [ E Conv 0 ( F local ) , E Conv 1 ( F local ) ] G_{c,o,s,r} = [E_{\text{Conv}0}(F_{\text{local}}), \; E_{\text{Conv}1}(F_{\text{local}})] Gc,o,s,r=[EConv0(Flocal),EConv1(Flocal)]

  3. 从平面到3D的映射:

    • 根据相机位姿,将特征平面映射回3D空间,使其经过原点,获得平面上像素的3D位置 p s p_s ps 和法向量 n s n_s ns (其实应该就是指向 camera,垂直于这个平面)
    • 根据预测的偏移量,将平面上的点沿法向量 n s n_s ns 提升到三维空间:
      G pos = [ p s + E Conv 0 ( F local ) ⋅ n s , p s − E Conv 1 ( F local ) ⋅ n s ] G_{\text{pos}} = [p_s + E_{\text{Conv}0}(F_{\text{local}}) \cdot n_s, \; p_s - E_{\text{Conv}1}(F_{\text{local}}) \cdot n_s] Gpos=[ps+EConv0(Flocal)ns,psEConv1(Flocal)ns]

2.2 表情分支

组成:

  1. 3DMM:

    • 表情解耦:3DMM 可以将面部表情和身份特征解耦。这种解耦使得即使是不同身份的图像之间,也可以有效地传递表情?
    • 顶点语义稳定性:3DMM 的每个顶点在模型中对应固定的面部区域(如眼睛、嘴巴等),有助于精确定位和修改特定部位的表情。
  2. 3D Gaussians:

    • 通过 3DMM 的顶点位置生成 3D Gaussians。
    • 顶点的学习权重与表情特征绑定,用于调整生成的图像中的表情。

过程:

image-20241120201126555
  1. 输入特征融合:
    • 通过 DINOv2 从驱动图像 I d I_d Id 提取全局特征 F i d F_{id} Fid (将身份信息注入表情分支,确保生成结果在表情变化的同时保持身份一致性)
    • 从 Driving img 和 Source img 通过使用 GPAvatar 提供的 3DMM 估计方法(基于 EMOCA 和 MICA)提取FLAME ),将可学习的权重绑定到 3DMM 中的每个顶点,表示顶点与表情相关的特定属性(如嘴唇张开程度或眉毛上扬)得到顶点特征
    • 将全局特征 F i d F_{id} Fid 和顶点特征拼接
  2. 高斯参数预测:使用 MLP 从拼接的特征中预测每个点除了位置外的所有高斯参数(如颜色、透明度、大小、旋转等)。
    • 使用 3DMM 顶点的固定位置作为高斯点的位置输入,保持空间一致性。

高效表情驱动:

  • 只需在初始阶段一次性的计算出重建分支和表情分支的高斯点。通过修改表情分支中高斯的位置和相机姿态,实现快速的表情重演,无需重复计算。那表情高斯点的其他属性为什么不需要调整?

3.3 神经渲染器

  1. dual-lifting 之后仅仅获得175,232个高斯点比较少,所以仅凭这些点的 RGB 信息不足以捕获人类头像的丰富细节。所以所有的高斯点的预测信息是包含RGB信息的32维特征,首先进行 splatting 以获得粗略图像。
  2. 神经渲染器细化:使用类似EG3D的超分辨率模块,只不过不提升分辨率而是将粗略图像(32维特征)细化为高质量的最终图像。
    • 神经渲染器有效地将 dual-lifting 和表情高斯特征解码为RGB值,生成高质量的结果,并解决两组高斯之间的潜在冲突。
    • 在训练过程中,从零开始训练神经渲染器,不使用任何预训练初始化。

3.4 训练策略与损失函数

使用预训练的 DINOv2 不参与训练,其余部分从零开始训练。

  1. 数据:随机从同一视频中抽取两帧图像,一张作为 Source img,一张作为 Driving img 和 Target img
  2. 目标:
    • 确保生成的粗略图像 I c I_c Ic 和精细图像 I f I_f If 与目标图像 I t I_t It 对齐。

Loss:
L = ∣ ∣ I c − I t ∣ ∣ + ∣ ∣ I f − I t ∣ ∣ + λ p ( ∣ ∣ ϕ ( I c ) − ϕ ( I t ) ∣ ∣ + ∣ ∣ ϕ ( I f ) − ϕ ( I t ) ∣ ∣ ) + λ l L lifting L = ||I_c - I_t|| + ||I_f - I_t|| + \lambda_p(||\phi(I_c) - \phi(I_t)|| + ||\phi(I_f) - \phi(I_t)||) + \lambda_l L_{\text{lifting}} L=∣∣IcIt∣∣+∣∣IfIt∣∣+λp(∣∣ϕ(Ic)ϕ(It)∣∣+∣∣ϕ(If)ϕ(It)∣∣)+λlLlifting

  1. 图像重现损失( L 1 L1 L1 和感知损失):约束生成图像 ( I c I_c Ic, I f I_f If) 与目标图像 ( I t I_t It) 的像素和语义特征对齐。

    • L1 损失:直接计算像素级差异
      ∣ ∣ I c − I t ∣ ∣ + ∣ ∣ I f − I t ∣ ∣ ||I_c - I_t|| + ||I_f - I_t|| ∣∣IcIt∣∣+∣∣IfIt∣∣

    • 感知损失:通过预训练的感知模型(如 VGG)提取高层次语义特征,用于比较生成图像和目标图像的感知相似性:
      ∣ ∣ ϕ ( I c ) − ϕ ( I t ) ∣ ∣ + ∣ ∣ ϕ ( I f ) − ϕ ( I t ) ∣ ∣ ||\phi(I_c) - \phi(I_t)|| + ||\phi(I_f) - \phi(I_t)|| ∣∣ϕ(Ic)ϕ(It)∣∣+∣∣ϕ(If)ϕ(It)∣∣

      其中 ϕ \phi ϕ 表示感知模型提取的特征。

  2. Lifting 距离损失( L lifting L_{\text{lifting}} Llifting ):帮助模型更准确地学习 Dual-lifting 的 3D 点位置,从而增强重建的3D结构和视角变化能力。

    方法:使用 3DMM 提供的先验信息(顶点位置 P 3DMM P_{\text{3DMM}} P3DMM)约束双重提升生成的高斯点 ( G pos G_{\text{pos}} Gpos) 中最近的点与 3DMM 顶点的距离尽可能小。即通过 L2 损失计算顶点和最近点的距离。
    L lifting = ∣ ∣ P 3DMM − argmin q ∈ G pos ∥ p − q ∥ ∣ p ∈ P 3DMM ∣ ∣ L_{\text{lifting}} = ||P_{\text{3DMM}} - \text{argmin}_{q \in G_{\text{pos}}} \|p - q\| \ | \ p \in P_{\text{3DMM}} || Llifting=∣∣P3DMMargminqGpospq  pP3DMM∣∣

    • P 3DMM P_{\text{3DMM}} P3DMM:3DMM 的顶点集合

    • G pos G_{\text{pos}} Gpos:双重提升生成的高斯点集合

    • argmin q ∈ G pos ∥ p − q ∥ \text{argmin}_{q \in G_{\text{pos}}} \|p - q\| argminqGpospq:找到距离每个 3DMM 顶点最近的高斯点

    特点:只对部分高斯点施加约束(与 3DMM 顶点对应的部分),允许模型学习未被 3DMM 覆盖的区域(如头发、饰品等),增强生成图像的细节表现力。

3 Limitations

  1. 新视角未见区域的细节不足:

    • 生成结果可能是基于统计学上的“平均期望”,而非真实的细节例如:

      • 从侧脸视角生成另一半脸部时,缺乏真实的细节。
      • 从闭嘴图像生成张嘴状态时,生成结果可能不够逼真。
    • 原因:合成过程中缺乏对未见区域的具体信息,导致生成效果趋于平均化。

    解决方向:引入随机生成模型(如 diffusion),通过增加生成的随机性提高未见区域的细节表现。

  2. 表情分支的限制:

    • 依赖 3DMM:表情分支基于 3DMM 模型进行训练,而 3DMM 具有一定的局限性,无法完全覆盖所有面部细节。
    • 极端表情难以处理:如一只眼睛闭合而另一只眼睛睁开、舌头的动态或头发细节。
    • 数据集限制:表情分支从 VFHQ 视频数据中学习,可能不足以捕获极端的面部运动或未被 3DMM 模型覆盖的区域。

    解决方向:不依赖 3DMM,从图像中直接提取表情嵌入。—— 需要一个好的 E m o t E_{mot} Emot

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/62668.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文笔记-WWW2024-ClickPrompt

论文笔记-WWW2024-ClickPrompt: CTR Models are Strong Prompt Generators for Adapting Language Models to CTR Prediction ClickPrompt: CTR模型是大模型适配CTR预测任务的强大提示生成器摘要1.引言2.预备知识2.1传统CTR预测2.2基于PLM的CTR预测 3.方法3.1概述3.2模态转换3.…

预训练模型与ChatGPT:自然语言处理的革新与前景

目录 一、ChatGPT整体背景认知 (一)ChatGPT引起关注的原因 (二)与其他公司的竞争情况 二、NLP学习范式的发展 (一)规则和机器学习时期 (二)基于神经网络的监督学习时期 &…

GRAG: Graph Retrieval-Augmented Generation

GRAG: Graph Retrieval-Augmented Generation 摘要 简单检索增强生成 (Naive RAG) 聚焦于单一文档的检索,因此在处理网络化文档时表现不足,例如引用图、社交媒体和知识图谱等应用中非常常见的场景。为了解决这一限制,我们提出了图检索增强生…

使用Python OpenCV实现图像形状检测

目录 一、环境准备 二、读取和预处理图像 读取图像 灰度化 滤波去噪 三、边缘检测 四、查找轮廓 五、绘制轮廓 六、形状分类 七、显示结果 八、完整代码示例 九、总结 图像形状检测是计算机视觉领域中的一项关键技术,广泛应用于工业自动化、机器人视觉、医学图像处…

11.25.2024刷华为OD

文章目录 HJ76 尼科彻斯定理(观察题,不难)HJ77 火车进站(DFS)HJ91 走格子方法,(动态规划,递归,有代表性)HJ93 数组分组(递归)语法知识…

多线程篇-8--线程安全(死锁,常用保障安全的方法,安全容器,原子类,Fork/Join框架等)

1、线程安全和不安全定义 (1)、线程安全 线程安全是指一个类或方法在被多个线程访问的情况下可以正确得到结果,不会出现数据不一致或其他错误行为。 线程安全的条件 1、原子性(Atomicity) 多个操作要么全部完成&a…

自动驾驶决策规划算法-路径决策算法:二次规划

本文为学习自动驾驶决策规划算法第二章第四节(中) 路径二次规划算法》的学习笔记。 1 二次型 二次型的形式为 1 2 x T H x f T x \begin{equation} \frac{1}{2}\boldsymbol{x}^TH\boldsymbol{x}f^T\boldsymbol{x} \end{equation} 21​xTHxfTx​​ 约束 A e q x b e q \be…

AI开发-数据可视化库-Seaborn

1 需求 概述 Seaborn 是一个基于 Python 的数据可视化库,它建立在 Matplotlib 之上。其主要目的是使数据可视化更加美观、方便和高效。它提供了高层次的接口和各种美观的默认主题,能够帮助用户快速创建出具有吸引力的统计图表,用于数据分析和…

相交链表和环形链表

(一)相交链表 相交链表 思路:先分别计算出A列表和B列表的长度,判断它们的尾节点是否相等,如果不相等就不相交,直接返回空。然后让两个列表中的长的列表先走它们的差距步,然后再一起走&#xff…

[Redis#12] 常用类型接口学习 | string | list

目录 0.准备 1.string get | set set_with_timeout_test.cpp set_nx_xx_test.cpp mset_test.cpp mget_test.cpp getrange_setrange_test.cpp incr_decr_test.cpp 2.list lpush_lrange_test.cpp rpush_test.cpp lpop_rpop_test.cpp blpop_test.cpp llen_test.cpp…

A054-基于Spring Boot的青年公寓服务平台的设计与实现

🙊作者简介:在校研究生,拥有计算机专业的研究生开发团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹 赠送计算机毕业设计600…

【经典】星空主题的注册界面HTML,CSS,JS

目录 界面展示 完整代码 说明&#xff1a; 这是一个简单的星空主题的注册界面&#xff0c;使用了 HTML 和 CSS 来实现一个背景为星空效果的注册页面。 界面展示 完整代码 <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8&…

TiDB 优化器丨执行计划和 SQL 算子解读最佳实践

作者&#xff1a; TiDB社区小助手 原文来源&#xff1a; https://tidb.net/blog/5edb7933 导读 在数据库系统中&#xff0c;查询优化器是数据库管理系统的核心组成部分&#xff0c;负责将用户的 SQL 查询转化为高效的执行计划&#xff0c;因而会直接影响用户体感的性能与稳…

位运算在嵌入式系统开发中的应用

目录 一、数据存储与节省 “绝技” 1.1. 传感器数据存储挑战 1.2. 位运算解决方案 1.2.1. 数据整合 1.2.2. 数据提取 1.3. 收益分析 二、硬件控制 “精准操纵术” 2.1. 位运算操控硬件寄存器的实例 2.2. 位运算在硬件控制中的优势 2.3. 电机驱动芯片寄存器控制示例 …

设置redis

1.https://github.com/tporadowski/redis/releases下载对应版本 解压 启动redis临时服务 在 redis 文件夹下 cmd 输入redis-server.exe redis.windows.conf 临时服务启动 从新打开一个cmd 运行redis-cli 输入ping 启动成功 命令行输入shutdown关闭服务 创建永久服务 在…

排序学习整理(1)

1.排序的概念及运用 1.1概念 排序&#xff1a;所谓排序&#xff0c;就是使⼀串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作&#xff0c;以便更容易查找、组织或分析数据。 1.2运用 购物筛选排序 院校排名 1.3常见排序算法 2.实…

【Rust】unsafe rust入门

这篇文章简单介绍下unsafe rust的几个要点 1. 解引用裸指针 裸指针其实就是C或者说C的指针&#xff0c;与C的指针不同的是&#xff0c;Rust的裸指针还是要分为可变和不可变&#xff0c;*const T 和 *mut T&#xff1a; 基于引用创建裸指针 let mut num 5;let r1 &num …

# 01_Python基础到实战一飞冲天(三)--python面向对象(一)--简单类

01_Python基础到实战一飞冲天&#xff08;三&#xff09;–python面向对象&#xff08;一&#xff09;–简单类 一、面向对象-01-基本概念 1、面向对象(OOP) 面向对象编程 —— Object Oriented Programming 简写 OOP。 2、面向对象(OOP) 学习目标 了解 面向对象 基本概念…

Java 基础知识与核心概念

Java 作为一门广泛使用的编程语言&#xff0c;它的基础知识是每个开发者必须掌握的。无论是面向对象编程&#xff08;OOP&#xff09;还是集合框架的使用&#xff0c;理解这些核心概念能够帮助我们在日常开发中更加高效和准确地编写代码。本文将从设计模式、集合原理到常见类的…

【C++习题】24.二分查找算法_0~n-1中缺失的数字

文章目录 题目链接&#xff1a;题目描述&#xff1a;解法C 算法代码&#xff1a;图解 题目链接&#xff1a; 剑指 Offer 53 - II. 0&#xff5e;n-1中缺失的数字 题目描述&#xff1a; 解法 哈希表&#xff1a; 建立一个hash表看哪个数字出现次数为0 直接遍历找结果&#xff1…