当前位置: 首页 > news >正文

HumanNeRF:Free-viewpoint Rendering of Moving People from Monocular Video 精读

1. 姿态估计和骨架变换模块

  • 人体姿态估计:HumanNeRF 通过已知的单目视频对视频中人物的姿态进行估计。常见的方法是通过人体姿态估计器(如 OpenPose 或 SMPL 模型)提取人物的骨架信息,获取 3D 关节的位置信息。这些关节信息可以帮助建模每一帧视频中人物的骨架姿态。

  • 骨架绑定和变换:通过这些 3D 关节信息,系统能够计算出骨架在不同帧中如何变化。HumanNeRF 通过骨架绑定(rigging)的方式,将骨架姿态与人体的点云或体积绑定在一起。这样,在每一帧中,人体表面的点会根据骨架的运动进行相应的变换。

2. 规范空间(Canonical Space)模块

  • 规范姿态建模:在 HumanNeRF 中,人物的几何形态被标准化为 规范姿态,例如 T-pose。规范姿态是一个无论人体如何运动和变形,都会映射到的标准几何形态。在训练过程中,NeRF 会学习如何将不同姿态下的采样点映射回这个规范姿态。

  • 从规范空间到动态姿态的映射:当系统估计出规范姿态后,HumanNeRF 会通过学习一个 运动场(Motion Field) 来将规范姿态中的人体点转换到目标姿态(视频中实际拍摄的姿态)。这个映射使得模型能够处理人物的姿态变换,并生成一致的几何形态。

3. 非刚性运动场(Non-Rigid Motion Field)模块

  • 处理人物的非刚性运动:HumanNeRF 还需要处理人物的非刚性运动,比如人体的肌肉、衣物、皮肤等随姿态变换时产生的局部变化。为了建模这些变化,HumanNeRF 通过 非刚性运动场(Non-Rigid Motion Field) 来估计不同姿态下的细微变化。
  • MLP 模型:为了计算出从规范姿态到目标姿态的非刚性运动偏移,HumanNeRF 使用了一个多层感知机(MLP)模型。这个 MLP 接收人物的骨架姿态信息以及位置嵌入(Positional Embedding),并输出人体各个部位的非刚性偏移,从而动态调整人物的表面形态。

4. NeRF 渲染模块

  • 视角转换与体积渲染:HumanNeRF 使用 NeRF 的方式对人物进行渲染。NeRF 的原理是将射线投射到三维空间中,利用体积渲染(Volume Rendering)计算射线经过的体素点的颜色和密度。HumanNeRF 将渲染的过程分为两步:
    1. 从规范姿态进行采样:首先在规范空间下进行采样,生成对应点的颜色和密度。
    2. 映射到动态姿态:再通过运动场和非刚性运动场将规范姿态下的采样点映射到目标姿态,并生成对应的动态人物渲染结果。
  • 自由视角渲染:通过这个过程,系统可以生成任何视角下的视频帧,甚至是原始摄像机没有拍摄到的视角。这使得 HumanNeRF 实现了 自由视角渲染 的目标。

5. 时序一致性(Temporal Consistency)模块

  • 时序一致性处理:为了确保渲染出的动态人物在时间上具有一致性(例如防止物体“抖动”或“跳动”),HumanNeRF 还专门处理了时序一致性问题。它通过在多个时间帧之间建立关联来保证每个时间步的渲染结果都能平滑过渡。

  • 帧间优化:HumanNeRF 通过帧间一致性优化,使得模型在进行自由视角渲染时,不仅要在单帧内生成高质量的结果,还要保证相邻帧之间的渲染具有连贯性。

6. 训练与优化模块

  • 监督学习:HumanNeRF 使用监督学习方法,通过大量的单目视频帧和对应的姿态标签进行训练。模型通过将不同姿态下的点映射到规范空间,再渲染回目标姿态,逐渐学习如何正确地对人物进行渲染。

  • 损失函数:HumanNeRF 的训练过程可能包含多种损失函数,通常包括:

    1. 颜色损失:衡量渲染出的颜色与真实视频中的颜色差异。
    2. 几何一致性损失:确保在不同视角下渲染的几何形态保持一致。
    3. 时序一致性损失:防止渲染出的动态视频在时间序列上不稳定。

7. 自由视角动态渲染(Free-viewpoint Dynamic Rendering)

HumanNeRF 的最终目标是生成自由视角的动态渲染效果,尤其是在单目视频的约束下。通过对规范姿态、骨架运动、非刚性运动的结合,HumanNeRF 可以在输入单目视频的基础上,渲染出从不同视角观察到的动态人物。

http://www.lryc.cn/news/449564.html

相关文章:

  • Springboot中基于注解实现公共字段自动填充
  • Android 已经过时的方法用什么新方法替代?
  • 【RocketMQ】MQ与RocketMQ介绍
  • 【笔记】自动驾驶预测与决策规划_Part4_时空联合规划
  • Linux指令收集
  • 《C++并发编程实战》笔记(五)
  • 在Python中实现多目标优化问题(5)
  • 【Linux:共享内存】
  • 今年Java回暖了吗
  • a = Sw,其中a和w是向量,S是矩阵,求w等于什么?w可以写成关于a和S的什么样子的公式
  • 多线程事务管理:Spring Boot 实现全局事务回滚
  • Vue3 中集成海康 H5 监控视频播放功能
  • Linux: eBPF: libbpf-bootstrap-master 编译
  • 1.1.4 计算机网络的分类
  • 周家庄智慧旅游小程序
  • 【在Linux世界中追寻伟大的One Piece】命名管道
  • 如意控物联网项目-ML307R模组软件及硬件调试环境搭建
  • 大模型分布式训练并行技术(九)-总结
  • uniapp view设置当前view之外的点击事件
  • 【Mybatis篇】动态SQL的详细带练
  • 【MyBatis-Plus】 学习记录 常用功能及代码生成器使用
  • HalconDotNet实现OCR详解
  • 手搓一个Agent#Datawhale 组队学习Task3
  • 基于SpringBoot+Vue+MySQL的在线酷听音乐系统
  • 大数据实时数仓Hologres(一):Hologres 简单介绍
  • 【鸿蒙HarmonyOS NEXT】数据存储之分布式键值数据库
  • 基于springboot+小程序的儿童预防接种预约管理系统(疫苗1)(源码+sql脚本+视频导入教程+文档)
  • 计算物理精解【8】-计算原理精解【5】
  • 【Linux】 tcp | 解除服务器对tcp连接的限制 | 物联网项目配置
  • 如何隐藏Windows10「安全删除硬件」里的USB无线网卡