尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

ExAvatar 原理入门:Triplane 特征场 + MLP 如何让 3D 高斯跟着 SMPL-X 骨架动起来?

ExAvatar 原理入门:Triplane 特征场 + MLP 如何让 3D 高斯跟着 SMPL-X 骨架动起来? ExAvatar 原理入门Triplane 特征场 MLP 如何让 3D 高斯跟着 SMPL-X 骨架动起来【免费下载链接】ExAvatar_RELEASEOfficial PyTorch implementation of Expressive Whole-Body 3D Gaussian Avatar, ECCV 2024.项目地址: https://gitcode.com/gh_mirrors/ex/ExAvatar_RELEASEExAvatar 是 ECCV 2024 论文《Expressive Whole-Body 3D Gaussian Avatar》的官方 PyTorch 实现它把SMPL-X 全身参数化模型身体 双手 脸与3D 高斯泼溅3DGS的外观能力结合只需一段单目视频就能训练出一个可被任意新动作、新表情驱动的全身 3D 高斯数字人。它的核心设计是用Triplane三平面特征场作为紧凑的身体外观编码用MLP把特征转换成每个顶点上的 3D 高斯属性再借助LBS线性混合蒙皮让高斯精确跟随骨骼变换。ExAvatar 官方演示左侧是原始单目视频右侧是由新姿态、手姿与表情驱动的渲染结果 先看效果ExAvatar 能做什么全身可驱动身体、双手、面部表情都可以被 SMPL-X 参数独立控制下颌、左右眼、手部关节全部可动高保真外观背景用经典 3D 高斯建模人物用网格绑定的高斯建模渲染速度接近实时两步式工作流fitting/用 COLMAP 估相机、DECA 初始化面部、mmpose 提取关键点、SAM 抠出前景再把 SMPL-X 拟合到每一帧视频avatar/训练 Triplane MLP 场景高斯得到可动画的头像并可用新动作驱动或环绕相机视角渲染 Triplane 特征场为什么不用点云而用三张平面在avatar/common/nets/module.py的HumanGaussian类中外观被存成 3 张可学习特征图即 triplane默认分辨率为32 通道 × 128×128配置见avatar/main/config.py的triplane_shape (32, 128, 128)分别对应 XY、XZ、YZ 三个投影平面。特征提取过程extract_tri_feature方法非常直观取中性姿态neutral pose下、经过细分的高分辨率网格得到每个顶点在模板坐标系中的位置把顶点坐标归一化到 [-1, 1]用F.grid_sample在三个平面上各采样一次把三份特征拼接得到每个顶点一个 96 维32×3的局部特征。这样做的好处是外观信息与姿态解耦——所有高斯都长在中性姿态网格上换姿态时只需整体变形不需要为每种姿势重学外观而且 3 张 128×128 的特征图比几十万顶点的高斯属性紧凑得多收敛也更稳定。面部区域还单独配了一张 triplanetriplane_face专门捕捉表情细节。 MLP LBS每个 3D 高斯如何粘在骨架上这是回答高斯怎么动起来的关键整体流程如下① 基础外观与姿态无关把顶点特征送进geo_net3 层 128 维 MLP GroupNorm分出两个小头mean_offset_net预测高斯中心相对网格顶点的偏移scale_net预测高斯尺寸rgb_net则直接预测高斯颜色。于是每个顶点得到一个高斯中心 中性网格顶点 MLP 偏移。② 姿态相关修正换姿态时网格会弯曲、衣物会形变geo_offset_net把Triplane 特征 SMPL-X 身体姿态6D 旋转表示一起输入输出姿态相关的二次位置/尺寸偏移对双手和面部则直接采用 SMPL-X 自带pose_dirs的顶点偏移保证手指和五官的精细形变。③ 骨骼蒙皮LBS拿到 SMPL-X 参数后先做前向运动学算出每个关节的 4×4 变换矩阵代码中用batch_rigid_transform每个高斯按网格顶点的skinning 权重对若干关节变换做加权合成整块网格 高斯就像布料一样平滑地跟着骨架运动。面部表情则通过expr_dirsFLAME 表情基叠加顶点偏移实现。④ 视角相关颜色rgb_offset_net额外输入姿态和顶点法线输出视角相关的颜色修正让不同角度看头像都有合理的光照感。此外每个顶点还有基础 精修两套高斯属性refined 版本叠加姿态修正分别参与损失计算使网络学到更稳的姿态响应。 训练阶段背景 3DGS 与人体网络一起学avatar/main/model.py中的Model把两部分组合起来渲染场景高斯SceneGaussian静态背景从背景点云初始化走经典 3DGS 流程含 densify/prune、球谐颜色训练前 15000 步会持续致密化人体高斯HumanGaussian即上文 Triplane MLP 部分数量固定、不致密化。损失函数定义在avatar/common/nets/loss.py除了常规的 RGB0.8、SSIM0.2、LPIPS0.2外还有几个很工程化的项损失项作用面部网格渲染损失用 FLAME 纹理单独渲染脸部区域迫使高斯贴合面部几何随机背景 RGB 损失人体单独渲染时用随机背景色防止人体抄背景Laplacian 正则平滑位置/尺寸/颜色偏移抑制高斯抖动关节偏移对称正则左右手关节偏移保持对称合理 快速上手本地跑通 ExAvatar 的三步第 1 步安装环境git clone https://gitcode.com/gh_mirrors/ex/ExAvatar_RELEASE cd ExAvatar_RELEASE conda env create -f environment.yml conda activate exavatar记得把 SMPL-X、FLAME 等模型文件放到common/utils/human_model_files/目录需先到官方站点注册下载各 README 有说明。第 2 步准备数据并拟合 SMPL-X用自己的视频时按fitting/README.md的流程走提取帧 → 跑 COLMAP/DECA/mmpose/SAM/Depth-Anything 等预处理 → 运行fitting/main/fit.py得到逐帧 SMPL-X 参数、相机与蒙版。也可以直接使用仓库自带的 NeuMan 预处理数据如bike、jogging场景。第 3 步训练与动画# 在 avatar/ 下训练先在 avatar/main/config.py 里设置 dataset 与 subject python main/train.py --subject_id bike # 用新的 SMPL-X 动作驱动头像 python main/animate.py --subject_id bike --test_epoch 4 --motion_path $MOTION_PATH # 环绕相机视角渲染 python main/animate_view_rot.py --subject_id bike --test_epoch 4 --motion_path $MOTION_PATH训练完成即可得到照片级、可换动作、可换表情的全 3D 高斯数字人。 核心文件速查想深入源码的同学可以从这几个文件入手模块路径说明模型组装与训练循环avatar/main/model.py、avatar/main/train.py组合场景/人体高斯定义全部损失网络核心avatar/common/nets/module.pyHumanGaussianTriplaneMLPLBS、SceneGaussian、GaussianRenderer超参数配置avatar/main/config.pytriplane 形状、学习率、致密化策略等动画与测试avatar/main/animate.py、avatar/main/test.py用新动作驱动、渲染环绕视角SMPL-X / FLAME 封装avatar/common/utils/smpl_x.py、avatar/common/utils/flame.py网格细分、顶点索引、表情基等高斯光栅化封装avatar/common/utils/transforms.pySH 求值、相机矩阵构造SMPL-X 拟合fitting/main/fit.py、fitting/tools/run.py从视频得到可驱动的参数小结ExAvatar 的巧妙之处在于把三个成熟技术拼成了一个闭环Triplane 负责紧凑地记住长什么样MLP 负责把外观摊到每个网格顶点的高斯上SMPL-X LBS 负责让高斯跟着骨架动。理解了这个中性姿态网格 → 特征采样 → 高斯属性 → 蒙皮变形的数据流再去看avatar/common/nets/module.py里的forward函数整个 ExAvatar 就一目了然了。【免费下载链接】ExAvatar_RELEASEOfficial PyTorch implementation of Expressive Whole-Body 3D Gaussian Avatar, ECCV 2024.项目地址: https://gitcode.com/gh_mirrors/ex/ExAvatar_RELEASE创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表