【成长day】NeRF学习记录1:预备知识nerf论文算法学习

个人知乎文章链接:https://zhuanlan.zhihu.com/p/3383996241

预备知识

NeRF重建

NeRF的全称是Neural Radiance Fields,即将场景表示为视场合成的神经辐射场,用神经网络来拟合辐射场,实现对三维场景的隐式表示。本质是完成了图形学里面的3D渲染(Render)功能,3D信息的隐式表达。
渲染:将场景定义(包括摄像机、灯光、表面几何和材料)转换为模拟摄像机图像的过程称为渲染。简单来说就是模拟相机的拍照过程,生成的结果是该视角下看到的一张照片。

隐式表达:告诉你3D点满足特定的关系,而不是告诉你点具体在哪。例如,3D球面上的任意一点都满足 。只要找到所有的x,y,z满足F(x,y,z)=0,就能将图像画出来。缺点就是很难去描述复杂的物体;优点有:

  1. 容易表示;
  2. 做某些查询很容易(例如判断物体在外面还是里面,计算到表面的距离等);
  3. 很容易对光线与表面求交的
  4. 对于简单的物体们,用隐式的表示方法是很精确的,没有采样错误
  5. 易于处理拓扑结构(比如流体)

显示表达:3D点直接给出或通过参数映射的方式,可以方便看模型,但很难判断点是否在模型上或模型内外。

三维shape的表征方式:显示表达的方式分为点云、网格和体素;隐式表达的方式有SDF和NeRF(mesh)

传统的三维重建方法

  1. 主动式:结构光重建、TOF方法、三角测距法
  2. 被动式:SFM、REMODE、SVO

NeRF相对于传统方式的优势

  1. 继承了体积表示的有点,可以表示复杂的几何形状和外观
  2. 适合使用投影图像进行基于梯度的优化
  3. 克服了在高分辨率建模复杂场景时,离散化体素网格带来的存储成本过高问题。

NeRF神经辐射场是一种面向三维隐式空间建模的深度学习模型,这种深度学习模型是全连接神经网络(MLP多层感知机);接下来引出MLP的简单介绍:

多层感知器(Multi-Layer Perceptron,MLP)

神经网络分为输入层、隐藏层和输出层。隐藏层前几层可以是简单函数进行提取信息,后几层可以是复杂函数进行学习。

  1. MLP包含输入层、隐藏层、输出层。层与层之间是全连接的(上一层的任何一个神经元与下一层的
    所有神经元都有连接)
  2. 激活函数:中间会加入激活函数,其作用是:给神经元引入非线性因素,使得神经网络可以任意逼近任何非线性函数; 不使用激活函数的话,每层都是线性组合,不管多少个线性函数组合得到还是个线性函数。
  3. 前向传播和后向传播:就是将上一层的输出作为下一层的输入,并计算下一层的输出,一直到运算到输出层为止;后向传播:实际上,反向传播仅指用于计算梯度的方法。而另一种算法,例如随机梯度下降法,才是使用该梯度来进行学习。原则上反向传播可以计算任何函数的导数,在这其中也还会用到链式求导法则。

卷积神经网络
输入是多通道矩阵了,然后每一层的函数和激活函数都是滤波器进行滤波的过程了,并且会有以下几个特点:

  1. 每一层中,输入的通道数与滤波器的通道数相同
  2. 全部参与计算的滤波器个数与最后输出的通道数一致
  3. 权重参数w=滤波器大小与输入和输出通道数乘积
  4. 偏置b=滤波器个数即输出通道的个数
  5. 输出大小:(输入+2*padding-filter size)/stride+1

参数:需要网络学习的参数:w b
超参数:模型训练需要的外部设置的参数比如学习率迭代次数,隐藏层的层数,激活函数的选择等
找到最优的超参数方法就是不断尝试

nerf论文摘要与介绍

接下来的内容和文章https://blog.csdn.net/guanjing_dream/article/details/135606180一致,我觉得此文章的形式和内容对初学者非常友好,为了尊重作者,所以我把原贴贴在这里。然后我就只是针对性写一些更助于自己理解的内容。

论文提出了一种方法,该方法通过使用稀疏的输入视图集来优化底层连续体素场景函数,
(1)连续体素场景函数:指静态场景表示为连续的5D函数,该函数输出空间中每个点(x,y,z)在每个方向(θ,φ)上发射的辐射度
实现了合成复杂场景的新视图的最新结果。我们的算法使用一个全连接(非卷积)深度网络来表示一个场景,其输入是一个连续的5D坐标(3D位置+2D旋转),输出是该空间对应的体素密度和基于视角的辐射场。
(2)输入:稀疏的图像集以及对应的pose(3d位置+2d旋转
(3)输出:体素密度+RGB(也能有其他输出,深度视差等)
我们沿着相机光线查询5D坐标,并使用经典的体素渲染技术将输出的颜色和密度投影到图像中。因为体素渲染是自然可微分的,
(4)可微分:代表可以使用梯度下降等优化算法进行优化网络模型
所以优化我们的表示所需的唯一输入是一组具有已知相机姿势的图像。我们描述了如何有效地优化神经辐射场,以渲染具有复杂几何形状和外观的场景的真实感新视图,并展示了优于先前神经渲染和视图合成工作的结果。

整体算法过程

1)使相机光线穿过场景以生成一组采样的3D点,
2)使用这些点及其对应的2D观测方向作为神经网络的输入以产生一组颜色和密度的输出,
3)使用经典的体渲染(Volume rending)技术将输出的颜色和密度信息累积到2D图像中。

使用梯度下降来优化这个模型,通过最小化每个观测到的图像和相应的基于我们的方法得到的视图渲染结果之间的误差。通过将多个视图之间的这种误差最小化,激励网络通过将高体积密度和准确的颜色分配给包含真实底层场景内容的位置来预测场景的连贯模型。
算法过程对应的图示:
请添加图片描述

具体对上图的解释和位置编码引入的原因在上述文章中都讲的很详细。
NeRF优点:不需要精确的3D几何信息,只需要RGB信息

基于神经辐射场的场景表示

对应上述文章的这部分

基于辐射场的体渲染

请添加图片描述
在这里插入图片描述

回顾上面两张图中所示的算法流程:
最开始定义射线(NeRF中的射线定义是以相机光心为原点),将其转到世界坐标系,然后利用采样策略在每条射线上进行点的采样,定义每个点的坐标和方向(5D坐标),紧接着就是根据上述两个图中所示,将5D坐标进行位置编码送入MLP网络,输出每条射线上每个点的RGB和体密度。

第一张图对应第二张图的(a)(b)过程——神经辐射场,即NeRF将场景建模成MLP神经网络的参数(网络权重),也就是场景建模隐式表达。接下来就要进行基于辐射场的体渲染过程。

立体渲染(volume rendering)

首先需要明白一件事,光线上采样的点与最终合成RGB图像的关系:相机光心发射一条光线,打到3D物体上,最后反射到2d呈现平面上是一个像素,即:一条射线上的N个采样点,最终渲染成一个像素点RGB值。

渲染的物理公式定义
在这里插入图片描述

其中:
T:累计透光率,光线传到此点还剩多少光
sigma:当前点的体密度(MLP网络输出)
c:当前点的RGB值(MLP网络输出)
tn~tf:射线范围

点的密度越大,它阻挡光线的能力也就越强,同样对渲染RGB的权重也越重要

对应的离散模式如下:
在这里插入图片描述
对应的loss也如图二所示,为“粗糙”网络和“精细”网络渲染rgb与真实像素的总平方误差

神经辐射场优化

引入了两种改进,以实现高分辨率复杂场景的表现。第一种是输入坐标的位置编码,有助于MLP表示高频函数,第二种是分层采样过程,使我们能够有效地对这种高频表示进行采样。

位置编码

也是对应上述文章此部分。
两个表现:

  1. 5D输入,渲染在表示颜色和几何形状的高频变化方面表现不佳。
  2. 将输入传递到网络之前,使用高频函数将输入映射到更高维空间可以更好的拟合包含高频变化的数据。

具体为:函数γ会将原始的坐标信息进行一个广义的傅立叶变换(也有点像归一化处理),使得原本相邻的两个位置差距扩大以实现更高分辨率的处理效果(如将30和31两个连续的数值经过一次编码后变成−0.6842和0.6240,这使得迭代过程中变得更加精细)

是否采用位置编码的差距体现如下图所示:
在这里插入图片描述

分层体积采样

问题现象:沿着每条相机射线的N个查询点上密集评估神经辐射场网络的渲染策略是低效的:对渲染图像没有贡献的自由空间和遮挡区域仍然被重复采样。

背景:从早期的体渲染工作中获得了灵感[20],并提出了一种分层表示,通过按样本对最终渲染的预期效果成比例分配样本来提高渲染效率。

思路:不只是使用单个网络来表示场景,而是同时优化两个网络:一个“粗略”网络和一个“精细”网络。

方法

  1. 首先使用分层采样对一组Nc个位置进行采样,并评估这些位置的“粗略”网络,计算每个采样位置的权重,并进行归一化处理,最后得到一个概率密度函数。
  2. 给定这个“粗略”网络的输出,然后沿着每条射线对权重更大的点进行更精确的采样,其中样本偏向体积的相关部分。

具体实现

  1. 采样Nc(64)个点,计算每个点的权重,对应公式5.随后进行归一化处理,得到概率密度函数,并根据此函数再采样第二组Nf个点。
  2. 在一共采样Nc+Nf个点中评估“精细”网络,并使用公式3计算射线的最终渲染颜色。
实现细节和损失函数

为每个场景优化单独的神经连续体积表示网络。这只需要场景的RGB图像、相应的相机姿态和内参数以及场景边界(距离相机的最近和最远距离)。

在每次优化迭代中,我们从数据集中的所有像素集中随机采样一批相机射线,然后按照第5.2节中描述的分层采样来查询来自粗略网络的Nc个样本和来自精细网络的Nc+Nf个样本。然后,我们使用第4节中描述的体积渲染过程来渲染两组样本中每条光线的颜色。

损失只是粗略渲染和精细渲染的渲染和真实像素颜色之间的总平方误差:
在这里插入图片描述

其中R是每个batch中光线的集合,C®是颜色渲染真值,下标为c和f的分别是基于粗采样网络的预测和基于精细网络采样的预测。注意:即使最终的渲染结果来源于精细网络采样的预测,但是也需要将基于粗网络采样的预测损失最小化,以便来自粗略网络的权重分布可以用于在精细网络中分配样本,于是就构成了上述公式6。

在我们的实验中,我们使用4096条射线的批量大小,每条射线在粗略体积中以Nc=64个坐标采样,在精细体积中以Nf=128个附加坐标采样。我们使用Adam优化器[18],单个场景的优化通常需要大约100-300k次迭代才能收敛到单个NVIDIA V100 GPU上(大约1-2天)。

论文实验结果&NeRF优缺点

评估指标

1.峰值信噪比PSNR(Peak Signal to Noise Ratio)

衡量最大值信号和背景噪音之间的图像质量参考值。PSNR的单位为dB,其值越大,图像失真越少。一般来说,PSNR高于40dB说明图像质量几乎与原图一样好;在30-40dB之间通常表示图像质量的失真损失在可接受范围内;在20-30dB之间说明图像质量比较差;PSNR低于20dB说明图像失真严重。
2. 结构相似性指数SSIM(structural similarity index)

一种用于量化两幅图像间的结构相似性的指标。与L2损失函数不同,SSIM仿照人类的视觉系统(Human Visual System,HVS)实现了结构相似性的有关理论,对图像的局部结构变化的感知敏感。SSIM从亮度、对比度以及结构量化图像的属性,用均值估计亮度,方差估计对比度,协方差估计结构相似程度。SSIM值的范围为0至1,越大代表图像越相似。如果两张图片完全一样时,SSIM值为1。

3.学习感知图像块相似度LPIPS(Learned Perceptual Image Patch Similarity)

也称为“感知损失”(perceptual loss),用于度量两张图像之间的差别。LPIPS的值越低表示两张图像越相似,反之,则差异越大。

NeRF优缺点

优点:

  1. 新视点合成效果逼真
  2. 可微渲染

局限性:

  1. 无法编辑
  2. 输入图像比较稠密
  3. 只能处理静态场景
  4. 光照必须固定
  5. 低动态范围
  6. 训练速度慢
  7. 每个场景必须要重新训练,没有泛化能力

针对以上列举的NeRF局限性,下面是各类NeRF针对不同缺点的改进优化:

  1. 加速训练:Instant NGP、TensoRF、Plenoxels
  2. 泛化能力:PixelNeRF、MVSNeRF
  3. 处理图像模糊、高动态范围:Deblur-NeRF、HDR-NeRF
  4. 图像存在畸变的:Self-Calibrating Neural Radiance Fields
  5. 位姿不准:BARF/GNeRF
  6. 不同尺度、不同光照:Mip-NeRF、NeRF in the wild
  7. 少量图像:MVSNeRF、Depth-supervised NeRF

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

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

相关文章

[项目详解][boost搜索引擎#2] 建立index | 安装分词工具cppjieba | 实现倒排索引

目录 编写建立索引的模块 Index 1. 设计节点 2.基本结构 3.(难点) 构建索引 1. 构建正排索引(BuildForwardIndex) 2.❗构建倒排索引 3.1 cppjieba分词工具的安装和使用 3.2 引入cppjieba到项目中 倒排索引代码 本篇文章,我们将继续项…

Android——事件冲突处理

当我们给列表的item设置了点击事件后&#xff0c;又给item中的按钮设置了点击事件&#xff0c;此时item的点击事件会失效。 解决 给item的布局xml中设置以下属性 android:descendantFocusability"blocksDescendants"<LinearLayout xmlns:android"http://sc…

005:航空力学基础、无人机操纵、飞机性能

摘要&#xff1a;本文详细介绍无人机稳定性、操控性、飞机性能等概念。 一、飞机的稳定性 概念&#xff1a; 飞机的稳定性&#xff08;安定性&#xff09;&#xff0c;是指在飞机受到扰动后&#xff0c;不经飞行员操纵&#xff0c;能恢复到受扰动前的原始状态&#xff08;即原…

Android系统架构

Android系统架构&#xff1a; Android系统架构是一个复杂的、分层的结构&#xff0c;旨在提供高度的灵活性和可扩展性。这个架构可以大致分为以下几个主要层次&#xff1a; Linux Kernel&#xff08;Linux内核&#xff09;&#xff1a; Linux内核是Android系统的底层&#xff0…

OAK相机的RGB-D彩色相机去畸变做对齐

▌低畸变标准镜头的OAK相机RGB-D对齐的方法 OAK相机内置的RGB-D管道会自动将深度图和RGB图对齐。其思想是将深度图像中的每个像素与彩色图像中对应的相应像素对齐。产生的RGB-D图像可以用于OAK内置的图像识别模型将识别到的2D物体自动映射到三维空间中去&#xff0c;或者产生的…

OpenSSL

OpenSSL 概述 OpenSSL 是一个开源的、安全传输协议实现工具&#xff0c;广泛应用于数据加密与解密、证书生成与管理以及其他安全性相关的任务。在现代网络安全中&#xff0c;OpenSSL 被用于构建和维护 SSL/TLS 通信&#xff0c;确保数据在传输过程中的机密性和完整性。 简单来…

西圣和绿联电容笔哪款好用?西圣、绿联和uhb电容笔真实避坑测评!

现在市面上的平替电容笔种类非常多&#xff0c;在购买的时候大多数人都没有非常确定的目标&#xff0c;这主要是因为大多数人对电容笔的认识程度不够。 作为一个有着多年数码产品测评经验的测评员&#xff0c;我刚好对电容笔也有比较深刻的理解&#xff0c;也借着大家问我关于…

ASP.NET MVC-font awesome-localhost可用IIS不可用

环境&#xff1a; win10, .NET 6.0&#xff0c;IIS 问题描述 本地IIS正常显示&#xff0c;但放到远程服务器上&#xff0c;每个icon都显示?。同时浏览器的控制台报错&#xff1a; fontawesome-webfont.woff2:1 Failed to load resource: the server responded with a statu…

【网络协议栈】Tcp协议(上)结构的解析 和 Tcp中的滑动窗口(32位确认序号、32位序号、4位首部长度、6位标记位、16为窗口大小、16位紧急指针)

绪论​ “没有那么多天赋异禀&#xff0c;优秀的人总是努力翻山越岭。”本章主要讲到了再五层网络协议从上到下的第二层传输层中使用非常广泛的Tcp协议他的协议字段结构&#xff0c;通过这些字段去认识其Tcp协议运行的原理底层逻辑和基础。后面将会再写一篇Tcp到底是通过什么调…

java实现的音视频格式转化器

一、前言 最近写了一款图形界面版的音视频格式转化器&#xff0c;可以实现将多种视频之间进行转化&#xff0c;非常好用&#xff0c;如将AVI转换为&#xff0c;TS&#xff0c;FLV&#xff0c;MP4等。音频可将MP3转成WAV。 二、实现 1.需引入相关maven依赖。 <!-- 核心包 -…

群控系统服务端开发模式-应用开发-业务架构逻辑开发准备工作

安装与仓库已经调整完毕&#xff0c;现在开发业务架构逻辑&#xff0c;其次再开发功能逻辑。业务架构逻辑开发与功能逻辑开发不是一回事&#xff0c;一定要明白。业务架构指的是做某一件事或是某一种类型的事的逻辑&#xff0c;在互联网web应用中通常指一套系统的外在逻辑&…

知识见闻 - 磁力片原理

磁力片是一种利用磁性原理设计的玩具&#xff0c;它的工作原理和磁性方向的排列方式非常有趣。让我们深入了解一下磁力片的核心原理和磁性方向的特点。 磁力片的基本原理 磁力片的工作原理基于磁铁的基本特性。每个磁力片都包含多个小磁铁&#xff0c;这些磁铁被精心排列&#…

强化学习数学原理学习(一)

前言 总之开始学! 正文 先从一些concept开始吧,有一个脉络比较好 state 首先是就是状态和状态空间,显而易见,不多说了 action 同理,动作和动作空间 state transition 状态转换,不多说 policy 策略,不多说 reward 奖励,不多说 MDP(马尔科夫) 这里需要注意到就是这个是无…

小程序视频SDK解决方案,提供个性化开发和特效定制设计

美摄科技作为视频处理技术的领航者&#xff0c;深知在这一变革中&#xff0c;每一个细微的创新都能激发无限可能。因此&#xff0c;我们精心打造了一套小程序视频SDK解决方案&#xff0c;旨在满足不同行业、不同规模客户的多元化需求&#xff0c;携手共创视频内容的璀璨未来。 …

守护头顶安全——AI高空抛物监测,让悲剧不再重演

在城市的喧嚣中&#xff0c;我们享受着高楼林立带来的便捷与繁华&#xff0c;却往往忽视了那些隐藏在高空中的危险。近日&#xff0c;震惊全国的高空抛物死刑案件被最高院核准并执行。案件中被告人多次高空抛物的举动&#xff0c;夺去了无辜者的生命&#xff0c;也让自己付出了…

Leetcode11:盛水最多的容器

原题地址&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 题目描述&#xff1a; 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳…

Docker本地安装Minio对象存储

Docker本地安装Minio对象存储 1. 什么是 MinIO&#xff1f; MinIO 是一个开源的对象存储服务器。这意味着它允许你在互联网上存储大量数据&#xff0c;比如文件、图片、视频等&#xff0c;而不需要依赖传统的文件系统。MinIO 的特点在于它非常灵活、易于使用&#xff0c;同时…

Pr 视频效果:波形变形

视频效果/扭曲/波形变形 Distort/Wave Warp 波形变形 Wave Warp效果用于在剪辑上创建类似波浪的动态变形效果。 此效果会自动动画化&#xff0c;波形以恒定速度移动。要改变速度或停止波动&#xff0c;需要设置关键帧。 ◆ ◆ ◆ 效果选项说明 通过调整波形的类型、高度、宽度…

(六)问题记录,simulink仿真出现模型碰撞后穿越

明明已经设置了车轮和地面之间的 spatial contact force&#xff0c;可是还会出现模型穿越&#xff08;重力作用下自由落体&#xff09;&#xff0c;如下图所示。 可仅降低小车初始高度后就不会穿越&#xff0c;如下图所示。 初步怀疑是小车初始高度大的话&#xff0c;小车在和…

【原创】统信UOS如何安装最新版Node.js(20.x)

注意直接使用sudo apt install nodejs命令安装十有八九会预装10.x的老旧版本Node.js&#xff0c;如果已经安装的建议删除后安装如下方法重装。 在统信UOS系统中更新Node.js可以通过以下步骤进行&#xff1a; 1. 卸载当前版本的Node.js 首先&#xff0c;如果系统中已经安装了N…