用神经辐射场在大场景中漫游

2023-10-27

目录

前言

介绍

背景

改进 NeRF 以编码大型场景

在训练数据中获得足够的观点

动态对象移除

应用

结论

参考


前言

最近一直在做NeRF相关工作,偶然看到台湾智慧实验室一篇文章(Hovering Around a Large Scene with Neural Radiance Field Taiwan AILabs),和我们设计方案比较相似,正好进行翻译,与大家共享。

视频一:用神经辐射场盘旋阿里山

https://youtu.be/CcnWuGi2Gh0

介绍

自 2020 年以来,神经辐射场 (NeRF) [1] 一直是计算机视觉领域的热门话题。通过使用神经网络对体积场景函数进行建模,NeRF 实现了新视图合成的最先进结果。

虽然与 NeRF 相关的方法在学术界很受欢迎,但它们尚未在产品上广泛实施以提供用户体验。本文旨在演示如何使用 Neural Radiance Field 为徘徊在大型景点周围的用户创造身临其境的体验。

背景

神经辐射场 [1] 是一种从现有图像预测新视图的前卫方法。传统的 3D 重建方法使用网格或网格来估计场景的 3D 表示,而 NeRF 将神经网络过度拟合到单个场景,并确定每个 3D 点从该场景中的新视点看起来如何。通过光线追踪和 L2 图像构建损失,该模型试图从具有已知相机姿势的场景的多个训练图像中预测场景中每个点的颜色和体积密度。

自 NeRF 发表以来,已有多项后续研究。通过渲染锥形截头体而不是射线,Mip-NeRF [2] 无需超级采样即可消除混叠。通过以不同于近景的方式对远景进行建模,Mip-NeRF 360 [3] 和 NeRF++ [4] 在“背景场景”中获得了更好的视觉效果。通过在局部场景中存储特征,Instant-NGP [5] 和 Point-NeRF [6] 允许模型对大场景进行编码并在训练期间快速收敛。通过组合多个神经辐射场,Block-NeRF [7] 允许模型编码更大的场景,例如旧金山的整个社区。

改进 NeRF 以编码大型场景

在神经辐射场中编码大型景点的第一步是选择适合我们用例的模型结构。尽管 NeRF 在小型 360 度场景上表现出色,但由于其简单的 MLP 编码方法,在 NeRF 中编码大型复杂场景并不可行。此外,Mip-NeRF 360 和 NeRF++ 不允许用户在场景周围悬停太远,因为远景的编码方式与近景不同。最后,虽然 Block-NeRF 能够很好地对大场景进行建模,但它也需要相当多的时间和计算能力来训练。另一方面,通过将可训练的局部特征存储在哈希表中,并以相同的方式处理场景的近处和远方部分,Instant-NeRF 可以创建一个大的神经辐射场,用户可以在其中自由悬停。因此,在这个项目中,我们将利用 Instant-NGP 在场景中存储局部特征的方法。此外,我们利用 COLMAP [8] 来计算输入图像的相机姿态。然而,要编码一个景点站点并让用户徘徊,我们仍然需要在训练数据中获得足够的视点并删除动态对象。

在训练数据中获得足够的观点

视频 2:Instant-NeRF 在从看不见的角度推断颜色时效果不佳

https://youtu.be/gUkcSBVq-Wo

视频 3:我们的方法从多个角度提高了图像质量

https://youtu.be/_Q--G20K0W8

与传统的 3D 重建方法不同,神经辐射场允许物体从不同角度以不同颜色出现。然而,Instant-NeRF 在从看不见的角度推断颜色方面效果不佳(参见视频 2)。因此,要在 Instant-NeRF 中对场景进行编码,我们需要一种拍摄策略,使我们的模型能够从多个角度进行观察。

传统上,Instant-NeRF 假设所有训练图像都指向一个共同的焦点。然而,我们发现这种拍摄策略最适合编码对象,而不是大场景。在拍摄大型场景时,我们可能并不总是在图像之间有一个可见的共同焦点。此外,我们可能需要更灵活的技术来对大型复杂场景进行编码,因为它们通常包含更复杂的对象和遮挡区域。

为了获得足够多的不同角度,我们开发了一种新的拍摄透视输入图像的拍摄方法。为了详细说明,我们都围绕场景拍摄 360° 内部视频和不同高度的电影,以便模型有足够的信息来预测不同角度的颜色。然后我们以每秒 2 帧的速度对视频进行采样,以确保 COLMAP 获得足够的通用特征来计算相机姿势。

此外,我们的系统支持360°视频的输入。传统上,Instant-NeRF 和 COLMAP 仅支持透视输入数据。据我们所知,我们是第一个使用 360° 视频训练 Instant-NeRF 的公司。一般来说,人们不会考虑适合 Instant-NeRF 训练的前向行走 360° 视频,因为即使没有遮挡空间,它们也缺乏共同的焦点。然而,我们发现 360° 视频可以为大场景编码带来很好的结果,因为它满足两个条件:COLMAP 具有足够的通用特征来匹配帧,Instant-NeRF 具有用于插值颜色的各种训练数据对于空间中的每个点。在使用来自 Taiwan Traveler 的 360° 视频时,我们首先将采样的全景视图转换为透视图像。一种常见的方法是将球形 360° 图像投影到六面立方体贴图上。我们发现 COLMAP 可以准确估计立方体贴图图像的相机位姿。因此,我们可以将等距柱状图像转换为 Instant-NeRF 支持的格式并产生高质量的结果。此外,我们提供了在室外场景中转储垂直图像的选项,因为它们通常包含很少的场景信息,并且可能会因误导相机姿势而破坏模型。对于 360° 视频,我们发现使用更简单的拍摄技术可以获得更好的效果。

图 1:将 360° 等距柱状图像(左)转换为立方体贴图(右)。立方体贴图中的垂直图像(上下图像)通常包含较少的场景信息

图2:透视(左)和360°(右)拍摄方式,绿色金字塔为相机位置

动态对象移除

在对热门网站进行编码时,场景中很可能会有很多人或汽车在四处走动。移动对象对 Instant-NeRF 和 COLMAP 来说可能是一个挑战,因为它们都假设输入数据是静态的。

为了解决这个问题,我们利用预训练的图像分割模型 DeeplabV3 [9] 来掩盖流行的移动物体,例如人和汽车。根据我们之前的工作 [10],我们还可以获得摄影师的面具。然后,在训练 Instant-NeRF 期间提取用于计算相机姿势的特征和光线追踪时,我们忽略了那些被遮盖的对象。

图 3:使用 DeeplabV3 屏蔽流行的动态对象

应用

由于能够在拍摄视频后编辑摄像机路径,导演现在可以仅基于一组训练图像创建许多具有不同摄像机路径的新颖视频。我们集成了开源 WebGL 点云查看器 Potree[11] 和 Instant-NeRF 来开发一个允许创作者编辑所需相机运动的工作室。具体来说,在对整个旅游景点进行编码后,Potree 将 COLMAP 输出的稀疏点可视化,以便创作者可以分配相机路径并使用工作室制作身临其境的悬停视频。

https://youtu.be/ZrQiJOXWdDQ

https://youtu.be/EtnGwrjsHJ8

视频 6、7:在 Potree 中分配相机路径(上),然后渲染具有新奇视角的视频(下)

为了实现 Instant-NeRF 以获得实时的交互式体验,我们在具有高 GPU 内存的本地设备上部署了 Instant-NeRF。此外,我们可以通过结合人体姿态估计让用户身临其境地在场景中飞行。

结论

在这篇文章中,我们演示了如何在神经辐射场中对大型场景进行编码,并让用户随后编辑相机路径或以交互方式绕场飞行。我们通过开发一个管道来实现它,该管道可以将 360 度和透视视频转换为具有新颖路径的新视频。我们还提供了有关编码大场景的拍摄技术的指南,并解决了在现场实施神经辐射场时遇到的常见问题,例如路径分配和动态对象移除。

https://youtu.be/soZG65RNRXI

https://youtu.be/tj-_r8oxejM

https://youtu.be/saqYu1DhQbc

https://youtu.be/4B5Q-AfUmQE

视频8~11:用Instant-NeRF 盘旋台湾著名旅游景点。从上到下分别是高雄驳二艺术特区、香山游客中心、台北车站、日月潭

参考

  1. Ben Mildenhall and Pratul P. Srinivasan and Matthew Tancik and Jonathan T. Barron and Ravi Ramamoorthi and Ren Ng. (2020). NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis. ECCV 2020
  2. Jonathan T. Barron, Ben Mildenhall, Matthew Tancik, Peter Hedman, Ricardo Martin-Brualla, and Pratul P. Srinivasan. (2021). Mip-NeRF: A Multiscale Representation for Anti-Aliasing Neural Radiance Fields. CVPR 2021
  3. Jonathan T. Barron and Ben Mildenhall and Dor Verbin and Pratul P. Srinivasan and Peter Hedman (2022). Mip-NeRF 360: Unbounded Anti-Aliased Neural Radiance Fields. CVPR 2022
  4. Kai Zhang, Gernot Riegler, Noah Snavely, Vladlen Koltun (2021). NeRF ++: Analyzing and Improving Neural Radiance Fields. arXiv:2010.07492
  5. Thomas Muller, Alex Evans, Christoph Schied, and Alexander Keller (2022). Instant Neural Graphics Primitives with a Multiresolution Hash Encoding. ACM Trans. Graph. July 2022
  6. Qiangeng Xu, Zexiang Xu, Julien Philip, Sai Bi, Zhixin Shu, Kalyan Sunkavalli, Ulrich Neumann (2022). Point-NeRF: Point-based Neural Radiance Fields. CVPR 2022
  7. Matthew Tancik, Vincent Casser, Xinchen Yan, Sabeek Pradhan, Ben Mildenhall, Pratul P. Srinivasan, Jonathan T. Barron, Henrik Kretzschmar (2022). Block-NeRF: Scalable Large Scene Neural View Synthesis. CVPR 2022
  8. Schonberger, Johannes Lutz and Frahm, Jan-Michael. (2016) Structure-from-Motion Revisited. CVPR 2016
  9. Liang-Chieh Chen and Yukun Zhu and George Papandreou and Florian Schroff and Hartwig Adam. (2018) Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation. ECCV 2018
  10. Taiwan AI Labs. The Magic to Disappear Cameraman: Removing Object from 8K 360° Videos (2021)
  11. Potree, WebGL point cloud viewer for large datasets, at potree.org
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用神经辐射场在大场景中漫游 的相关文章

  • 无法加速像素修改的 BufferedImages

    很长一段时间 1 2个月 我一直在试图找到这个特定问题的答案 我无法让我的图像硬件加速 我一直在网上搜索 创建了自己的方法 用键盘敲击我的头 仍然感到疼痛 但没有成功 尽管我讨厌 Java SDK 以外的库 但我尝试了 LWJGL 和 JO
  • Python openAL 3D 声音

    我刚刚开始使用 python 正在制作音频操作程序 我正在尝试在我的 python 应用程序中使用 openAL 实现 3D 声音 但我只能让它工作 这是我的 3D 声音代码 from openal loaders import load
  • 网格三角剖分和简化 C++ 库 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个 C 库来三角测量和简化 3D 网格 我的 3D 网格可能很大 大约 300 万个顶点
  • xna 防止下坡或上太陡的山

    如何防止在高度图地形上过于陡峭的斜坡或上山 我有一个可以在地形上移动的 3D 相机 它现在可以在任何地方移动 甚至在大斜坡和太陡的山丘上 我该怎么办 如果你试图朝一个方向移动 你应该预测你最终会到达哪里 然后弄清楚是否slope http
  • 如何使用 OpenCV Viz 和 ARUCO 转换增强现实应用的 3D 模型

    我正在开发一个简单的基于标记的增强现实应用程序OpenCV 可视化 and ARUCO 我只想在标记上可视化 3D 对象 PLY 格式 我可以使用 ARUCO 毫无问题地运行标记检测和姿态估计 返回旋转和平移向量 我可以在 Viz 窗口中可
  • 如何旋转 3D 散点图

    下面的代码使用 scatterplot3d 函数来运行高度 重量和体积的 3D 散点图 其中点是 1 6 之间的类值 角度目前为 45 度 我知道我可以通过改变角度来倾斜绘图 我应该使用什么代码将绘图向左或向右旋转 以便我可以提供绘图的多个
  • WP7 XNA 显示 3D FBX 模型

    我只是初学者 很抱歉我的愚蠢问题 我的模型看起来像这样 http img265 imageshack us img265 8291 clipboard01ap jpg http img265 imageshack us img265 829
  • 如何在 JavaFX 中将 GUI 覆盖到 3D 场景上?

    我在 JavaFX 中有一个 3D 场景 需要在 3D 场景上覆盖 GUI 我尝试向场景添加按钮和文本 但它们始终作为 3D 对象出现在 3D 视图中 我环顾四周 没有找到该怎么做 唯一的解决方法是创建一个全新的窗口并将设置放在那里 但在这
  • 给定表面法线,找到 3D 平面的旋转

    所以我有一个由 2 个向量描述的 3D 平面 P 位于平面上的点N 平面的表面法线 我有一个非常大的扁平方形多边形 我想渲染它来代表这个平面 我可以轻松地将多边形平移到给定点 但随后我需要找到适当的旋转来应用以使表面法线实际上成为表面法线
  • Python 中的标量场可视化

    我需要在 Python 中可视化几个重叠的标量场 我发现mayavi图书馆做这种情节 问题是我不明白如何为标量字段自定义颜色图 我的想法是为每个字段设置一种颜色的阴影 我尝试采用一个例子 http docs enthought com ma
  • 基于 Q3DScatter 的自定义图表,QCustom3DItem 运行缓慢

    我想制作一个带条形的 3D 图表 条形颜色取决于其大小 两个都Qt 条形图和散点图类型 https doc qt io qt 5 qtdatavisualization overview html接近我正在寻找的东西 我最终创建了一个基于的
  • 如何在SceneKit中实现逼真的景深效果?

    我正在尝试渲染具有真实景深效果的帧 我已经尝试过景深属性camera节点 但它不会产生可用的结果 是否可以切换到景深效果的最大渲染质量 性能不是一个因素 我只需要渲染一帧 用户可以等待它 SceneKit 中逼真的景深效果 在SceneKi
  • Direct3D 中的矩阵多阶

    关于在 Direct3D 中乘法矩阵以获得结果 我收到了两个相互矛盾的答案 教程确实规定从左到右相乘 这很好 但这不是我想象的方式 这是一个例子 OpenGL 从上到下阅读 GLRotatef 90 0f GLTranslatef 20 0
  • 可点击的精灵标签?

    我一直在玩精灵文本标签 更具体地说是这个例子 http stemkoski github io Three js Sprite Text Labels html http stemkoski github io Three js Sprit
  • 一次性渲染阴影

    考虑到阴影投射的成本 我想知道对于动态定位的静态对象 例如 程序城市 是否有一个功能或可能 实验性的方法可以在 Three js 中仅渲染一次阴影贴图 甚至在 webgl 中 因此 结果可以在静态对象的下一帧中免费使用 仅当物体移动时才会进
  • 光线追踪三角形

    我正在用java编写一个光线追踪器 并且我能够追踪球体 但我相信我追踪三角形的方式有问题 据我了解 这是基本算法 首先确定射线是否与plane三角形已打开 剪裁所有点 使它们与三角形位于同一平面上 因此xy以平面为例 根据沿着新平面向任意方
  • 使用 ThreeJS 获取球体纹理上的点击位置

    目前 我有一个带有纹理的球体 它绕 y 轴旋转 我还有在 3D 空间中单击的位置 以及球体上的旋转位置 我认为 目标 获取纹理上的位置 例如 我想获取我点击的图像的哪个方块 参见示例球体和下图 在实践中 我不会使用此图像 但我觉得这将是一个
  • 判断一个点是否在多面体内部

    我试图确定某个特定点是否位于多面体内部 在我当前的实现中 我正在研究的方法采用我们正在寻找多面体面的数组 在本例中为三角形 但稍后可能是其他多边形 的点 我一直在尝试根据这里找到的信息进行工作 http softsurfer com Arc
  • 将大块位图转换为 3 维位图

    Problem 我需要这个大量的数据作为输入 对于基于C的arduino 这是上面示例中所需格式的大量数据 const byte bitmap 8 8 0xFF 0x81 0x81 0x81 0x81 0x81 0x81 0xFF 0x81
  • 改变for循环的顺序?

    我遇到一种情况 我需要根据用户输入以不同的顺序循环遍历 xyz 坐标 所以我是 3D 空间中的一个区域 然后是一组像这样的 for 循环 for int x 0 x lt build getWidth x for int y 0 y lt

随机推荐

  • mac M1配置selenium的chromedriver

    1 确认浏览器版本 2 下载对应的chromedriver M1版是mac arm64版 3 将驱动放在 H O M E b i n
  • js的变量数据类型

    1 什么是变量 1 变量 变化的量 在JS程序中 用于储存数据的容器 2 如何在JS程序中使用变量 1 声明变量 告诉浏览器 我要使用这个变量 var变量名称 声明变量的语法 2 初始变量 给变量赋值 变量名称 值 赋值 将值储存到变量中
  • 编程实现时钟表盘刻度

    首先看个时钟刻度显示效果 一个表盘有60个刻度 每5个刻度就有一个刻度尺寸偏长 画该表盘步骤如下 画外围圈 这个就是画一个圆 假设其圆心坐标为 x 0 y
  • 使用SimHash算法实现千万级文本数据去重插入(python版代码)

    前言 最近在搞大量数据插入MySQL的时候悲催的发现速度越来越慢 因为我的数据来多个源 使用流式更新 而且产品要求在这个表里面不能有数据重复 划重点 衡量数据是否重复的字段是文本内容 字段类型是text 那么问题来了 如何在千万级数据量实现
  • STM32PWM频率计算

    PWM计算 PWM频率 定时器频率 分频系数 x 自动重装载值 PWM占空比 CCRx 自动重装载值 period CLOCK Freq 1 pulse period 1 Dutycycle 100 注意 如果需要高精度 可以使用32位定时
  • keil5破解(备忘,有需要的可以下载)

    管理员身份运行 配置license 运行Keygen 网盘链接 https pan baidu com s 15sw4R0ePrICQoeRx2ELneA pwd 04eq 提取码 04eq
  • odoo查看用户有没有某个权限

    查看用户在不在某个权限组 self env user has group 模块名 权限组id 或者 self user has groups 模块名 权限组id 示例
  • Mybatis 面试题,你想知道的都在这里了!

    1 和 的区别是什么 注 这道题是面试官面试我同事的 答 是 P r o p e r t
  • 对比学习系列论文COST(二):

    快速预览 0 ABSTRACT 0 1逐句翻译 0 2总结 1 INTRODUCTION 1 1 逐句翻译 第一段 介绍序列流预测的事情 现在都用强有力的非线性层来进行学习并取得好效果 第二段 但是这些逐渐复杂的网络 加剧了过拟合等问题 因
  • QSharedMemory

    QSharedMemory 类提供了对一段共享内存的访问 既提供了被多进程和多线程共享的一段内存的访问 也为单线程或单进程锁定内存以实现互斥访问提供了方法 这个类在不同操作系统的使用是有差异的 这里只说下载windows下的 在window
  • ant-design-vue的兼容问题2

    问题 ant design vue不兼容ie浏览器 要求 ie兼容 gt 9 环境 vue cli 4 5 4 ant design vue 1 6 4 之前写了一篇博文解决ant design vue的兼容 由于 vue cli搭建项目升
  • S7 200 smart高速计数功能应用

    高速计数功能应用 https ke qq com course package 26452 单相 只有一个输入 I0 0 进高速计数端 用于频率比较高的场景 双相 有两个输入 I0 0 I0 1 一个是增计数 一个是减计数 A B相 适用于
  • pytorch和GPU有关操作(CUDA)

    使用GPU前 我们首先需要查看GPU信息 这可以通过如下命令实现 watch nvidia smi 输出如下 可以看到总共有两块3090显卡 一 设定计算设备 默认情况下Pytorch将数据创建在内存 然后利用CPU进行计算 所以我们我们需
  • PL/SQL中执行按钮变为灰色后如何恢复【已解决】

    PL SQL中执行按钮变为灰色后如何恢复 已解决 最近向数据库中导数据 结果PL SQL卡住半天没有反应 我就杀死了PL SQL的进程 再一次打开数据时 发现执行按钮被置灰了 没有办法执行sql 解决方法 随便写一行sql语句 按下键盘F8
  • Vue3 模糊搜索

    1
  • 爬虫基础入门(4)简单模拟登录

    本节我们介绍使用爬虫进行美食杰网站的模拟登录 首先我们找到美食杰的登录界面的url以及headers cookie from urllib import request 首先我们导入request库和cookie库 from http co
  • Bubble冒泡排序

    原谅我偷懒 是真的没有什么写的内容了啊 我都好怀疑他们那些大佬是怎么那么多的文章和技术分享的 我要自闭了 时间复杂度O n2 C 的内置排序函数使用的并非冒泡而是快排 Git地址 public override void SortOrder
  • chatGPT写小游戏1分钟一个,快到起飞

    猜数字游戏的规则是电脑随机生成一个1到100之间的整数 玩家需要猜测这个数字是多少 电脑会提示玩家猜的数字是偏大还是偏小 直到猜中为止 下面是代码示例 import random num random randint 1 100 guess
  • argparse模块的用法

    argparse模块的用法 示例 创建解析器 添加参数 解析参数 ArgumentParser对象 编程 用法 说明 parents formatter class 版本3 5中的新功能 版本 3 2中的新功能 源代码 Lib argpar
  • 用神经辐射场在大场景中漫游

    目录 前言 介绍 背景 改进 NeRF 以编码大型场景 在训练数据中获得足够的观点 动态对象移除 应用 结论 参考 前言 最近一直在做NeRF相关工作 偶然看到台湾智慧实验室一篇文章 Hovering Around a Large Scen