D-Nerf:用于动态场景表示的神经辐射场

Pumarola A, Corona E, Pons-Moll G, et al. D-nerf: Neural radiance fields for dynamic scenes[C]//Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2021: 10318-10327.

D-Nerf 较 NeRF 的改进 1 就是能够建模移动或变形的物体,包括铰接运动以及人类的复杂姿势。通过在输入中增加时间变量 t t t,可以预测某空间点在该时刻的位移,再结合 NeRF 的标准网络就能够建模动态场景。

在这里插入图片描述

目录

  • 一. 研究思路
    • 1. 场景表示
    • 2. 新视图渲染
  • 二. 动态神经辐射场
    • 1. 标准网络
    • 2. 变形网络
  • 三. 新视图渲染
  • 四. 实验结果
    • 1. 实验细节
    • 2. 数据集
    • 3. 实验效果
    • 4. 对比实验
    • 5. 副产品
  • 五. 总结
  • 六. 复现

一. 研究思路

  • 神经渲染 (neural rendering) 用于视图合成已经取得了重大成果,以 NeRF 及其变体为代表尤为突出。
  • 但目前的 NeRF 方法都是基于静态场景的假设,无法建模移动或变形的物体。
  • 文章放宽了 NeRF 的静态场景假设,提出了一种端到端的 NeRF 变体,用于建模静态、移动或变形物体组成的动态场景,称为 D-Nerf。

    端到端 (end-to-end):直接从输入数据到最终输出进行训练,而不需要手动设计中间步骤、设计特征提取或者增加额外组件。

和现有的 4D 视图合成技术不同,D-Nerf 只需要一台摄像机,不需要显式的三维重建,并且还可以进行端到端的训练。

文中全面评估了 D-NeRF 在各种场景下的表现,从铰接运动到人类的复杂姿势。通过将场景学习分解为标准场景和场景流以及控制时间变量,D-NeRF 能够渲染高质量的图像。

D-NeRF 还有一个副产品,就是能够产生完整的三维网格,捕捉时变几何。

1. 场景表示

在 NeRF 的场景表示函数的五维输入 ( x , y , z , θ , ϕ ) (x, y, z, θ, ϕ) (x,y,z,θ,ϕ) 的基础上,增加时间变量 t t t。但仅仅使用 ( x , y , z , θ , ϕ , t ) → ( c , σ ) (x, y, z, θ, ϕ, t) \rightarrow (\bold{c}, σ) (x,y,z,θ,ϕ,t)(c,σ) 并不能得到满意的结果,因为没有充分利用时间冗余信息。

时间冗余 (temporal redundancy):当处理连续时间中的动态场景时,通常会有许多相似的或几乎相同的场景信息在相邻的时间步骤中出现。这种情况下,将每个时间步骤都视为独立的输入会导致低效的学习和生成结果。

因此将场景的学习过程分为两个模块:

  • 空间映射: ( x , y , z , t ) → ( Δ x , Δ y , Δ z ) (x, y, z, t) \rightarrow (\Delta x, \Delta y, \Delta z) (x,y,z,t)(Δx,Δy,Δz),即变形场;
  • 回归预测: ( x + Δ x , y + Δ y , z + Δ z , θ , ϕ ) → ( c , σ ) (x+\Delta x, y+\Delta y, z+\Delta z, θ, ϕ) \rightarrow (\bold c, \sigma) (x+Δx,y+Δy,z+Δz,θ,ϕ)(c,σ),即原始 NeRF;

这两个模块都使用没有卷积层的深度全连接网络(即多层感知机)来学习得到。

2. 新视图渲染

学习得到 D-Nerf 的场景表示后,可以使用 ( θ , φ , t ) (θ, φ, t) (θ,φ,t) 控制新视图的渲染了。
在这里插入图片描述

文中还提出以下假设:

  • 场景中的每个点可以变换位置,但不能凭空出现或消失;

二. 动态神经辐射场

D-Nerf 的核心就是建立映射 M : ( x , d , t ) → ( c , σ ) \mathcal{M}: (\bold x, \bold d, t) \rightarrow (\bold{c}, σ) M:(x,d,t)(c,σ)。将其分解为 Ψ x \Psi_x Ψx Ψ t \Psi_t Ψt 两个映射: Ψ x \Psi_x Ψx 表示 NeRF 的 标准配置 (canonical configuration) Ψ t \Psi_t Ψt 表示 t t t 时刻的变形场景到标准 NeRF 的 位移 (displacement)。于是,不同时刻的场景间不再独立,而是通过一个标准配置连接起来。
在这里插入图片描述

1. 标准网络

标准网络 (Canonical Network) 就是原始的 NeRF:
Ψ x ( x , d ) ↦ ( c , σ ) \Psi_x(\bold{x}, \bold{d}) \mapsto (\bold{c}, \sigma) Ψx(x,d)(c,σ)

2. 变形网络

变形网络 (Deformation Network) 用于表示 t t t 时刻的真实场景到标准网络的位移:
Ψ t ( x , t ) = { Δ x ,  if  t ≠ 0 0 ,  if  t = 0 \Psi_t(\mathbf{x}, t)= \begin{cases} \Delta \mathbf{x}, & \text { if } t \neq 0 \\ 0, & \text { if } t=0 \end{cases} Ψt(x,t)={Δx,0, if t=0 if t=0

和 NeRF 中一样,直接使用多层感知机处理输入在生成视图时表现较差。因此标准网络和变形网络的多层感知机都使用 γ ( p ) \gamma(p) γ(p) 进行位置编码。

三. 新视图渲染

同 NeRF,从指定视角 o \bold{o} o 发出的方向为 d \bold{d} d 的光线,在 h h h 时刻能够到达的空间点为:
x ( h ) = o + h d \bold{x}(h)=\bold{o}+h \bold{d} x(h)=o+hd
t t t 时刻观察到像素点 p p p 的颜色为:
C ( p , t ) = ∫ h n h f T ( h , t ) σ ( p ( h , t ) ) c ( p ( h , t ) , d ) d h C(p, t)=\int_{h_n}^{h_f} \mathcal{T}(h, t) \sigma(\mathbf{p}(h, t)) \mathbf{c}(\mathbf{p}(h, t), \mathbf{d}) d h C(p,t)=hnhfT(h,t)σ(p(h,t))c(p(h,t),d)dh
其中:
p ( h , t ) = x ( h ) + Ψ t ( x ( h ) , t ) [ c ( p ( h , t ) , d ) , σ ( p ( h , t ) ) ] = Ψ x ( p ( h , t ) , d ) T ( h , t ) = exp ⁡ ( − ∫ h n h σ ( p ( s , t ) ) d s ) \mathbf{p}(h, t)=\mathbf{x}(h)+\Psi_t(\mathbf{x}(h), t) \\ [\mathbf{c}(\mathbf{p}(h, t), \mathbf{d}), \sigma(\mathbf{p}(h, t))]=\Psi_x(\mathbf{p}(h, t), \mathbf{d})\\ \mathcal{T}(h, t)=\exp \left(-\int_{h_n}^h \sigma(\mathbf{p}(s, t)) d s\right) p(h,t)=x(h)+Ψt(x(h),t)[c(p(h,t),d),σ(p(h,t))]=Ψx(p(h,t),d)T(h,t)=exp(hnhσ(p(s,t))ds)

分层采样后使用离散积分方法进行累加:
C ′ ( p , t ) = ∑ n = 1 N T ′ ( h n , t ) α ( h n , t , δ n ) c ( p ( h n , t ) , d ) C^{\prime}(p, t)=\sum_{n=1}^N \mathcal{T}^{\prime}\left(h_n, t\right) \alpha\left(h_n, t, \delta_n\right) \mathbf{c}\left(\mathbf{p}\left(h_n, t\right), \mathbf{d}\right) C(p,t)=n=1NT(hn,t)α(hn,t,δn)c(p(hn,t),d)
其中:
α ( h , t , δ ) = 1 − exp ⁡ ( − σ ( p ( h , t ) ) δ ) T ′ ( h n , t ) = exp ⁡ ( − ∑ m = 1 n − 1 σ ( p ( h m , t ) ) δ m ) δ n = h n + 1 − h n \alpha(h, t, \delta)=1-\exp (-\sigma(\mathbf{p}(h, t)) \delta)\\ \mathcal{T}^{\prime}\left(h_n, t\right)=\exp \left(-\sum_{m=1}^{n-1} \sigma\left(\mathbf{p}\left(h_m, t\right)\right) \delta_m\right)\\ \delta_n=h_{n+1}-h_n α(h,t,δ)=1exp(σ(p(h,t))δ)T(hn,t)=exp(m=1n1σ(p(hm,t))δm)δn=hn+1hn

四. 实验结果

1. 实验细节

同 NeRF,训练过程中使用小批量随机梯度下降,损失函数为真实像素和生成像素的均方误差:
L = 1 N s ∑ i = 1 N s ∥ C ^ ( p , t ) − C ′ ( p , t ) ∥ 2 2 \mathcal{L}=\frac{1}{N_s} \sum_{i=1}^{N_s}\left\|\hat{C}(p, t)-C^{\prime}(p, t)\right\|_2^2 L=Ns1i=1Ns C^(p,t)C(p,t) 22

2. 数据集

  • Hell Warrior:
  • Mutant:
  • Hook:
  • Bouncing Balls:
  • Lego:
  • T-Rex:
  • Stand Up:
  • Jumping Jacks:

3. 实验效果

在这里插入图片描述
如图所示,第 1 行分别展示了 Mutant 和 Stand Up 数据集下的标准网络(即 t = 0 t = 0 t=0)的新视图生成,从左到右分别是:渲染的 RGB 图像、三维网格表示的体积密度、深度图表示的体积密度、变形场表示的位移。第 2 ~ 4 行分别表示了时间累计下(即 t = 0.5 t = 0.5 t=0.5 t = 1 t = 1 t=1)的视图渲染情况。

在这里插入图片描述
文章还通过实验回答了 D-NeRF 如何建模阴影的效果 2,即模型如何编码同一个点的外观变化。如图绘制了在特定时刻的标准网络和真实场景之间的对应点对,D-NeRF 能够通过扭曲标准网络来合成阴影效果。

4. 对比实验

在这里插入图片描述

5. 副产品

五. 总结

D-NeRF 最大的创新点是可以建模移动或变形物体组成的动态场景。

D-NeRF 的缺点主要有两个:相机观测位置需要人工标注(同 NeRF);时间变量带来的变形导致模型无法收敛。

六. 复现


  1. 论文笔记:D-NeRF:Neural Radiance Fields for Dynamic Scenes ↩︎

  2. 论文随记|D-NeRF: Neural Radiance Fields for Dynamic Scenes
    ↩︎

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

分享个包含各省、市、区的编码数据的在线静态资源脚本

在翻《SpringBootVue3》——十三尼克陈作者的大型前后端分离项目实战里面&#xff0c;在看到地址管理的部分时&#xff0c;发现了该作者记录有一个静态的地址资源脚本 这里做个记录&#xff0c;打点 一、引入js <script src"https://s.yezgea02.com/1641120061385/td…

python opencv之图像分割、计算面积

以下代码是一个基于K-means聚类算法进行图像分割的实现。通过读取一个彩色图像&#xff0c;将其转化为二维数组形式。然后使用K-means算法对像素点进行聚类&#xff0c;聚类个数为7。根据聚类后的标签值对像素点进行着色&#xff0c;并创建掩膜图像。接着使用形态学开运算和闭运…

C语言编写图形化界面-创建按钮-为其指定样式

文章目录 前置章节指定窗口样式给按钮加边框扁平化按钮复选框样式按钮自动复选框 单选按钮三态按钮自动三态按钮 默认按钮样式&#xff08;对话框Enter键&#xff09; 设置按钮位置和大小封装函数 前置章节 开始之前&#xff0c;需要学习以下章节&#xff1a; 创建窗口 窗口过…

Jupyter Notebook还有魔术命令?太好使了

在Jupyter Notebooks中&#xff0c;Magic commands&#xff08;以下简称魔术命令&#xff09;是一组便捷的功能&#xff0c;旨在解决数据分析中的一些常见问题&#xff0c;可以使用%lsmagic 命令查看所有可用的魔术命令 插播&#xff0c;更多文字总结指南实用工具科技前沿动态…

【鸿蒙软件开发】Stage模型开发概述应用/组件级配置

文章目录 前言一、基本概念1.1 UIAbility 组件1.2 ExtensionAbility 组件1.3 Context1.4 AbilityStage1.5 Stage模型开发流程应用组件开发了解进程模型了解线程模型应用配置文件 二、Stage模型应用/组件级配置2.1 为什么需要这个操作2.2 应用包名配置2.3 应用图标和标签配置2.4…

[NSSCTF 2nd] web刷题记录

文章目录 php签到MyBox非预期解预期解 php签到 源代码 <?phpfunction waf($filename){$black_list array("ph", "htaccess", "ini");$ext pathinfo($filename, PATHINFO_EXTENSION);foreach ($black_list as $value) {if (stristr($ext, …

第三章 SysML入门|系统建模语言SysML实用指南学习

仅供个人学习记录 UML与SysML的联系 可以稍微参考UML与SysML的联系 UML&#xff08;统一建模语言&#xff09;和SysML&#xff08;系统建模语言&#xff09;是两种与建模相关的语言&#xff0c;它们之间存在联系和区别。 SysML的图分类如下图所示。 SysML 图概述 这里只…

施耐德Lexium23A运行JOG停止时无减速过程解决方案

在现场调试时发现&#xff0c;如果Lexium23A工作在Pr模式下&#xff0c;无论是通过CANopen总线控制软件DI接通&#xff08;相应DI点设置为JOG运行&#xff09;还是实际的物理点接通&#xff0c;在JOG停止时&#xff0c;伺服电机会瞬间停止&#xff0c;造成机械冲击&#xff0c;…

C语言char的取值范围以及溢出情况

char 的取值范围 有符号&#xff1a; 1111 1111 ~ 1000 0000 — 0000 0000 ~ 0111 1111 -127 ~ -0 0 ~ 127 -128 ~ 127&#xff08;因为不需要两个 0 所以给负值增加了一位&#xff09; char 的溢出情况

VScode 自定义主题各参数解析

参考链接&#xff1a; vscode自定义颜色时各个参数的作用(史上最全)vscode编辑器&#xff0c;自己喜欢的颜色 由于 VScode 搜索高亮是在是太不起眼了&#xff0c;根本看不到此时选中到哪个搜索匹配了&#xff0c;所以对此进行了配置&#xff0c;具体想增加更多可配置项可参考…

python随手小练8(南农作业题)

题目1: 输入3 门课程 a,b,c 的成绩,求 3 门成绩的总和平均值(整数,四舍五人)以及最高和最低值。如果3门课程考试成绩分别以权重 0.50.3 和0.2计人总评成绩(整数先求总和再四舍五入),则最终总评成绩是多少? 具体操作&#xff1a; a float(input("a:")) b float(in…

Python 算法高级篇:图的表示与存储优化

Python 算法高级篇&#xff1a;图的表示与存储优化 引言 1. 什么是图&#xff1f;2. 图的基本概念3. 图的表示方法3.1. 临接矩阵表示临接矩阵的优点&#xff1a;临接矩阵的缺点&#xff1a; 3.2. 邻接表表示邻接表的优点&#xff1a;邻接表的缺点&#xff1a; 4. 优化的存储方法…

[python 刷题] 974 Subarray Sums Divisible by K

[python 刷题] 974 Subarray Sums Divisible by K 题目如下&#xff1a; Given an integer array nums and an integer k, return the number of non-empty subarrays that have a sum divisible by k. A subarray is a contiguous part of an array. 依旧是 prefix sum 的变种…

Hadoop3.0大数据处理学习3(MapReduce原理分析、日志归集、序列化机制、Yarn资源调度器)

MapReduce原理分析 什么是MapReduce 前言&#xff1a;如果想知道一堆牌中有多少张红桃&#xff0c;直接的方式是一张张的检查&#xff0c;并数出有多少张红桃。 而MapReduce的方法是&#xff0c;给所有的节点分配这堆牌&#xff0c;让每个节点计算自己手中有几张是红桃&#…

IOC课程整理-20 Spring 应用上下文生命周期

0.目录 1. Spring 应用上下文启动准备阶段 2. BeanFactory 创建阶段 3. BeanFactory 准备阶段 4. BeanFactory 后置处理阶段 5. BeanFactory 注册 BeanPostProcessor 阶段 6. 初始化內建 Bean&#xff1a;MessageSource 7. 初始化內建 Bean&#xff1a;Spring 事件广播器…

【LeetCode每日一题合集】2023.10.23-2023.10.29(简单的一周)

文章目录 2678. 老人的数目&#xff08;简单遍历模拟&#xff09;1155. 掷骰子等于目标和的方法数&#xff08;动态规划&#xff09;2698. 求一个整数的惩罚数&#xff08;预处理dfs回溯&#xff09;2520. 统计能整除数字的位数&#xff08;简单模拟&#xff09;1465. 切割后面…

【面试经典150 | 栈】简化路径

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;字符串数组模拟栈 其他语言python3 写在最后 Tag 【栈】【字符串】 题目来源 71. 简化路径 题目解读 将 Unix 风格的绝对路径转化成更加简洁的规范路径。字符串中会出现 字母、数字、/、_、. 和 .. 这几种字符&#…

关于FTP的一些往事

公司每天都要从美国的服务器下载大量的语音文件。然后根据语音的内容完成相关的医疗报告。不同语音的实时性要求是不一样的&#xff0c;有些要求6小时内完成&#xff08;TAT6&#xff09; &#xff0c;有些则是12小时。中美之间的网速又特别慢&#xff0c;所以&#xff0c;如何…

shell脚本变量

目录 1.变量的定义 2.shell脚本中变量的定义方法 3.变量的转译 4.Linux中命令的别名设定 5.用户环境变量的更改 6.利用命令的执行结果设定变量 7.脚本函数 1.变量的定义 1&#xff09;定义本身 变量就是内存一片区域的地址 2)变量存在的意义 命令无法操作一直变化的目…

14. 机器学习 - KNN 贝叶斯

Hi&#xff0c;你好。我是茶桁。 咱们之前几节课的内容&#xff0c;从线性回归开始到最后讲到了数据集的处理。还有最后补充了SOFTMAX。 这些东西&#xff0c;都挺零碎的&#xff0c;但是又有着相互之间的关系&#xff0c;并且也都蛮重要的。并且是在学习机器学习过程当中比较…
最新文章