GAGAvatar: Generalizable and Animatable Gaussian Head Avatar 学习笔记
1 Overall
GAGAvatar(Generalizable and Animatable Gaussian Avatar),一种面向单张图片驱动的可动画化头部头像重建的方法,解决了现有方法在渲染效率和泛化能力上的局限。 旋转参数
现有方法的局限性:
- 基于NeRF的方法:
- 优点:在头像合成和细节(如头发、饰品)上效果优秀。
- 局限:NeRF老毛病渲染慢,实时性较差。
- 基于 3DGS 的方法:
- 优点:实现实时渲染
- 局限:针对每个 identity 需要进行特定的训练,无法推广泛化。
Contributions:
- 引入 Dual-lifting 方法及结合 3DMM 先验,解决了从单张图片构建 3D 高斯模型的难题。
- 通过预测图像平面中每个像素的 lifting 距离(即从 2D 到 3D 的深度信息)。
- 利用 forward and backward lifting 生成几乎闭合的 3D 高斯点分布,最大程度还原头部形状。
- 结合 3DMM 的先验,约束 lifting 过程,确保生成细节。
- 通过结合 3DMM 和高斯分布,既能准确传递表情信息,又避免了冗余计算。
2 Method

本文方法分为两个主要分支:重建分支(Reconstruction Branch)和表情控制分支(Expression Branch)
重建分支生成静态高斯点,而表达分支生成动态高斯点。
主要步骤:
- 从源图像中提取全局和局部特征,用 DINOv2 进行多尺度视觉特征提取。
- 基于局部特征,提出了双 lifting (Dual-lifting)方法,预测 3D 高斯点的位置和参数。
- 同时,结合全局特征和 3DMM 顶点特征,生成另一个表情高斯点集合。
- 将所有 3D 高斯点通过 splatting 生成粗图像 I c I_c Ic。
- 使用神经渲染器对 I c I_c Ic 进行细化,生成最终结果 I f I_f If。
2.1 重建分支
Dual-lifting 策略:
- 在单次 lifting 方法中,模型可能无法确定将像素 lifting 到可见表面还是物体背面,导致学习过程中的歧义。双重 lifting 通过分别预测前向和后向偏移,解决了这一问题,消除歧义,稳定优化过程。最终,两组 lifting 点几乎形成封闭的高斯点分布。
过程:

-
提取特征:
- 使用冻结的 DINOv2 模型提取 296 × 296 296 \times 296 296×296 的局部特征平面 F local F_{\text{local}} Flocal
-
预测参数:不是直接预测 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)]
-
-
从平面到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,ps−EConv1(Flocal)⋅ns]
2.2 表情分支
组成:
-
3DMM:
- 表情解耦:3DMM 可以将面部表情和身份特征解耦。这种解耦使得即使是不同身份的图像之间,也可以有效地传递表情?
- 顶点语义稳定性:3DMM 的每个顶点在模型中对应固定的面部区域(如眼睛、嘴巴等),有助于精确定位和修改特定部位的表情。
-
3D Gaussians:
- 通过 3DMM 的顶点位置生成 3D Gaussians。
- 顶点的学习权重与表情特征绑定,用于调整生成的图像中的表情。
过程:

- 输入特征融合:
- 通过 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 和顶点特征拼接
- 高斯参数预测:使用 MLP 从拼接的特征中预测每个点除了位置外的所有高斯参数(如颜色、透明度、大小、旋转等)。
- 使用 3DMM 顶点的固定位置作为高斯点的位置输入,保持空间一致性。
高效表情驱动:
- 只需在初始阶段一次性的计算出重建分支和表情分支的高斯点。通过修改表情分支中高斯的位置和相机姿态,实现快速的表情重演,无需重复计算。那表情高斯点的其他属性为什么不需要调整?
3.3 神经渲染器
- dual-lifting 之后仅仅获得175,232个高斯点比较少,所以仅凭这些点的 RGB 信息不足以捕获人类头像的丰富细节。所以所有的高斯点的预测信息是包含RGB信息的32维特征,首先进行 splatting 以获得粗略图像。
- 神经渲染器细化:使用类似EG3D的超分辨率模块,只不过不提升分辨率而是将粗略图像(32维特征)细化为高质量的最终图像。
- 神经渲染器有效地将 dual-lifting 和表情高斯特征解码为RGB值,生成高质量的结果,并解决两组高斯之间的潜在冲突。
- 在训练过程中,从零开始训练神经渲染器,不使用任何预训练初始化。
3.4 训练策略与损失函数
使用预训练的 DINOv2 不参与训练,其余部分从零开始训练。
- 数据:随机从同一视频中抽取两帧图像,一张作为 Source img,一张作为 Driving img 和 Target img
- 目标:
- 确保生成的粗略图像 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=∣∣Ic−It∣∣+∣∣If−It∣∣+λp(∣∣ϕ(Ic)−ϕ(It)∣∣+∣∣ϕ(If)−ϕ(It)∣∣)+λlLlifting
-
图像重现损失( 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|| ∣∣Ic−It∣∣+∣∣If−It∣∣ -
感知损失:通过预训练的感知模型(如 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 ϕ 表示感知模型提取的特征。
-
-
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=∣∣P3DMM−argminq∈Gpos∥p−q∥ ∣ p∈P3DMM∣∣-
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\| argminq∈Gpos∥p−q∥:找到距离每个 3DMM 顶点最近的高斯点
特点:只对部分高斯点施加约束(与 3DMM 顶点对应的部分),允许模型学习未被 3DMM 覆盖的区域(如头发、饰品等),增强生成图像的细节表现力。
-
3 Limitations
-
新视角未见区域的细节不足:
-
生成结果可能是基于统计学上的“平均期望”,而非真实的细节例如:
- 从侧脸视角生成另一半脸部时,缺乏真实的细节。
- 从闭嘴图像生成张嘴状态时,生成结果可能不够逼真。
-
原因:合成过程中缺乏对未见区域的具体信息,导致生成效果趋于平均化。
解决方向:引入随机生成模型(如 diffusion),通过增加生成的随机性提高未见区域的细节表现。
-
-
表情分支的限制:
- 依赖 3DMM:表情分支基于 3DMM 模型进行训练,而 3DMM 具有一定的局限性,无法完全覆盖所有面部细节。
- 极端表情难以处理:如一只眼睛闭合而另一只眼睛睁开、舌头的动态或头发细节。
- 数据集限制:表情分支从 VFHQ 视频数据中学习,可能不足以捕获极端的面部运动或未被 3DMM 模型覆盖的区域。
解决方向:不依赖 3DMM,从图像中直接提取表情嵌入。—— 需要一个好的 E m o t E_{mot} Emot
相关文章:

GAGAvatar: Generalizable and Animatable Gaussian Head Avatar 学习笔记
1 Overall GAGAvatar(Generalizable and Animatable Gaussian Avatar),一种面向单张图片驱动的可动画化头部头像重建的方法,解决了现有方法在渲染效率和泛化能力上的局限。 旋转参数 现有方法的局限性: 基于NeRF的方…...
什么是VISUAL STUDIO CODE (V S CODE)
Visual Studio Code(简称VS Code)是由微软开发的一个免费的、开源的源代码编辑器。它是一个轻量级但功能强大的工具,支持多种编程语言和框架,广泛用于开发各种应用程序,尤其是Web开发。VS Code具备以下特点:…...
2024年09月中国电子学会青少年软件编程(Python)等级考试试卷(三级)答案 + 解析
青少年软件编程(Python)等级考试试卷(三级) 分数:100 题数:38 一、单选题(共25题,共50分) 1. 以下表达式的值为True的是?( ) A. all( ,1,2,3) B. any([]) C. bool(abc) D. divmod(6,0)...

C++初阶——动态内存管理
目录 1、C/C内存区域划分 2、C动态内存管理:malloc/calloc/realloc/free 3、C动态内存管理:new/delete 3.1 new/delete内置类型 3.2 new/delete自定义类型 4、operator new与operator delete函数 5、new和delete的实现原理 5.1 内置类型 5.2 自定…...

如何查看阿里云ddos供给量
要查看阿里云上的 DDoS 攻击量,你可以通过阿里云的 云盾 DDoS 防护 服务来进行监控和查看攻击数据。阿里云提供了详细的流量监控、攻击日志以及攻击趋势分析工具,帮助用户实时了解 DDoS 攻击的情况。以下是九河云总结的查看 DDoS 攻击量的步骤࿱…...
MySQL中的事务隔离全详解
第一部分:MySQL事务的特性与并行事务引发的问题 1. 什么是事务及其四大特性(ACID)? 事务(Transaction)是数据库操作的基本单位,它将一组操作组合在一起,以确保这些操作作为一个整体…...

异常--C++
文章目录 一、异常的概念及使用1、异常的概念2、异常的抛出和捕获3、栈展开4、查找匹配的处理代码5、异常重新抛出6、异常安全问题7、异常规范 二、标准库的异常 一、异常的概念及使用 1、异常的概念 异常处理机制允许程序中独立开发的部分能够在运行时就出现的问题进行通信并…...

SeggisV1.0 遥感影像分割软件【源代码】讲解
在此基础上进行二次开发,开发自己的软件,例如:【1】无人机及个人私有影像识别【2】离线使用【3】变化监测模型集成【4】个人私有分割模型集成等等,不管是您用来个人学习还是公司研发需求,都相当合适,包您满…...
锁-读写锁-Swift
实现一 pthread_mutex_t: ReadWriteLock/Sources/ReadWriteLock at main SomeRandomiOSDev/ReadWriteLock GitHub https://swiftpackageindex.com/reers/reerkit/1.0.39/documentation/reerkit/readwritelock/ // // Copyright © 2022 reers. // // Pe…...

Kafka如何保证消息可靠?
大家好,我是锋哥。今天分享关于【Kafka如何保证消息可靠?】面试题。希望对大家有帮助; Kafka如何保证消息可靠? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Kafka通过多种机制来确保消息的可靠性,主要包…...

5.10【机器学习】
如果FLAG的画,就是已经有模型了,不然就新建一个模型,通过TORCH方法 在训练的时候,如果TRAIN的话就是训练,不然就是预测 forward前向预测出来一个结果,就是1234 在train方法里,进行多轮迭代&am…...

[白月黑羽]关于仿写股票数据软件题目的解答
原题: 对应问题视频: 实现的效果 不同点 实现的作品和原题要求的不同点 题目要求爬虫获取数据,作品中是调库获取所有股票历史数据实时数据使用爬虫的方式爬取指定股票的数据,需要实时更新,我做了修改,改…...

详解LZ4文件解压缩问题
详解LZ4文件解压缩问题 一、LZ4文件解压缩方法1. 使用LZ4命令行工具2. 使用Python库3. 使用第三方工具4. 在线解压工具 二、常见问题及解决方法1. 解压显示文件损坏2. 解压后文件大小异常 三、总结 LZ4是一种快速的压缩算法,广泛应用于需要实时压缩和解压缩大文件的…...
vue项目中单独文件的js不存在this.$store?.state怎么办
在Vue项目中,如果你在单独的文件(比如插件、工具函数等)中遇到this.$store不存在的情况,这通常是因为this上下文不指向Vue实例,或者Vuex store没有被正确地注入到Vue实例中。以下是几种可能的解决方案: 确保…...

Github提交Pull Request教程 Git基础扫盲(零基础易懂)
1 PR是什么? PR,全称Pull Request(拉取请求),是一种非常重要的协作机制,它是 Git 和 GitHub 等代码托管平台中常见的功能,被广泛用于参与社区贡献,从而促进项目的发展。 PR的整个过…...

Java函数式编程【二】【Stream的装饰】【中间操作】【map映射器】【摊平映射器flatMap】
一、Java的Stream流式编程中的中间操作 Java的Stream流式编程中,中间操作是对数据流进行处理的一种方式,这些操作通常返回流对象本身,以便可以链接更多的操作。以下是一些常见的中间操作: filter(Predicate predicate) - 用于通过…...
树莓派明明安装了opencv和numpy,却找不到
当然不止树莓派,配置python环境都可能存在这个问题 可能是因为安装的 numpy 或者 opencv 版本与 Python 的包路径不匹配。下面是问题的常见原因及解决方法:【方法一和二优先考虑】 原因分析 多版本 Python 环境冲突: 树莓派上可能有多个版本…...
numpy.float8不存在;Python中,实现16位浮点数
目录 python中矩阵的浮点数存储 numpy.float8不存在 Python中,实现16位浮点数 实现 float16 关于 float8 python中矩阵的浮点数存储 在Python中,矩阵通常是通过嵌套列表(list of lists)、NumPy数组(numpy.ndarray)或其他类似的数据结构来表示的。矩阵中存储的数值所…...

Redis集群配置 (不使用docker 部署)
1. Redis集群简介 1.1 什么是Redis集群 Redis集群是一种通过将多个Redis节点连接在一起以实现高可用性、数据分片和负载均衡的技术。它允许Redis在不同节点上同时提供服务,提高整体性能和可靠性。根据搭建的方式和集群的特性,Redis集群主要有三种模式&…...
HTML5系列(7)-- Web Storage 实战指南
前端技术探索系列:HTML5 Web Storage 实战指南 🗄️ 致读者:本地存储的新纪元 👋 前端开发者们, 今天我们将深入探讨 HTML5 中的 Web Storage 技术,这是一个强大的本地存储解决方案,让我们能…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...

边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...

Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...

初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...