NeRF: Representing Scenes asNeural Radiance Fields for View Synthesis 论文解读

news2024/11/13 10:35:14

目录

一、导言

二、NeRF

1、渲染和反渲染

2、NeRF的基本原理

3、采样点

4、位置编码

5、NeRF网络结构

6、体渲染

三、分层采样 

1、均匀采样

2、基于σ的采样

四、损失函数


一、导言

        该论文来自于ECCV2020,主要提到一种NeRF的方法来合成复杂场景下的新视角图像,通过将场景表示为连续的5D神经辐射场函数,通过输入5D坐标,输出场景中采样点的体密度和颜色信息,使用体渲染技术渲染出新的视角图像。

(1)提出了一种新的场景表示方法NeRF。

(2)通过使用位置编码来使得MLP理解更高频的函数

(3)采用分层采样来提高采样点的利用率,减少无用采样点的数量。

二、NeRF

1、渲染和反渲染

       渲染: 将三维信息(包括几何形状、材质属性、光源信息、相机参数),转变为特定视角下的二维图像。

        反渲染:通过大量二维图像推断出三维信息中的几何形状、材质属性、光源信息。这也是三维重建中的重要步骤。

        下图为NeRF工作的图示:(通过输入同一物体的大量图片,生成该物体的一个隐式神经辐射场NeRF来存储相关信息,并渲染出不同视角下的新2维图像,NeRF并不懂得物体的真实三维结构,也不能估计出物体各表面的真实三维坐标,貌似有一个技术叫表面重建可以做)

2、NeRF的基本原理

        NeRF通过已知视角的图片,提取采样点的位置和观测角度(x,y,z,\theta ,\phi)作为输入,并通过神经网络输出所对应一组采样点颜色和不透明度(R,G,B,\sigma),而三维模型的信息就隐式存储在了神经网络中,并且由于只能针对单一物体的图片作为输入,该神经网络(权重)就只能表示这个三维模型的信息。

        对于(\theta ,\phi)分别为摄像机的俯仰角和偏航角,来自于极坐标系。

        对于不透明度σ,或者叫做体密度,体密度与物体的材质有关,对于空气和物体的体密度一定是不同的,空气的不透明度几乎为0。

        在论文中定义不透明度为,体密度为射线在位置x处无限小粒子处终止的微分概率。

3、采样点

        从下图可以看到对于一张2维图像,经过一道光线(由人眼/相机发出的虚拟的射线,人眼视角)穿过整个物体,,按照一定的距离分段,可以得到若干采样点。

        这些采样点有些还没有经过物体,所以他的不透明度σ几乎为0,有些点刚好穿过物体表面此时不透明度σ最大,但理论上一道光线会穿过物体两次,一次在正面一次在背面,那么就会产生两个不透明度的波峰,但由NeRF模型合成不同人眼视角下的图片过程中,我们不应该把这两个波峰都进行渲染,因为人眼看不到背面,所以在后续计算中通过指数函数的方法,指考虑第一个波峰,而尽量忽略第二个即以后的波峰。

        采样点位置表示:\mathbf{r}(t)=\mathbf{o}+t\mathbf{d} ,其中\mathbf{o}代表光线初始点,也就是摄像机的位置,\mathbf{}\mathbf{d}就是每一段的距离,t代表第几个点。(其实就是个直线的参数方程)

4、位置编码

        从transformer的位置编码类比看其实都是一样的,通过将采样点的三维坐标进行正弦余弦编码得到不同维数(正弦余弦各一半)的位置编码,在网络中使用了20维和8维的位置编码。通过位置编码的方式可以有效增加采样点和图片像素间的高频信息。

        在实验中也对比了有无位置编码的效果,对于无位置编码情况下会出现模糊的效果。 

                      

5、NeRF网络结构

        对于NeRF网络如下:

        首先输入采样点位置,以及采样点位置三个坐标分别20维共60维的位置编码(总共63维通道)。

        经过连续的5层全连接层(输出均256),与输入进行残差相连(此时319维通道)。

        再经过3层全连接层(输出均256),分别经过一个全连接(输出为1)得到σ,另外残差连接观测角度(观测角度提前球坐标转变为三维)和8维采样点位置编码(共287维)经过两个全连接层最后输出三维RGB(第一个全连接输出128维,第二个全连接输出3维)。

        代码如下:

6、体渲染

        体渲染:视线r上所有的点投影到图像上形成像素颜色C的过程。

        理想情况下体渲染计算公式:

        其中,t_n,t_f分别表示光线的近端和远端。

        T(t) :不透光率,在光线距离方向,从近端到t方向对σ进行积分得到不透光率,通过指数函数衰减,可以保证尽量针对第一个波峰。

        c(\boldsymbol{\mathbf{}r}({t}),\boldsymbol{\mathbf{}d}):采样点的颜色与采样点位置\boldsymbol{r}(t)和观测角度\mathbf{d}有关。\mathbf{}

        \sigma(\boldsymbol{r}(t)):不透明度对于采样点位置\boldsymbol{r}(t)有关,对于观测角度无关。

        C(\boldsymbol{r}):理解为不透光率,透明度,采样点颜色的乘积在光线近端到远端的积分

        真实情况下的体渲染计算公式:(使用求和来替代积分)

三、分层采样 

1、均匀采样

        对于一般的粗网络均匀采样64个点的方法,由于物体一般是在聚集在光线穿过的中心,而不是均匀分布,所以存在大量的点位浪费和欠采样的问题。

2、基于σ的采样

        首先通过粗网络采样,并计算64个点的像素颜色。之后在光线方向计算颜色的加权和,权重为基于粗网络的σ下的分段常数概率密度,并进行归一化。最后通过逆变换采样,在这个概率密度上采样128个点,并带上之前的64个点,构成精细网络。

        其中权重w_i公式中的\delta_i表示两个采样点之间的距离t_{i+1}-t_{i}

四、损失函数

        损失函数有两个部分构成,粗网络下生成的像素对比和精细网络下的像素对比。对比函数使用L2 Loss。

 论文参考:https://arxiv.org/abs/2003.08934

 视频参考:NeRF原理进阶——体渲染概念_哔哩哔哩_bilibili

 代码参考:nerf-pytorch

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

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

相关文章

创建 AD9361 的 vivado 工程,纯FPGA配置,不使用ARM程序

前言 AD9361 的配置程序,如果使用官方的,就必须用ps进行配置,复杂不好使,如果直接使用FPGA配置,将会特别的简单。 配置软件 创建一份完整的寄存器配置表 //*******************************************************…

续:docker 仓库数据传输加密

上一个实验:非加密的形式在企业中是不被允许的。 示例:【为Registry 提供加密传输】 因为传输也是https,所以与ssh一样的加密。 ## 这种方式就不用写这个了。 [rootdocker ~]# cat /etc/docker/daemon.json #{ # "insecure-registrie…

GoodSync Business - 企业级服务器同步与备份工具

现在越来越多公司会搭建服务器,或自建文件共享中心。那么如何才能实现对这些终端的高效管理、安全备份,以保障企业数据的安全呢? GoodSync Business 就是一款企业服务器同步与备份工具,适用于 Win / Mac 工作站,以及 …

C语言程序设计

日落有个小商店&#xff0c;贩卖着橘黄色的温柔。 7.关系操作符 > > < < ! (用于测试“不相等”) &#xff08;用于测试“相等”&#xff0c;但是不是所有的对象都可以用该符号来比较相不相等&#xff09; eg. int main ( ) { if ("abc"&q…

【AI大模型】基于docker部署向量数据库Milvus和可视化工具Attu详解步骤

&#x1f680; 作者 &#xff1a;“大数据小禅” &#x1f680; 文章简介 &#xff1a;本专栏后续将持续更新大模型相关文章&#xff0c;从开发到微调到应用&#xff0c;需要下载好的模型包可私。 &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac; 目…

【王树森】Few-Shot Learning (2/3): Siamese Network 孪生网络(个人向笔记)

Learning Pairwise Similarity Scores Training Data 训练集有很多个类别的图片&#xff0c;每个类别的图片都有标注 Positive Sample&#xff1a;我们需要正样本来告诉神经网路什么东西是同一类 Negative Sample&#xff1a;负样本可以告诉神经网路事物之间的区别 我们用…

【笔记】数据结构04

文章目录 稀疏矩阵压缩存储三元组表示稀疏矩阵转三元组 栈的应用前缀表达式前缀表达式求值 中缀表达式后缀表达式 稀疏矩阵内容参考 强连通文章 稀疏矩阵压缩存储三元组表示 将非零元素所在的行、列以及它的值构成一个三元组&#xff08;i,j,v&#xff09;&#xff0c;然后再…

推荐 3 个好用的桌面管理工具,实用强大,不要错过

BitDock BitDock是一款运行在Windows系统中的桌面停靠栏工具&#xff0c;也被称为比特工具栏。这款软件模仿了Mac系统的Dock栏设计&#xff0c;旨在为用户提供一个简洁、高效且极具美感的桌面环境。BitDock不仅具有个性化的外观&#xff0c;还内置了多种实用功能&#xff0c;如…

Java后端 - 常见BUG及其处理策略(持续更新中~)

Bug 收集与总结 本文记录的是 本人SpringBoot 后端项目使用和运行代码时所遇到的各种问题&#xff0c;全部都已解决&#xff0c;欢迎在评论区补充你遇到的 Bug 哦&#xff01;仅以本文记录学习社区项目时&#xff0c;所遇到的奇奇怪怪的 bug&#xff0c;以及一些很愚蠢的错误&…

从马斯洛需求层次理论谈职场激励

马斯洛需求层次理论是一个广为人知的心理学概念&#xff0c;它是由美国心理学家亚伯拉罕马斯洛&#xff08;Abraham Maslow&#xff09;于1943年提出&#xff0c;常被描述为一个5层的金字塔模型&#xff0c;反映了人类不同需求层级和依赖关系。马斯洛认为人类只有在低层级需求得…

在 VS Code 中使用 Git 源代码管理【Mac 版】

文章目录 一、Git 使用文档二、使用示例1、复制远程仓库地址2、查看当前所在的分支2.1、界面查看2.2、终端查看 3、修改/新增文件4、显示增改的详细内容5、添加暂存区6、查看/取消暂存的更改7、提交本地代码库8、待提交文件9、推送到远程仓库10、验证11、查看推送记录11.1、关于…

六. 部署分类器-trt-engine-explorer

目录 前言0. 简述1. 案例运行2. 补充说明3. engine分析结语下载链接参考 前言 自动驾驶之心推出的 《CUDA与TensorRT部署实战课程》&#xff0c;链接。记录下个人学习笔记&#xff0c;仅供自己参考 本次课程我们来学习课程第六章—部署分类器&#xff0c;一起来学习 trt-engine…

Linux日志-secure日志

作者介绍&#xff1a;简历上没有一个精通的运维工程师。希望大家多多关注作者&#xff0c;下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 Linux进阶部分又分了很多小的部分,我们刚讲完了Linux基础软件&#xff0c;下面是Linux日志。Linux 系统中的日志是记录系统活…

18041 分期还款(加强版)

### 自查思路 1. 检查输入数据的处理是否正确。 2. 检查判断条件 p < d * r 是否正确。 3. 确认公式计算和输出格式是否正确。 ### 伪代码 1. 读取输入的贷款金额、每月还款额和月利率。 2. 判断是否可以还清贷款&#xff1a; - 如果每月还款额小于贷款金额乘以月利率&a…

深度学习与大模型第2课:机器学习实战

文章目录 深度学习与大模型第2课&#xff1a;机器学习实战1. Iris鸢尾花数据集分类1.1 数据预处理1.2 模型训练与评估 2. 美国加州房价预测2.1 数据预处理2.2 模型训练与调优 3. 房价数据的回归分析3.1 数据预处理与建模 4. 时尚衣物识别:MNIST 数据集分类4.1 数据读取与可视化…

跑Boundary-Aware Feature Propagation遇到的问题

跑Boundary-Aware Feature Propagation遇到的坑 1、运行不报错&#xff0c;也不显示结果 从train.py代码第一行import开始添加&#xff0c;print&#xff08;“check1”&#xff09;&#xff0c;发现问题torch.encoding无法导入&#xff0c;反复地参考github源代码https://gith…

Axure RP9安装教程(Pro版)

[Axure RP 9.0下载链接]: https://ga90eobypbb.feishu.cn/docx/WKvldvZkMoKPnIx3Yl2cJhOBnqe 1.找到下载好的安装包&#xff0c;右键解压到“Axure RP 9.0”文件夹 2.双击打开解压出来的文件夹&#xff0c;选中”AxureRP-安装程序.exe“右键以管理员身份运行 3.点击"Nex…

测试小白入门-03测试理论知识看这一篇就够了

文章目录 前言一、软件开发过程模型瀑布开发模型&#xff08;熟悉&#xff09;快速原型模型&#xff08;理解&#xff09;螺旋模型(了解) 二、测试模型测试V模型&#xff08;代表性&#xff09;测试W模型&#xff08;中大型企业&#xff09;测试H模型&#xff08;了解&#xff…

38集 ESP32 离线刷机教程

38集 ESP32 离线刷机教程 打开离线刷机工具 e:\technology\ESP32\esp32s3Qorvo\esp32-s3_rtc\ESP离线刷机\flash_download_tool_3.9.7_1\flash_download_tool_3.9.7\flash_download_tool_3.9.7.exe 设置如下&#xff1a; 要知道如何设置&#xff0c;需要知道esp32s3 工程的me…

【C++ Primer Plus习题】8.5

问题: 解答: #include <iostream> using namespace std;template <typename T> T max5(T arr[5]) {T max 0;for (int i 0; i < 5; i){if (arr[i] > max){max arr[i];}}return max; }int main() {int max 0;double max1 0.0;int a1[5] { 21,34,12,42,9…