Nerf-Wild神经辐射场论文学习笔记 Neural Radiance Fields for Unconstrained Photo Collections

news2024/10/5 14:01:03

前言:

本文为记录自己在Nerf学习道路的一些笔记,包括对论文以及其代码的思考内容。公众号: AI知识物语 B站讲解:出门吃三碗饭

本篇文章主要针对其数学公式来学习其内容,欢迎批评指正!!!

1:摘要

提出基于学习(learning-based)方法,使用野外照片的非结构化集合(unstructured collections of in-the-wild photographs)来合成复杂场景。之前的Nerf通过MLP的权重来模拟场景的密度、颜色。虽然在静态对象生成上比较好,但在uncontrolled images不受控的图片中,会有一些ubiquitous,real-world phenomenon,也就是可变照明或者瞬时遮光器variable illumination or transient occluders,本文基于Nerf引入了一些列扩展来解决这些问题。
在这里插入图片描述
下面讲按照论文章节来介绍:

2:Background

简单回顾下Nerf
Nerf使用一个连续(可导)的体积辐射场来表示场景,具体结构为MLP多层感知机,将空间位置 x=(x,y,z)以及方向位置d=(dx,dy,dz)输入,输出密度σ和颜色c = (r,g,b)。现在,为了得到多视角下场景(我们肉眼看到的图像场景由一个个像素组成),需要计算单个像素的颜色,Nerf将MLP网络输出的密度σ和颜色c = (r,g,b)作为输入,通过体渲染操作来生成像素。

补充:
(1)在场景中,把密度σ和颜色c = (r,g,b)通过积分操作,来模拟场景中的光线
(2)光线表示为r(t) = o + td ,o表示起点,td表示距离起点的某个方向间隔
见下图公式
在这里插入图片描述
式(1) (注意这里是求和,原先的Nerf是求导)
C_^ = T * α *c

下面这个是最初的Nerf 计算体素pixel的公式
在这里插入图片描述

参数解释:

r(t):光线上某个采样点
c(t): MLP输出的color值,采样点t_k处的color值
σ(t):MLP输出的密度值,也就是采样点t_k处的密度值
α(σ(tk)δk):根据光线路径上的位置和密度,调整每个采样点在渲染过程中的权重。融合权重会根据光线的密度进行调整,以补偿密度对颜色估计的影响。

α(x)= 1 -exp(-x):
(理解1)一种常见的融合权重函数,一种常见的融合权重函数
(理解2)表示采样点tk处的透射率(transmittance),透射率越小,贡献越大。举例σ(t),密度越大, exp(-x)越小,1 -exp(-x)越大,透射率越大

T(t_k):表示从第采样点t_k到光线终点的透射比
δ_k = t_k - t_k:这里是两个正交点之间的距离。(在最初的Nerf中表示为相邻采样点的距离)
分层采样用于选择t_n和t_f(摄像机的近平面和远平面)之间的正交点
{tk}K_k =1。

通过对沿着光线方向进行采样的辐射场值进行加权,根据透射率和颜色信息来估计每个像素点的颜色。这种方法能够更好地处理光线在场景中的衰减和颜色的变化,从而提高重建的视觉质量。

补充:
(1)T(tk)的计算是通过从相机位置c到采样点tk之间的路径上的密度(density)值进行累乘得到的。路径上的密度值反映了介质对光线的吸收和散射程度。因此,通过累乘路径上的密度值,可以计算出光线在路径上的衰减情况。

(2)公式2中,σ(tk)是采样点tk处的密度(density),δk是采样点之间的距离。这个公式中的积分表示对路径上的密度进行累积,从相机位置c到达采样点tk。

(3)δ_k表示两个正交点之间的距离。正交点是指在光线路径上与场景中的物体相交的点,并且与该物体的表面垂直(正交)相交。

那么,δ_k = t_k - t_k 表示相邻两个正交点之间的距离,即两个相交点在光线路径上的参数化位置之差。通过计算这个距离,我们可以获得两个正交点的位置之间的空间距离,用于光线追踪和渲染中的各种计算和操作。

(4)透射率是指光线在通过介质时被吸收或散射的程度。
它通常用一个介于0和1之间的值来表示,表示光线通过介质时保留下来的比例。

透射率与介质的吸收和散射特性有关。当光线通过介质时,部分光线会被介质吸收,使光线的强度减弱。另一部分光线会被介质中的颗粒或分子散射,导致光线的方向改变。透射率表示通过介质的光线相对于入射光线的强度比例。
(5)α(x)= 1 -exp(-x): (存疑,具体看代码解释)
当光线与场景交互的位置x较小时,表示该位置对渲染结果有较大的贡献。

当光线与场景交互的位置x较大时,表示该位置对渲染结果的贡献较小。

通过这种融合权重函数,NeRF模型可以对场景进行无缝融合,减少视角间隙和视角不连续的问题。

在这里插入图片描述
使用ReLU的MLP网络来输出(表示)密度值σ
使用Sigmoid的MLP网络来输出(表示)color值c
参数解释:
γ_x:表示经过位置编码的空间数据 (x是空间xyz坐标向量)
γ_d:表示经过位置编码的方向数据 (d是空间dx,dy,dz方向向量)
θ1,θ2:MLP需要拟合的量,训练MLP网络,也就是在拟合其的过程
z(t):光线路径上不同位置的参数,通过对其进行编码,模型可以学习场景中不同位置的特征和颜色变化

补充:

(1)

为了拟合θ,Nerf(具体来说也就是MLP)会最小化预测生成的图像与每个(大小为HW3)target图像的损失。
(To fit parameters θ, NeRF minimizes the sum of squared reconstruction errors with respect to an RGB image collection {Ii}N
i=1, Ii ∈ [0, 1]H×W×3.)

(2)

图像集合中的每个图像都会与(提前计算好的,比如使用Colmap生成)camera参数配对;

(3)

我们提前precompute计算Image --i中的pixel(像素)–j对应的一系列光线,记为ray_ij,这里的每条光线都穿过3D场景中的点o_i(可以理解为第i张图像image的起点,3D location),并且光线方向为d_ij(第i张image中第j个pixel视角下的color)

通过上面的介绍,我们知道,体渲染操作是对光线上每个点,利用其密度和color来进行数值积分计算。为了提高对光线上采样点的效率(光线有些地方点贡献度高,有些贡献度低,具体看前几篇介绍Nerf的),本文同时优化粗coarse和细fine模型。

两个MLP网络使用以下的损失函数来进行最小值优化

在这里插入图片描述
数学解释:
(1)
矩阵A=[0,1,2;2,1,3]
范数双竖线加下标: 矩阵中每个元素平方和的平方根,sqrt(sum(xi.^2)),比如A的L2范数就为19
范数学习链接
(2)
举例图中的左边式子,target,也叫真值的像素与粗网络预测的像素先后进行L2范数计算和平方计算(平方,可能是为了避免负值),右边同理

在摘要里,我们刚刚看到了,户外场景wild environment中,同一地点、角度的拍摄会受 光度变化以及瞬时物体变化的影响。

光度变化:一天中的时间和大气条件直接影响场景中物体的照明(以及因此产生的辐射),可能导致额外的光度不一致additional photometric inconsistencies。

瞬时物体:现实世界的地标很少被孤立地捕捉,它们周围没有移动的物体或遮挡物。地标的旅游照片尤其具有挑战性,因为它们通常包含摆拍的人类主体和其他行人。

针对上述问题,该论文扩展了NeRF,以允许图像相关的外观和光照变化image- dependent appearance and illumination variations ,从而可以显式地模拟图像之间的光度差异,允许瞬时物体被联合估计并从3D世界的静态表示中分离出来

在这里插入图片描述

参数解释:
输入:appearance embedding外观 + 视角方向 + 三维位置 + 瞬时transient embedding
输出:静态static和瞬态transient的颜色和密度

4.1 Latent Appearance Modeling

为了让Nerf能够更好地处理光照变化variable lighting以及 photometric post-processing问题,采用了GLO方法(Generative Latent Optimization)。
具体来说就是(1)给每个图片分配了一个长为n的嵌入向量(embedding vector)l (2)用c_i(t)代替上面方程(1)中的c(t),引入的量他可以引入图像image_i对近似像素颜色C的依赖
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
方程解释:
(6)左边是第i张图预测的像素值,右边是体渲染render函数,其输入为ray,c(color)和密度
(7)左边是本文引入的c_i(t),理解为第i张image,光线位置t处的点的color,右边是输出color的MLP网络,其输入是z(t),位置编码过后的方向向量,以及外观嵌入向量l (appearance embedding vector)

补充:
1:这里重在区别方程(6)和(1)中的 c_i参数,是不同的,前者引入了外观嵌入向量。
2:这里引入的外观嵌入向量也会随着MLP网络中θ2被优化而优化

4.1 Transient Objects

为了解决瞬态现象transient phenomena问题
(1)把输出color的MLP网络指定为static head静态头部,并额外添加瞬态头部additional transient head,其输出color颜色和密度,并允许密度值在不同的训练图像间变化,该方法使得Nerf-W可以重建包含遮光器的图像
(2)不是假设所有观察到的像素颜色都同样可靠,而是允许我们的瞬态头部发射不确定场emit a field of uncertainty(很像我们现有的颜色和密度场),这允许我们的模型调整其重建损失adapt its reconstruction loss,以忽略不可靠的像素和可能包含遮光物的3D位置。
我们将每个像素的颜色建模为各向同性的正态分布isotropic normal distribution,我们将最大化其可能性likelihood,并且我们使用与NeRF使用的相同的体绘制方法来“绘制”该分布的方差。这两个模型组件允许NeRF-W在没有明确监督的情况下理清disentangle静态和瞬态现象。

为了建立自己的 transient head瞬态头部,该论文基于体渲染方程6,增加了静态密度σ和radiance辐射c_i,及其对应的瞬态密度σ_T_i和辐射 c_T_i

具体方程如下:

在这里插入图片描述
这是原来的方程:
在这里插入图片描述

参数解释:

r(t):光线上某个采样点
c(t): MLP输出的color值,采样点t_k处的color值
σ(t):MLP输出的密度值,也就是采样点t_k处的密度值
α(x)= 1 -exp(-x):
(理解1)一种常见的融合权重函数,一种常见的融合权重函数
(理解2)表示采样点tk处的透射率(transmittance),透射率越小,贡献越大。举例σ(t),密度越大, exp(-x)越小,1 -exp(-x)越大,透射率越大

T(t_k):表示从第采样点t_k到光线终点的透射比

δ_k = t_k - t_k:这里是两个正交点之间的距离。(在最初的Nerf中表示为相邻采样点的距离)
分层采样用于选择t_n和t_f(摄像机的近平面和远平面)之间的正交点
{tk}K_k =1。

方程(8)(9)与(1)区别注意:
(8)在(1)的基础上添加了transient head,左边是static静态部分,右边动态部分transient head
同时(9)中也根据对应static静态部分添加了瞬态部分transient head

论文采用采用Kendall等人[15]的贝叶斯学习框架Bayesian learning framework来模拟观察到的颜色的不确定性。我们假设观察到的像素强度pixel intensities是固有的噪声(任意的)inherently noisy (aleatoric),并且进一步假设这种噪声是依赖于输入的(异质的)input-dependent (het- eroscedastic)。我们用各向同性正态分布isotropic normal distribution 对观察到的颜色C_i 建模,该正态分布具有依赖于图像和光线的方差β_i ^2和平均值c_i。

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

方差β_i (r)通过瞬时密度σ(t),通过α(alpha-compositing)透明度来渲染颜色

为了使瞬态变量可以跨图像变化,论文给训练的每个图像image_i分配了第二个embed-ding I 量(类似于appearance embedding),其作为瞬态变量输入MLP

在这里插入图片描述

Relu + sigmoid激活函数用在瞬态下的密度和color值,
softplus(x)=log(1+exp(x))
β_min作为一个超参数,其可以确保每条射线被分配了最小的重要性

在这里插入图片描述
前两项是Ci®的(移过的)负对数似然,符合均值Ci®和方差βi®2的正态分布。较大的βi®值会减弱分配给像素的重要性,假设它属于某个瞬态对象。第一项被第二项平衡(当Bi过于大的时候,第1项接近0,第2项就会平衡,使其不那么靠近0),它对应于正态分布的对数配分函数,并且排除了βi® =∞处的平凡最小值。第三项是在(非负)瞬态密度σ(τ)上具有乘法器λu的L1正则化器。这阻碍了模型使用瞬态密度来解释静态现象。

在测试时,我们忽略瞬态场和不确定场;只表示σ(t)和c(t)图4给出了一个示例
在这里插入图片描述

4.3. Optimization

与NeRF一样,我们同时优化了两个MLP:一个使用上述模型和损失loss的精细模型,一个只使用潜在外观建模组件的粗糙模型。除了参数θ,我们优化每幅图像的外观嵌入{I(a)}N 和瞬态嵌入 i=1,{(τ) }N

则NeRF-W的损失函数为:

在这里插入图片描述
对于测试集可视化,我们选择来最佳拟合目标图像(例如图8)或者将其设置为任意值。
在这里插入图片描述

Result:
在这里插入图片描述在这里插入图片描述
表1:NRW[22]、NeRF[24]和所提出模型的两次缩减在摄影旅游数据集[13]上的定量结果。最好的结果会被突出显示。NeRF-W在PSNR和MS-SSIM的所有数据集上都优于以前的技术水平,并在LPIPS中取得了具有竞争力的结果。请注意,LPIPS通常倾向于使用NRW等训练具有对抗性或感知损失的方法对典型的GAN伪影不太敏感,参见图7和14(补充)。

Limitations:虽然 NeRF-W 能够从非结构化照片生成逼真且时间一致的渲染,但在训练图像中很少观察到的场景区域或仅在非常倾斜的角度(例如地面)观察到的场景区域中,渲染质量会下降,如图所示 如图 10 所示。与 NeRF 类似,NeRF-W 对相机校准误差也很敏感,这可能会导致场景中已成像的部分重建模糊。相机校准不正确。

Conclusion:我们提出了 NeRF-W,这是一种基于 NeRF 构建的非结构化互联网照片集对复杂环境进行 3D 场景重建的新颖方法。 我们学习每个图像的潜在嵌入,捕获野外数据中经常出现的光度外观变化,并将场景分解为图像相关和共享的组件,以允许我们的模型从静态场景中分离瞬态元素。 对真实世界(和合成)数据的实验评估表明,与之前的状态相比,在定性和定量上有了显着的改进最先进的方法。

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

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

相关文章

10-C++学习笔记-字符串

📚 前言 字符串是在编程中广泛使用的数据类型,用于表示一系列字符。在C中,我们可以使用C风格字符串和string类来处理字符串操作。本篇学习笔记将详细介绍字符串的相关知识。 📖 1 C风格字符串 ✨ C风格字符串初始化 C风格字符…

什么是EMC存储 Clarrion存储的cache dirty或者cache lost(CACD)?

CACD是Cant assign, Cache Dirty的缩写,DELL EMC的专业术语。 在开始之前,先介绍下cache dirty的概念,朴素的语言就是有了脏数据,脏数据当然就是不能使用的数据了。为什么数据会脏呢?先从存储的基本概念聊起来。 为了加…

PoseiSwap 将向 Zepoch 节点持有者发放新一轮空投,生态启动在即

目前,随着各类 Layer2 空投不断内卷,越来越多的用户疲于参与其中(参与交互也很有可能难以获得空投资格)。Nautilus Chain 作为目前模块化 Layer3 架构链,在初期就明确了空投计划,即所有上线的应用都将会拿出…

各类农作物分布遥感监测数据大全

最近收集整理了大量的农作物分布的遥感监测数据,废话不多说,分享给大家,后面会持续更新!! 数据查看地址: https://www.dilitanxianjia.com/%e9%81%a5%e6%84%9f%e8%a7%a3%e8%af%91%e5%90%8e%e6%88%90%e6%9…

LeetCode 0002. 两数相加

【LetMeFly】2.两数相加 力扣题目链接:https://leetcode.cn/problems/add-two-numbers/ 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff…

2016年全国硕士研究生入学统一考试管理类专业学位联考逻辑试题——纯享题目版

🏠个人主页:fo安方的博客✨ 💂个人简历:大家好,我是fo安方,考取过HCIE Cloud Computing、CCIE Security、CISP、RHCE、CCNP RS、PEST 3等证书。🐳 💕兴趣爱好:b站天天刷&…

华为OD机试真题 Java 实现【开心消消乐】【2023 B卷 100分】

目录 一、题目描述二、输入描述三、输出描述四、Java算法源码五、效果展示1、输入2、输出3、说明 一、题目描述 给定一个N行M列的二维矩阵,矩阵中每个位置的数字取值为0或1。矩阵示例如: 1 1 0 0 0 0 0 1 0 0 1 1 1 1 1 1 现需要将矩阵中所有的1进行反…

maven高级开发

分模块设计 例如 如果需要用到其他的模块,直接导入模块坐标就可以了 分模块开发,需建立的模块,选择maven模型 分模块设计需要先针对模块功能进行设计,再进行编码。 继承与聚合 继承:描述的是两个工程间的关系&…

UE4/5通过插件,用GeneratedDynamicMeshActor编辑静态网格到content中

目录 制作 直接复制下面代码到蓝图中粘贴即可: 效果1【用了第一个函数】: 效果2【用了第二个函数】: 制作 首先我们要打开插件: 然后继承GeneratedDynamicMeshActor进行创建: 我们制作一个函数,这个函数将…

Draw.io | 一款强大且支持在线编辑和导出的流程图绘制神器

目录 💌 写在前面 🖥️ 软件介绍 🖥️ 使用方式 1. Draw.io 的核心设计元素 1.1 绘图区 1.2 快速开始 2. Draw.io 的基本操作 2.1 移动、多选、复制与删除 2.2 创建链接 2.3 图形替换与旋转 3. 使用 Draw.io 绘制简单流程图 3.1 基本…

ChatGPT Plugins内幕、源码及案例实战(三)

ChatGPT Plugins内幕、源码及案例实战(三) ChatGPT Plugins内幕、源码及案例实战 6.4 ChatGPT Retrieval Plugin全流程内幕解析 以ChatGPT检索插件为例,我们讲解一下它整个的流程,让大家有一个比较明确、清晰的统一认知:  数据存储:设立的前提是你有文档,会有一些文…

大学教材征订管理系统数据库设计

摘 要 随着计算机及Internet迅速的发展,越来越多的行业实现了管理的信息化和自动化,教育行业也不例外。但在很多高校中,教材征订作为学校教学工作中很重要的一个环节还没完全实现信息化管理。因此本系统针对高校教材征订管理过程中人工管理存在的困难&a…

(02)Cartographer源码无死角解析-(67) 2D后端优化→FastCorrelativeScanMatcher2D -分支定界算法(BranchAndBound)1

讲解关于slam一系列文章汇总链接:史上最全slam从零开始,针对于本栏目讲解(02)Cartographer源码无死角解析-链接如下: (02)Cartographer源码无死角解析- (00)目录_最新无死角讲解:https://blog.csdn.net/weixin_43013761/article/details/127350885 文…

Java——包(package)

一、Java中的包(package) 在Java中,包(package)是一种用于组织类和接口的命名空间的机制。它用于将相关的类和接口组织在一起,以便更好地管理和维护代码。 其实就是一个个文件夹 二、包(package)的作用 防止类和接口命名冲突&…

时间序列分解 | Matlab变分模态分解(VMD)的信号分解

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 时间序列分解 | Matlab变分模态分解(VMD)的信号分解 部分源码 %--------------------

尚硅谷Docker2022版学习笔记(基础篇 下)

目录 五、本地镜像发布到阿里云 5.1、本地镜像发布到阿里云流程 5.2、镜像的生成方法 基于当前容器创建一个新的镜像(第一种方法) DockerFile(第二种方法) 5.3、将本地镜像推送到阿里云 本地镜像素材原型 创建仓库镜像 选…

hive row_number()对单列进行去重

学到一个高级用法 row_number() select * ,row_number() over (partition by c_id order by s_score) from score; https://www.jb51.net/article/254952.htm

【Kafka】第一章

【Kafka】第一章 1.课程内容 1.课程内容 >课程学习

Python———PyCharm下载和安装

(一)开发环境介绍 开发环境,英文是 IDE ( Integrated Development Environment 集成开发环境)。 不要纠结于使用哪个开发环境。开发环境本质上就是对Python 解释器python.exe 的封装,核心都一样。可以说&…