[CVPR-23] PointAvatar: Deformable Point-based Head Avatars from Videos

[paper | code | proj]

  • 本文的形变方法被成为:Forward Deformation
  • PointAvatar基于点云表征动态场景。目标是根据给定的一段单目相机视频,重建目标的数字人,并且数字人可驱动;
  • 通过标定空间(canonical space)和形变空间(deformation space)表征场景。
  • 其中,标定空间中的任意点坐标,首先映射至FLAME空间,通过对应FLAME的相关系数(表情、位姿和LBS)从FLAME空间映射至形变空间。
  • 该点的颜色,被拆解为与姿态无关的反射率(albedo)和与姿态相关的阴影(shading)。其中前者根据点在标定空间中的坐标预测得到,后者根据点在形变空间的法向量预测得到。
  • 点在标定空间中的法向量通过拟合SDF对坐标求导得到,在形变空间中的法向量通过点的逆雅可比矩阵求得。

方法

基于点的标定表征

  • 包括颜色
  • 。N个可学习的点。初始化时,从一个球体中采样点;后续训练中,增加点的数量同时减少点的半径。在训练过程中,对下面两种点会删除掉:不能投影至任何像素的点、可见度高于某个阈值的点。

  • 颜色。将点颜色解耦为与位姿(pose)无关的反射率(albedo)和与pose相关的阴影(shading);
    • 阴影部分:通过点在形变空间的法向量(normal)估计;
    • 因此,本文的重点在于:
      • 1)如何估计点在标定空间中的反射率和法向量;
      • 2)如何估计点在形变空间中的位置和法向量;

标定空间下的法向量

  • 训练中,根据当前标定空间下的点,估计SDF:L_{sdf} = {|| SDF(x_c)||}^2L_{eik} = {(||\nabla_{x_e}SDF(x_e)]|| - 1)}^2。其中,后者是Eikonal正则项,x_e包含了点和扰动点;
  • 通过SDF对该点位置求导,得到该点的法向量:n_c = \nabla_{x_c} SDF(x_c)

标定空间下的反射率

  • 通过一个MLP将点位置x_c映射为反射率颜色(albedo colors)a \in \mathbb{R}^3。为了节省计算开销,本文用一个MLP同时计算标定空间下的法向量和反射率:

点的形变

  • 将标定点x_c,通过预测的标定差O,映射为FLAME标定点x_o
  • 将FLAME标定点x_o,通过表情系数,LBS系数等,映射为形变点x_d
  • 通过MLP,输入为标定点,输出为标定差O\in\mathbb{R}^3、表情系数残差\varepsilon \in \mathbb{R}^{n_e \times 3}、姿态系数残差P \in \mathbb{R}^{n_p \times 9 \times 3}和LBS系数W\in\mathbb{R}^{n_j}。具体公式如下:

法向量的形变

  • 求得标定点x_c和形变点x_d,可通过对应雅可比逆矩阵,求形变法向量

点的颜色

标定点x_c,在形变空间中的坐标是x_d,对应的形变颜色是c_d

其中,s_d可通过形变点的法向量求得:

可导的点渲染

基于PyTorch3D实现,和3DGS的Splatting渲染方法类似。

训练目标

其中,M是头部掩码(head mash),表情系数,位姿系数和LBS系数的伪标签定义为最近邻FLAME顶点。最终损失为:

实验

  • 数据集包含:
    • IMavatar中的1个目标;
    • NerFace中的2个目标;
    • 本文在互联网收集的1个目标、基于智能手机拍摄的4个目标和笔记本摄像头拍摄的1个目标
  • 基线方法:NerFace、neural head avatar (NHA)和IMavatar

SOTA方法的比较

重光照(光照解耦)

训练和渲染开销

消融实验

  • 相较于直接在预定义FLAME模型中学习,在标准空间中任意学习,再映射到FLAME空间,表现更佳。

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

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

相关文章

网络编程day5

作业 1> 使用select完成TCP客户端程序 //client #include<myhead.h> #define CLINET_IP "192.168.125.79" #define CLINET_PORT 9999 #define SERVE_IP "192.168.125.79" #define SERVE_PORT 8888 int main(int argc, const char *argv[]) {/…

JVM垃圾收集器三色标记算法

垃圾收集算法 分代收集理论 当前虚拟机的垃圾收集都采用分代收集算法&#xff0c;这种算法没有什么新的思想&#xff0c;只是根据对象存活周期的不同将内存分为几块。一般将java堆分为新生代和老年代&#xff0c;这样我们就可以根据各个年代的特点选择合适的垃圾收集算法。 比…

作业--day34

使用select完成TCP并发服务器和客户端 server.c #include <myhead.h>#define PORT 8888 #define IP "192.168.125.137"int main(int argc, const char *argv[]) {int sfd socket(AF_INET, SOCK_STREAM, 0);if(sfd -1){perror("socket error");re…

融了超24亿元舍不得花,放银行吃利息,这家存储创企厉害了

引言&#xff1a;AI与大模型风起云涌&#xff0c;为什么催生了这匹存储“黑马”&#xff1f; 【阿明观察 &#xff5c; 科技热点关注】 这家总部设在美国的存储初创公司&#xff0c;真的赶上AI与大模型时代的风口了。Vast Data公司最新再次获得E轮融资1.18亿美元&#xff0c;…

开放API签名认证的设计并开发对应的SDK

1. 为什么需要签名认证呢&#xff1f; 假设我们开放了一个接口&#xff0c;而我们的服务器只允许处理1000个请求&#xff0c;如果这个时候由用户疯狂发送几万个请求&#xff0c;可能会导致服务器宕机&#xff0c;影响其他用户的正常使用。这个情况下我们需要对接口进行限流&am…

那些令人惊叹的awk简略写法

​​​​​​​awk是一门美妙的语言&#xff0c;被称为unix命令行工具皇冠上的明珠。它有很多简略写法&#xff0c;用好了可以用极少的代码快速解决问题。 下面就列举一些令人惊叹的awk简略写法&#xff1a; awk {sub(/pattern/, "foobar")} 1 # 无论替换是否成功&…

在scrapy 使用selenium模拟登录获取cookie

前言 最近有一点点爬虫需求&#xff0c;想总结一下scrapy框架的一些基本使用方法&#xff0c;加深印象&#xff0c;自己一直习惯使用一些脚本文件运行爬虫&#xff0c;面对数据量非常大&#xff0c;稳定性要求比较高的&#xff0c;效率需求比较高的情况下还是用scrapy较为合适…

Seata:打造行业首个分布式事务产品

作者&#xff1a;季敏&#xff0c;阿里云分布式事务产品负责人、Seata 开源项目创始人 微服务架构下数据一致性的挑战 微服务开发的痛点 在 2019 年&#xff0c;我们基于 Dubbo Ecosystem Meetup&#xff0c;收集了 2000 多份关于“在微服务架构&#xff0c;哪些核心问题是开…

【C++】开源:ImGui图形用户界面库配置与使用

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍ImGui图形用户界面库配置与使用。 无专精则不能成&#xff0c;无涉猎则不能通。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&…

13 v-show指令

概述 v-show用于实现组件的显示和隐藏&#xff0c;和v-if单独使用的时候有点类似。不同的是&#xff0c;v-if会直接移除dom元素&#xff0c;而v-show只是让dom元素隐藏&#xff0c;而不会移除。 在实际开发中&#xff0c;v-show也经常被用到&#xff0c;需要重点掌握。 基本…

TypeScript【泛型1、泛型2、声明合并、命名空间 、模块1、模块2、声明文件简介】(五)-全面详解(学习总结---从入门到深化)

文章目录 泛型1 泛型2 声明合并 命名空间 模块1 模块2 声明文件简介 泛型1 泛型&#xff08;Generics&#xff09;是指在定义函数、接口或类的时候&#xff0c;不预先指定具体的类型&#xff0c;而在使用的时候再指定类型的一种特性 首先&#xff0c;我们来实现一个函数…