论文阅读《Block-NeRF: Scalable Large Scene Neural View Synthesis》

news2024/11/29 11:47:53

论文地址:https://arxiv.org/pdf/2202.05263.pdf
复现源码:https://github.com/dvlab-research/BlockNeRFPytorch


概述

  Block-NeRF是一种能够表示大规模环境的神经辐射场(Neural Radiance Fields)的变体,将 NeRF 扩展到渲染跨越多个街区的城市规模场景。该方法将场景分解为单独训练的 NeRF,使渲染时间与场景大小解耦,并允许对环境进行每个街区的更新。Block-NeRF为每个单独的 NeRF 添加外观嵌入(appearance embeddings)、学习姿态优化(learned pose refinement)和可控曝光(controllable exposure),并引入了一种在相邻 NeRF 之间对齐外观(aligning appearance)方法来融合不同场景信息。
在这里插入图片描述


模型架构

在这里插入图片描述
  将场景分为多组Block-NeRF,每个Block可以并行独立训练,并在推理过程中进行融合。使得可以对单独的block更新而无需对整个场景进行重新训练。在此过程中,动态选择相关的 Block-NeRF 进行渲染,在跨越场景时以平滑的方式合成场景。为了实现这种平滑的合成方式,优化了Appearance代码来适应照明条件,并使用每个Block-NeRF到新视图的距离来计算插值权值。

Block 大小与位置

  在每个十字路口放置一个Block-NeRF,覆盖十字路口本身与任意连接街道的75%的场景,使得任何两个相邻的街区之间有50%的场景重叠。

独立Block-NeRF的训练过程

在这里插入图片描述

外观编码:使用 MLP 来学习不同外观变化的条件,如不同的天气与光照条件。还可以通过控制外观编码(appearance embedding)来对不同环境进行线性插值,得到不同条件下的环境信息(如多云和晴朗的天空,或者白天与晚上),如图3与图4所示:
在这里插入图片描述
位姿优化:Learned Pose Refinement是通过在每个Block-NeRF中训练一个额外的神经网络来实现的,这个神经网络可以根据输入的图像和初始的相机姿态,输出一个修正后的相机姿态。使得Block-NeRF就可以利用更准确的相机姿态来生成更高质量的新视角图像。
输入图像曝光:将相机曝光信息输入到模型的外观预测部分,使得NeRF补偿视觉上的差异,使用 4 层的 s i n sin sin 来对曝光信息进行编码。
在这里插入图片描述
瞬态(移动)物体:Transient Objects是指在训练图像中出现的临时物体,如行人、车辆等,它们会影响Block-NeRF学习场景的静态结构,因为它们会导致视角不一致。通过以下步骤来消除场景中的瞬态物体的影响:

  • 首先,对于每个训练图像,使用一个分割算法来检测并去除Transient Objects,得到一个纯净的背景图像。
  • 然后,对于每个Block-NeRF,使用去除了Transient Objects的背景图像来训练神经网络,从而学习场景的静态结构。
  • 最后,在渲染新视角图像时,使用原始的训练图像(包含Transient Objects)作为输入,并将分割算法得到的掩码作为额外的输入送入Block-NeRF中,从而在输出图像中保留或去除Transient Objects。
    这样做的好处是,Block-NeRF可以灵活地处理不同场景下的Transient Objects,并且可以在渲染时根据用户需求选择是否显示它们。
    场景可见性预测:Visibility Prediction的具体实现是这样的:
  • 首先,对于每个Block-NeRF,构建一个小的多层感知机(MLP) f v f_v fv ,以位置信息 x x x 和方向信息 d d d 作为输入,用来学习样本点可见性的近似值。
  • 然后,对于每个Block-NeRF,使用其训练图像中的采样点作为输入,计算其可见性近似值,并将其与由密度函数得到的透射率 T i T_i Ti作为监督信号进行训练。
  • 最后,在合并多个Block-NeRF时,使用 f v f_v fv 来判断一个给定的场景区域是否对该Block-NeRF可见,并根据可见性近似值来加权不同Block-NeRF的输出颜色。
    Visibility Prediction可以有效地解决不同Block-NeRF之间的遮挡问题,并且可以提高渲染质量和效率。

Block_Nerf合并

Block-NeRF选择:一个大型场景由多个 Block 组成,Block-NeRF使用两种策略进行Block选择(1)只考虑在目标视点设定半径范围内的Block-NeRF。(2)计算每个候选Block的相关可见性,如果平均可见性小于阈值,则舍弃该Block。如图2所示,可见性可以由一个独立的模块计算,且不需要在目标图像的分辨率下进行渲染。通过筛选,通常剩余1-3个Block-NeRF有待合并。
Block-NeRF合成:使用相机原点 c c c 与每个Block-NeRF 的中心 x i x_i xi 之间的逆距离加权系数对候选 Block 插值( w i ∝ d i s t a n c e ( c , x i ) − p w_i\propto distance(c, x_i)^{-p} widistance(c,xi)p, p p p 影响Block之间的混合速率)。插值在二维图像中进行,在不同Block-NeRF之间产生平滑的过渡。
场景外观匹配
在这里插入图片描述
Appearance Matching是为了在不同block之间消除外观上的不一致性,使得渲染结果更加自然和真实。具体步骤如下:

  • 对于每个block,为其分配一个外观编码(appearance code),这是一个随机初始化的向量,用于控制block的颜色和光照。
  • 对于每对相邻的block,选择一个三维区域作为匹配位置(matching location),这个区域要求在两个block中都有较高的可见度。
  • 对于每个匹配位置,冻结两个block对应的NeRF网络的权重,只优化其中一个block的外观编码,使得两个block在该位置渲染出来的颜色值之间的L2损失最小。
  • 重复上述步骤,直到所有相邻的block都进行了外观匹配。
    以此实现大场景中不同block之间外观上的对齐,如图6所示。

实验结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

渗透测试——信息收集(详细)

信息收集:前言:信息收集是渗透测试除了授权之外的第一步,也是关键的一步,尽量多的收集目标的信息会给后续的渗透事半功倍。收集信息的思路有很多,例如:页面信息收集、域名信息收集、敏感信息收集、子域名收…

Redis学习【12】之Redis 缓存

文章目录前言一 Jedis 简介二 使用 Jedis2.1 测试代码2.2 使用 JedisPool2.3 使用 JedisPooled2.4 连接 Sentinel 高可用集群2.5 连接分布式系统2.6 操作事务三 Spring Boot整合Redis3.1 创建工程3.2 定义 pom 文件3.3 完整代码3.4 总结四 高并发问题4.1 缓存穿透4.2 缓存击穿4…

全方位解读智能中控屏发展趋势!亚马逊Alexa语音+Matter能力成必备

随着智能家居行业逐步从碎片化的智能单品阶段,迈向体验更完整的全屋互联阶段,智能中控屏作为智能家居最佳的入口之一,在年轻人青睐全屋智能装修的风潮下,市场潜力彻底被引爆。 一、为什么是智能中控屏? 在智能音箱增…

诗一样的代码命名规范

有文化:落霞与孤鹜齐飞,秋水共长天一色;没文化:太阳落山的时候,看见一只鸟在水上飞;日常编码中,代码的命名是个大的学问。能快速的看懂开源软件的代码结构和意图,也是一项必备的能力…

Docker入门建议收藏 第二部分

二、Docker 容器技术与虚拟机的区别 Docker 到底是个什么东西呢?我们在理解 Docker 之前,首先得先区分清楚两个概念,容器和虚拟机。 虚拟机 虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的、运行在…

单链表的头插,尾插,头删,尾删等操作

前言顺序表要求是具有连续的物理空间,并且数据的话是在这些空间当中是连续的存储。但这样会带来很多问题,比如说在头部或者说中间插入的话,效率不是很高;并且申请空间可能需要扩容,并且越往后一般来说都是异地扩容&…

优思学院|精益生产中的“单件流”真的能够做到吗?

精益生产中提到的“一个流”(One Piece Flow)是一种生产方式,它的核心理念是通过合理配置作业场地、人员和设备,使产品从投入到成品产出的整个制造加工过程中始终处于不停滞、不堆积、不超越,按节拍一个一个地流动。 …

Idea+maven+spring-cloud项目搭建系列--11 整合dubbo

前言: 微服务之间通信框架dubbo,使用netty (NIO 模型)完成RPC 接口调用; 1 dubbo 介绍: Apache Dubbo 是一款 RPC 服务开发框架,用于解决微服务架构下的服务治理与通信问题,官方提…

渲染十万条数据就把你难住了?不存在的!

虚拟列表的使用场景如果我想要在网页中放大量的列表项,纯渲染的话,对于浏览器性能将会是个极大的挑战,会造成滚动卡顿,整体体验非常不好,主要有以下问题:页面等待时间极长,用户体验差CPU计算能力…

pyqt5(二) 标签(QLabel)组件的属性说明及示例

使用语法 widget QLable() widget.function(parameter) widget:实例化QLablefunction:QLable里的函数parameter:函数需要用到的参数 参数说明: 参数说明参数解释 setText() 配置文本内容 setPixmap() 添加图片 setFixedSize(…

蓝桥杯--等差素数列

等差素数列 技巧 这里的等差数列–首项需要枚举列出 公差也需要枚举列出 在公差为1开始&#xff0c;对n-1也进行枚举 //重要代码段 判断一个数是否为素数 int check(int n) { for(int i2;i<n;i){if(n%i0){return 0 } return 1; } }这道题不是很简单 本题为填空题&#xff0…

Webstorm使用、nginx启动、FinalShell使用

文章目录 主题设置FinalShellFinalShell nginx 启动历史命令Nginx页面发布配置Webstorm的一些常用快捷键代码生成字体大小修改Webstorm - gitCode 代码拉取webstorm 汉化webstorm导致CPU占用率高方法一 【忽略node_modules】方法二 【设置 - 代码编辑 - 快速预览文档 - 关闭】主…

Linux 练习七 (IPC 共享内存)

文章目录System V 共享内存机制&#xff1a;shmget shmat shmdt shmctl案例一&#xff1a;有亲缘关系的进程通信案例二&#xff1a;非亲缘关系的进程通信内存写端write1.c内存读端read1.c案例三&#xff1a;不同程序之间的进程通信程序一&#xff0c;写者shmwr.c程序二&#xf…

2022-06-14至2022-08-11 关于复现MKP算法的总结与反思

Prerequisite 自2022年6月14日至2022年8月11日的时间内&#xff0c;我致力于完成A Hybrid Approach for the 0–1 Multidimensional Knapsack problem 论文的复现工作&#xff0c;此次是我第一次进行组合优化方向的学习工作&#xff0c;下面介绍该工作内容发展过程以及该工作结…

JavaScript Array 数组对象实例集合

文章目录JavaScript Array 数组对象实例集合创建数组合并两个数组 - concat()合并三个数组 - concat()用数组的元素组成字符串 - join()删除数组的最后一个元素 - pop()数组的末尾添加新的元素 - push()反转一个数组中的元素的顺序 - reverse()删除数组的第一个元素 - shift()从…

数字化时代,企业的商业模式建设

随着新一代信息化、数字化技术的应用&#xff0c;众多领域通过科技革命和产业革命实现了深度化的数字改造&#xff0c;进入到以数据为核心驱动力的&#xff0c;全新的数据处理时代&#xff0c;并通过业务系统、商业智能BI等数字化技术和应用实现了数据价值&#xff0c;从数字经…

Vue项目打包部署总结配合nginx部署

你可能还想了解&#xff1a;https://blog.csdn.net/weixin_52901235/article/details/129437990?spm1001.2014.3001.5502使用Vue做前后端分离项目时&#xff0c;通常前端是单独部署&#xff0c;用户访问的也是前端项目地址&#xff0c;因此前端开发人员很有必要熟悉一下项目部…

C#要点技术(二) - Dictionary 底层源码剖析

Dictionary 底层代码我们知道 Dictionary 字典型数据结构&#xff0c;是以关键字Key 和 值Value 进行一一映射的。Key的类型并没有做任何的限制&#xff0c;可以是整数&#xff0c;也可以是的字符串&#xff0c;甚至可以是实例对象。关键字Key是如何映射到内存的呢&#xff1f;…

【python】如何用python写一个下拉选择框和页签?

文章目录前言ttk模块下拉选择框combobox下拉选择框2页签Notebook前言 python学习之路任重而道远&#xff0c;要想学完说容易也容易&#xff0c;说难也难。 很多人说python最好学了&#xff0c;但扪心自问&#xff0c;你会用python做什么了&#xff1f; 刚开始在大学学习c语言&…

【玩转c++】stack和queue的介绍和模拟实现

本期主题&#xff1a;list的讲解和模拟实现博客主页&#xff1a; 小峰同学分享小编的在Linux中学习到的知识和遇到的问题小编的能力有限&#xff0c;出现错误希望大家不吝赐stack的介绍和使用1.1.stack的介绍1. stack是一种容器适配器&#xff0c;专门用在具有后进先出操作的上…