经典文献阅读之--NoPe-NeRF(优化无位姿先验的神经辐射场)
0. 简介
在没有预先计算相机姿态的情况下训练神经辐射场(NeRF)是具有挑战性的。最近在这个方向上的进展表明,在前向场景中可以联合优化NeRF和相机姿态。然而,这些方法在剧烈相机运动时仍然面临困难。我们通过引入无畸变单目深度先验来解决这个具有挑战性的问题。这些先验是通过在训练期间校正比例和平移参数生成的,从而能够约束连续帧之间的相对姿态。这种约束是通过我们提出的新型损失函数实现的。对真实世界室内和室外场景的实验表明,我们的方法可以处理具有挑战性的相机轨迹,并在新视角渲染质量和姿态估计精度方面优于现有方法。本文《NoPe-NeRF: Optimising Neural Radiance Field with No Pose Prior》的项目页面是https://nope-nerf.active.vision。
1. 主要贡献
综上所述,我们提出了一种方法来联合优化摄像机的姿势和来自具有大量摄像机运动的图像序列的NeRF。我们的系统是由三个方面的贡献促成的。
-
我们提出了一种新的方法,通过明确地模拟比例和位移失真,将单深度整合到无姿势的NeRF训练中。
-
我们通过使用未扭曲的单深度地图的帧间损失,为摄像机-NeRF联合优化提供相对位置。
-
我们通过一个基于深度的表面渲染损失来进一步规范我们的相对姿势估计。
2. 详细内容
文中解决了在无姿态NeRF训练中处理大型相机运动的挑战。考虑到给定一系列图像,相机内参和它们的单目深度估计,我们的方法同时恢复相机姿态和优化NeRF。我们假设相机内参在图像元块中可用,并运行一个现成的单目深度网络DPT[7]来获取单目深度估计。在不重复单目深度的好处的情况下,我们将围绕单目深度的有效集成到无posed-NeRF训练中展开。
训练是NeRF、相机姿态和每个单目深度地图的畸变参数的联合优化。通过最小化单目深度地图与从NeRF渲染的深度图之间的差异来监督畸变参数,这些深度图是多视角一致的。反过来,无畸变深度地图有效地调解了形状-辐射(shape-radiance)的歧义,从而简化了NeRF和相机姿态的训练。
具体来说,无畸变深度地图提供了两个约束条件。我们通过在无畸变深度地图中反投影出的两个点云之间的基于Chamfer距离的对应来提供相邻图像之间的相对姿态,从而约束全局姿态估计。此外,我们通过将无畸变深度视为表面,使用基于表面的光度一致性来规范相对姿态估计。
3. NeRF与Pose
3.1 NeRF
Neural Radiance Field(NeRF)[24] 将场景表示为一个映射函数 F Θ : ( x , d ) → ( c , σ ) F_Θ:(x,d)→(c,σ) FΘ:(x,d)→(c,σ),其中 x ∈ R 3 x ∈ \mathbb{R}^3 x∈R3 为 3D位置, d ∈ R 3 d ∈ \mathbb{R}^3 d∈R3 为视角方向, c ∈ R 3 c ∈ \mathbb{R}^3 c∈R3为辐射颜色, σ σ σ 为体密度值。该映射通常是由参数化的神经网络 F Θ F_Θ FΘ 实现的。给定 N N N 张图像 I = { I i ∣ i = 0... N − 1 } I = \{I_i | i = 0 . . . N − 1\} I={Ii∣i=0...N−1} 及其相机姿态 Π = { π i ∣ i = 0... N − 1 } Π = \{π_i | i = 0 . . . N − 1\} Π={πi∣i=0...N−1},可以通过最小化合成图像 I ^ \hat{I} I^ 与捕获图像 I I I 之间的光度误差 L r g b = ∑ i N ∥ I i − h a t I i ∥ 2 2 L_{rgb} = \sum^ N_i \| I_i − hat{I}_i\|^2_2 Lrgb=∑iN∥Ii−hatIi∥22 来优化 NeRF。
在这里, I ^ i \hat{I}_i I^i是通过聚合相机射线 r ( h ) = o + h d r(h) = o + hd r(h)=o+hd上的辐射颜色在近界和远界 h n h_n hn和 h f h_f hf之间渲染的。更具体地说,我们使用体积渲染函数来合成 I ^ i \hat{I}_i I^i。
其中, T ( h ) = e x p ( − ∫ h n h σ ( r ( s ) ) d s ) T(h) = exp(−\int^h_{h_n} σ(r(s))ds) T(h)=exp(−∫hnhσ(r(s))ds) 是沿着一条射线累积的透射率。更多细节请参见[24]。
3.2 联合优化姿态和 NeRF
之前的研究 [12、18、45] 表明,可以通过在 Eq. (2) 中使用相同的体积渲染过程,在最小化上述光度误差 L r g b L_{rgb} Lrgb 的同时估计相机参数和 NeRF。
关键在于将相机光线投射的条件设置为可变的相机参数 Π Π Π,因为相机光线 r r r 是相机姿态的函数。数学上,这种联合优化可以表示为:
其中,符号 Π ^ \hat{\Pi} Π^表示在优化过程中更新的相机参数。请注意,公式(1)和公式(3)之间的唯一区别在于公式(3)将相机参数视为变量。
一般来说,相机参数 Π \Pi Π包括相机内参、姿态和镜头畸变。本文只考虑估计相机姿态,例如,第 i i i帧图像的相机姿态是一个变换 T i = [ R i ∣ t i ] T_i=[R_i|t_i] Ti=[Ri∣ti],其中 R i ∈ S O ( 3 ) R_i\in SO(3) Ri∈SO(3)表示旋转, t i ∈ R 3 t_i\in \mathbb{R}^3 ti∈R3表示平移。
3.3. 单目深度的校正
使用现成的单目深度网络(如DPT [28]),我们从输入图像生成单目深度序列 D = D i ∣ i = 0... N − 1 D = {D_i | i = 0 . . . N-1} D=Di∣i=0...N−1。不出所料,单目深度图并不是多视角一致的,因此我们的目标是恢复一系列多视角一致的深度图,这些深度图进一步在我们的相对位姿损失项中得到利用。
具体而言,我们为每个单目深度图考虑两个线性变换参数,从而得到所有帧的变换参数序列 Ψ = ( α i , β i ) ∣ i = 0... N − 1 Ψ = {(α_i,β_i) | i = 0 . . . N-1} Ψ=(αi,βi)∣i=0...N−1,其中 α i α_i αi和 β i β_i βi分别表示比例因子和偏移量。在NeRF的多视角一致性约束下,我们的目标是恢复 D i D_i Di的多视角一致深度图 D i ∗ D^∗_i Di∗:
通过联合优化 α i α_i αi和 β i β_i βi以及NeRF,来实现这种联合优化,主要是通过在未畸变的深度图 D i ∗ D^∗_i Di∗和通过NeRF渲染的深度图 D ^ i \hat{D}_i D^i之间强制实现一致性来实现的。这种一致性通过深度损失来实现:
其中
式(5)对NeRF和单目深度图都有好处。一方面,单目深度图为NeRF训练提供了强的几何先验,降低了形状-辐射度模糊性。另一方面,NeRF提供了多视角一致性,因此我们可以恢复一组多视角一致的深度图用于相对姿态估计。
…详情请参照古月居
相关文章:

经典文献阅读之--NoPe-NeRF(优化无位姿先验的神经辐射场)
0. 简介 在没有预先计算相机姿态的情况下训练神经辐射场(NeRF)是具有挑战性的。最近在这个方向上的进展表明,在前向场景中可以联合优化NeRF和相机姿态。然而,这些方法在剧烈相机运动时仍然面临困难。我们通过引入无畸变单目深度先…...

在docker中没有vi如何修改docker中的文件
今天在做学成在线的项目,遇到了一个问题,就是死活登不上xxl-job,按照之前遇到的nacos的问题,我怀疑很大概率是和当时的ip设置有关,不知道nacos的ip怎么修改的同学,可以看看这篇文章:关于docker中…...

【Docker】Docker应用部署之Docekr容器安装Nginx
目录 一、搜索镜像 二、拉取镜像 三、创建容器 四、测试使用 一、搜索镜像 docker search nginx 二、拉取镜像 docker pull nginx # 不加冒号版本号 默认拉取最新版 三、创建容器 首先我们需要在宿主机创建数据卷目录 mkdir nginx # 创建目录 cd nginx # 进入目录 mkd…...

flutter开发实战-jsontodart及 生成Dart Model类
flutter开发实战-jsontodart及 生成Dart Model类。 在开发中,经常遇到请求的数据Json需要转换成model类。这里记录一下Jsontodart生成Dart Model类的方案。 一、JSON生成Dart Model类 在开发中经常用到将json转成map或者list。通过json.decode() 可以方便 JSON 字…...

C++复刻:[流光按钮]+[悬浮波纹按钮]
目录 参考效果实现main.cppdialog.hdialog.cppflowingRayButton.h 流动光线按钮flowingRayButton.cpp 流动光线按钮hoveringRippleButton.h 悬浮波纹按钮hoveringRippleButton.cpp 悬浮波纹按钮模糊知识点 源码 参考 Python版本:GitHub地址 B站主页 效果 实现 ma…...

CompletableFuture 详解
目录 简单介绍 常见操作 创建 CompletableFuture new 关键字 静态工厂方法 处理异步结算的结果 简单介绍 CompletableFuture 同时实现了 Future 和 CompletionStage 接口。 public class CompletableFuture<T> implements Future<T>, CompletionStage<T…...

el-table数据处理
在写表格时遇到,后端返回的数据是对象,并且缺少字段 1.每一条数据加上 一个字段 2.将对象转成数组 以下是数据 {"groupA": {"groupName": null,"orgName": null,"orgId": null,"allPeoper": &quo…...

IPv4网络用户访问IPv6网络服务器
NAT64静态映射为一对一的对应关系,通常应用在IPv4网络主动访问IPv6网络的场景中。 要求位于IPv4网络中的PC通过IPv4地址1.1.1.10能够直接访问位于IPv6网络中Server。 操作步骤 配置FW。 # 配置接口GigabitEthernet 0/0/1的IPv4地址。 <FW> system-view [F…...

程序员是怎么记住代码的?
程序员能记住所有东西吗? 程序员不会记住他们使用的所有代码,相反,他们倾向于阅读文档,学习基本概念,并使用软件社区来解决问题。大约55%的软件开发人员报告每天至少使用一次StackOverflow来帮助解决编程问题。 使用…...
华为云NFS使用API删除大文件目录
最近在使用华为云SFS时,如果一个目录存储文件数超过100W,执行 “rm -rf path”时,存在删不动的情况,可以使用华为云API接口,执行异步删除。 华为官网: 删除文件系统目录_弹性文件服务 SFS_API参考_SFS Tu…...

国家金融监督管理总局明确将数据安全管理纳入操作风险管理范畴
为进一步完善银行保险机构操作风险监管规则,提升银行保险机构的操作风险管理水平,国家金融监督管理总局起草了《银行保险机构操作风险管理办法(征求意见稿)》(以下简称《办法》),现向社会公开征…...

.asScala爆红
转载:asScala报错 解决方案: 导入隐式转换 import scala.collection.JavaConverters._ //asScala需要使用隐式转换 代码中的asScala就可能不标红了,如果标红,就直接去掉,去掉就不报错了...

SOLIDWORKS Utilities应用
在实际的生产设计制造中,经常会遇到同一个零件多个版本,有可能再次调用零件的时间已经是很长时间之后,对于版本之间的区别就不会那么清楚,碰到简单明显的零件还可以轻松的找到区别,但是复杂的零件区别的查找可能会造成…...

发现的宝藏开源软件
1.华夏erp https://github.com/jishenghua/jshERP 2.s2b2c商城 后端 lilishop商城 电商 java商城系统: lilishop商城基于SpringBoot 全端开源 电商商城系统 支持小程序商城 H5商城 APP商城 PC商城 。支持业务模式包含 O2O商城 B2B商城 多语言商城 跨境电商 B2B2C商城 F2B2C商…...

【八】mybatis 日志模块设计
mybatis 日志模块设计 简介:闲来无事阅读一下mybatis的日志模块设计,学习一下优秀开源框架的设计思路,提升自己的编码能力 模块设计 在Mybatis内部定义了4个级别:Error:错误 、warn:警告、debug:调试、trance,日志优…...

Python-如何使用正则表达式
如何利用Python使用正则表达式 目录 正则表达式常用匹配规则 编辑re库的使用 match()方法: search()方法: findall()方法 : sub()方法: compile()方法; 通用匹配 贪婪与非贪婪匹配 贪婪匹配 非贪婪匹配 修饰符 转义匹配 正则表达式是处理字符的强大…...

分解质因子,将一个不小于2的整数分解质因数,例如,输入90,则输出:90=2*3*3*5
假设一个不小于2的整数n,对从2开始的自然数k,这个试探它是否是整数n的一个因子,如果是,则输出该因子,并将n/k的结果赋给n(接下来只需要对n除以已经找到的因子之后的结果继续找因子)。如果n的值不…...

C语言,vs各种报错分析(不断更新)
1.引发了异常: 写入访问权限冲突2.#error: Error in C Standard Library usage 1.引发了异常: 写入访问权限冲突 这里是malloc没有包含头文件<stdlib.h>,包含之后就好了 2.#error: Error in C Standard Library usage 这里就是用C语言写程序时使用了C的头文件…...

AR开发平台 | 探索AR技术在建筑设计中的创新应用与挑战
随着AR技术的不断发展和普及,越来越多的建筑师开始探索AR技术在建筑设计中的应用。AR(增强现实)技术可以通过将虚拟信息叠加到现实场景中,为设计师提供更加直观、真实的建筑可视化效果,同时也可以为用户带来更加沉浸式的体验。 AR开发平台广…...

小白到运维工程师自学之路 第六十集 (docker的概述与安装)
一、概述 1、客户(老板)-产品-开发-测试-运维项目周期不断延后,项目质量差。 随着云计算和DevOps生态圈的蓬勃发展,产生了大量优秀的系统和软件。软件开发人员可以自由选择各种软件应用环境。但同时带来的问题就是需要维护一个非…...

SpringBoot 集成 Elasticsearch
一、版本 spring-boot版本:2.3.7.RELEASEElasticsearch7.8.0版本说明详见 二、Elasticsearch 下载和安装 Elasticsearch 下载 kibana下载 ik分词器下载 配置IK分词器 2.1 解压,在elasticsearch-7.8.0\plugins 路径下新建ik目录 2.2 将ik分词器解压放…...

【ES】使用日志记录
1、修改操作 1、要删除Elasticsearch索引的分区下的数据 <index_name>是要删除数据的索引名称。这个命令会删除该索引下的所有数据。 POST /<index_name>/_delete_by_query {"query": {"match_all": {}} }2、删除特定条件下的数据 要删除a…...

svn还原本地代码
svn代码还原 问题描述:在vscode中修改了代码,没有提交,而且不小心点击了svn更新,导致本地修改的最新代码被覆盖,因为没有提交,所以远程仓库中也没有刚才修改的代码记录 解决: 通过vscode的时间…...

zore-shot,迁移学习和多模态学习
1.zero-shot 定义:在ZSL中,某一类别在训练样本中未出现,但是我们知道这个类别的特征,然后通过语料知识库,便可以将这个类别识别出来。概括来说,就是已知描述,对未知类别(未在训练集中…...

【Golang 接口自动化07】struct转map的三种方式
目录 背景 struct转map 使用json模块 使用reflect模块 使用第三方库 测试 总结 资料获取方法 背景 我们在前面介绍过怎么使用net/http发送json或者map数据,那么它能不能直接发送结构体数据呢?我们今天一起来学习结构体struct转map的三种方法&am…...

华为数通HCIA-网络模型
TCP 网络通信模式 作用:指导网络设备的通信; OSI七层模型: 7.应用层:由应用层协议(http、FTP、Telnet.)为应用程序产生对应的数据; 6.表示层:将应用层产生的数据转换成网络设备看…...

端口的解说
端口的定义 端口是指计算机与外部交互的出入口,可以按照所见性分为物理端口和虚拟端口 物理端口: USB、HDMI、PDP、VGA、CUP等虚拟端口:mysql——>25, ssh——>22 、http——>80 、https——>443等 IP地址只能锁定到计算机&am…...

“深入了解Spring Boot: 快速构建微服务应用的利器“
标题:深入了解Spring Boot: 快速构建微服务应用的利器 摘要: Spring Boot是一个基于Spring框架的开发工具,旨在提供快速、方便地构建微服务应用。本文将深入探讨Spring Boot的特点和优势,以及如何使用示例代码构建一个简单的微服…...

华为OD机试 Java 实现【批量处理任务】【2023 B卷 200分】,二分查找
目录 专栏导读一、题目描述二、输入描述三、输出描述四、二分查找五、解题思路六、Java算法源码七、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(…...

C# 2的幂
231 2的幂 给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。 如果存在一个整数 x 使得 n 2x ,则认为 n 是 2 的幂次方。 示例 1: 输入:n 1 输出&a…...