神经辐射场(Neural Radiance Field,NeRF)的简单介绍

news2024/12/26 23:26:01

参考文章:https://arxiv.org/abs/2210.00379

1. 概述

  神经辐射场(NeRF)模型是一种新视图合成方法,它使用体积网格渲染,通过MLP进行隐式神经场景表达,以学习3D场景的几何和照明。
  应用:照片编辑、3D表明提取、人体建模、3D表达和视图合成等。
  特点:模型自监督。对于一个场景,只需要多视图图像及其姿态,而无需3D或深度监督。

2. NeRF模型

  NeRF模型将3D场景表达为用神经网络表示的辐射场。辐射场描述了各点在各视角下的颜色密度。即 F ( x , θ , ϕ ) → ( c , σ ) F(x,\theta,\phi)\rightarrow(c,\sigma) F(x,θ,ϕ)(c,σ)其中 x x x为点的3D坐标, ( θ , ϕ ) (\theta,\phi) (θ,ϕ)为视线的水平角与俯仰角, c c c表示颜色, σ \sigma σ表示体积网格密度。该函数使用MLP(记为 F Θ F_\Theta FΘ)进行近似。 ( θ , ϕ ) (\theta,\phi) (θ,ϕ)也可表达为3维的单位方向向量 d d d
  该表达需要满足多视图一致性,即 σ \sigma σ(场景的内容)与视角无关,而 c c c与坐标和视角均相关。通常来说,会设计两个MLP,第一个MLP输入 x x x,输出 σ \sigma σ与高维特征向量 h h h σ , h = σ-MLP ( x ) \sigma,h=\text{σ-MLP}(x) σ,h=σ-MLP(x)高维特征向量 h h h与视线方向 d d d拼接后输入第二个MLP得到 c c c c = c-MLP ( [ h ; d ] ) c=\text{c-MLP}([h;d]) c=c-MLP([h;d])由于密度和颜色都完全被MLP表达,因此这种方法被称为隐式场景表达

3. 新视图合成

在这里插入图片描述

  1. 对于待合成图像的每个像素,使用相机射线穿过场景并生成采样点(上图(a))。
  2. 对每个采样点,使用射线方向和采样位置,输入NeRF MLP计算局部颜色与密度(上图(a)与(b)之间的连接处)。
  3. 使用体积网格渲染,从采样点的色彩和密度生成图像。

4. 体积网格渲染

  设相机射线为 r ( t ) = o + t d r(t)=o+td r(t)=o+td,其中 o o o为相机位置, d d d为射线方向。则可按下式得到色彩 C ( r ) C(r) C(r) C ( r ) = ∫ t 1 t 2 T ( t ) ⋅ σ ( r ( t ) ) ⋅ c ( r ( t ) , d ) ⋅ d t C(r)=\int_{t_1}^{t_2}T(t)\cdot\sigma(r(t))\cdot c(r(t),d)\cdot dt C(r)=t1t2T(t)σ(r(t))c(r(t),d)dt其中 σ ( r ( t ) ) \sigma(r(t)) σ(r(t)) c ( r ( t ) , d ) c(r(t),d) c(r(t),d)为射线 r ( t ) r(t) r(t)处的体积网格密度和颜色。
   T ( t ) T(t) T(t)为累积透明度,表示射线从 t 1 t_1 t1 t t t不被拦截的概率: T ( t ) = exp ⁡ ( − ∫ t 1 t σ ( r ( u ) ) ⋅ d u ) T(t)=\exp\left(-\int_{t_1}^t\sigma(r(u))\cdot du\right) T(t)=exp(t1tσ(r(u))du)  通过追踪待合成图像的像素对应的相机射线,可计算积分。但是通常会通过分层抽样法来计算其近似值。具体来说,射线会被分为等长的 N N N段,然后在各段内均匀抽样一个点,并用求和近似上面的积分: C ^ ( r ) = ∑ i = 1 N α i T i c i , 其中 T i = exp ⁡ ( − ∑ j = 1 i − 1 σ j δ j ) \hat{C}(r)=\sum_{i=1}^N\alpha_iT_ic_i,其中T_i=\exp\left(-\sum_{j=1}^{i-1}\sigma_j\delta_j\right) C^(r)=i=1NαiTici,其中Ti=exp(j=1i1σjδj)其中 δ i \delta_i δi为采样点 i i i i + 1 i+1 i+1的距离; ( σ i , c i ) (\sigma_i,c_i) (σi,ci)为射线上采样点 i i i的密度和颜色(使用NeRF MLP计算)。 α i \alpha_i αi为采样点 i i i处alpha合成的透明度/不透明度: α i = 1 − exp ⁡ ( σ i δ i ) \alpha_i=1-\exp(\sigma_i\delta_i) αi=1exp(σiδi)

5. 期望深度计算

  期望的深度可使用积累透明度沿射线计算: d ( r ) = ∫ t 1 t 2 T ( t ) ⋅ σ ( r ( t ) ) ⋅ t ⋅ d t d(r)=\int_{t_1}^{t_2}T(t)\cdot\sigma(r(t))\cdot t\cdot dt d(r)=t1t2T(t)σ(r(t))tdt上式同样可使用求和近似: D ^ ( r ) = ∑ i = 1 N α i t i T i \hat{D}(r)=\sum_{i=1}^N\alpha_it_iT_i D^(r)=i=1NαitiTi某些深度正则化方法会使用期望深度将密度限制为类似(在场景表面取峰值的)delta函数的形式,或是保证深度的平滑性。

6. 损失函数

  对每个像素,考虑其平方误差光度损失,以优化MLP参数。总损失为: L = ∑ r ∈ R ∥ C ^ ( r ) − C g t ( r ) ∥ 2 2 L=\sum_{r\in R}\|\hat{C}(r)-C_{gt}(r)\|_2^2 L=rRC^(r)Cgt(r)22其中 C g t ( r ) C_{gt}(r) Cgt(r)是与射线 r r r关联像素的真实颜色, R R R是待合成图像的相机射线集合。

7. 位置编码

  NeRF模型通常会使用位置编码,因其有利于渲染图像的细节重建。原始的位置编码 γ \gamma γ是在点 x x x的坐标(归一化到 [ − 1 , 1 ] [-1,1] [1,1])以及射线单位方向向量 d d d的每个分量 v v v上进行的: γ ( v ) = ( sin ⁡ ( 2 0 π v ) , cos ⁡ ( 2 0 π v ) , sin ⁡ ( 2 1 π v ) , cos ⁡ ( 2 1 π v ) , ⋯   , sin ⁡ ( 2 N − 1 π v ) , cos ⁡ ( 2 N − 1 π v ) ) \gamma(v)=(\sin(2^0\pi v),\cos(2^0\pi v),\sin(2^1\pi v),\cos(2^1\pi v),\cdots,\sin(2^{N-1}\pi v),\cos(2^{N-1}\pi v)) γ(v)=(sin(20πv),cos(20πv),sin(21πv),cos(21πv),,sin(2N1πv),cos(2N1πv))其中 N N N为用户定义的维度参数。

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

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

相关文章

浅谈双指针算法

目录 算法概述 案例分析 1、删除有序数组中的重复项 2、环形链表 3、盛最多水的容器 4、有效三角形的个数 5、三数之和 6、1089. 复写零 内容总结 算法概述 双指针指的是在遍历元素的过程中,不是使用单个指针进行访问,而是使用两个指针进行访问…

Linux启动过程详解 Xmind导图笔记

参考大佬博客: 简要描述linux系统从开机到登陆界面的启动过程 Linux启动过程详解 Bootloader详解 来源:从BIOS开始画图了解Linux启动过程——老杨Linux

WBS字典解释和举例

定义 WBS词典通常包括:编码、工作包描述(内容)、成本预算、时间安排、质量标准或要求、责任人或部门或外部单位(委托项目)、资源配置情况、其他属性等。 实例

Qt5开发及实例V2.0-第十五章-Qt单元测试框架

Qt5开发及实例V2.0-第十五章-Qt单元测试框架 第15章 Qt 5单元测试框架15.1 QTestLib框架15.2 简单的Qt单元测试15.3 数据驱动测试15.4 简单性能测试 本章相关例程源码下载1.Qt5开发及实例_CH1501.rar 下载2.Qt5开发及实例_CH1502.rar 下载3.Qt5开发及实例_CH1503.rar 下载4.Qt5…

【李宏毅 | 深度学习】自注意力机制(Self-attention)

这里写目录标题 引言Sequence LabelingSelf-attention矩阵乘法Muti-head Self-attention(多头注意力机制) 引言 以往我们遇到的深度学习问题中,对于神经网络的输入一般都是一个向量,输出可能是一个类别。如果增加输入的复杂度&am…

基于open CV实现YOLOv3复现_预测阶段和后处理阶段

基于open CV实现YOLOv3复现_预测阶段和后处理阶段 1.导入所需的库:2.对输入的图像进行resize3.将图像输入yolov3的网络中进行预测,对三个特征层进行解码。4.非极大值抑制来去除多余的预测框完整代码 当训练好了模型后,用训练好的权重文件进行…

tftpd文件传输工具的学习记录

1.目的:在SOC板上的linux系统和本地电脑的windows系统进行文件的传输。 2.在windows中安装tftp服务器,其下载的文件如下: 链接: https://pan.baidu.com/s/1YN5WxcjqCJLHTtjhUtKbjg 提取码: 3cg9 3.打开软件,在当前目录下选择windows传输的…

TCP协议中常见的问题

文章目录 TCP协议中常见的问题谈一谈对OSI七层模型和TCP/IP四层模型的理解?谈谈TCP协议的3次握手过程?TCP协议为什么要3次握手?2次,4次不行吗?谈谈TCP协议的四次挥手过程?什么是流量控制?什么是…

报错处理:Error: Redis server is running but Redis CLI cannot connect

嗨,读者朋友们!今天我来跟大家分享一个我在运维过程中遇到的一个关于Linux上运行Redis服务时的报错及解决方法。 报错信息如下: Error: Redis server is running but Redis CLI cannot connect 这个报错信息表明Redis服务器已经运行&#xff…

stm32之GPIO库函数点灯分析

stm32官方为了方便开发者,利用CubeMX 生成HAL库有关的C代码。HAL库就是硬件抽象层(hardware abstraction layer),生成一系列的函数帮助我们快速生成工程,脱离复杂的寄存器配置。stm32相对于51来功能强大,但是寄存器的数量也不是一…

动手吧,vue数字动画

数字动画&#xff0c;有数字的地方都能用上&#xff0c;拿去吧&#xff01; 效果&#xff1a; 1、template部分 <template><div class"v-count-up">{{ dispVlaue }}</div> </template> 2、js部分 export default {data() {return {timer…

版本动态 | SolidUI 0.3.0 版本发布

文章目录 背景发版清单功能部署 示例html生成模型选择数据源 详细指引贡献者如何成为贡献者 背景 随着文本生成图像的语言模型兴起&#xff0c;SolidUI想帮人们快速构建可视化工具&#xff0c;可视化内容包括2D,3D,3D场景&#xff0c;从而快速构三维数据演示场景。SolidUI 是一…

摄像头工程师说 Camera - 数据格式 RAW、RGB(1)

Camera - 数据格式 RAW、RGB Camera 数据格式-RAW、RGB从摄像头工作的基本原理说起回归本质-图像色彩的几种表示方法RGB 三原色RAW RGB 格式诞生RAW8 VS RAW10真彩色-RGB888、BGR888 格式的引入数据量小点的 RGB 格式-RGB565、RGB555用位数表示的 RGB 格式RGB24&#xff1a;RGB…

iOS17.0.2更新修复iPhone 15系列机型数据迁移问题,附新机快速数据迁移办法!

iPhone 15 系列机型已于今日正式发售&#xff0c;为解决iPhone15这些机型出现的数据迁移问题&#xff0c;苹果紧急发布了 iOS 17.0.2 更新&#xff0c;内部版本号为 21A350。 需要注意的是&#xff0c; iOS 17.0.2 更新仅适用于 iPhone 15、iPhone 15 Plus、iPhone 15 Pro 和 …

HTML5福利篇--使用Canvas画图

目录 一.Canvas元素 1.Canvas元素定义 2.使用JavaScript获取页面中的Canvas对象 二.绘制图形 1.绘制直线 2.绘制矩形 &#xff08;1&#xff09;rect() &#xff08;2&#xff09;strokeRect() &#xff08;3&#xff09;fillRect()和clearRect()函数 3.绘制圆弧 4.…

华为云云耀云服务器L实例评测 | 基于minikube搭建单节点kubernetes集群

目录 1 安装Docker2 conntrack-tools3 安装minikube4 下载二进制&#xff1a;kubeadm、kubectl、kubelet5 准备镜像6 启动minikube7 简单测试 ​ Minikube 是一个使用golang开发的单节点kubernetes集群环境&#xff0c;在资源紧张的情况下&#xff0c;可以用于快速搭建kubernet…

项目进展(一)-晶振正常输出、焊接驱动芯片、查找芯片手册并学习

今天的主要工作集中在博士师兄的项目上&#xff0c;效率偏低&#xff0c;主要是一中午的时间都卡在晶振上。在焊接完芯片和晶振之后&#xff0c;测试晶振输出引脚无输出&#xff0c;所以就开始找各种博客&#xff0c;寻找晶振不起振的原因&#xff0c;在下面两篇文章中找到了答…

基于骨架的动作识别:SkeleTR: Towrads Skeleton-based Action Recognition in the Wild

论文作者&#xff1a;Haodong Duan,Mingze Xu,Bing Shuai,Davide Modolo,Zhuowen Tu,Joseph Tighe,Alessandro Bergamo 作者单位&#xff1a;The Chinese University of Hong Kong; AWS AI Labs. 论文链接&#xff1a;http://arxiv.org/abs/2309.11445v1 内容简介&#xff1…

JavaScript+canvas实现粒子动画效果

1.HTML部分 <!DOCTYPE html> <html lang"zh"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>粒子效果</title><style&g…

OpenAI官方吴达恩《ChatGPT Prompt Engineering 提示词工程师》(7)聊天机器人 / ChatBot

聊天机器人 / ChatBot 使用大型语言模型来构建你的自定义聊天机器人 在本视频中&#xff0c;你将学习使用OpenAI ChatCompletions格式的组件构建一个机器人。 环境准备 首先&#xff0c;我们将像往常一样设置OpenAI Python包。 import os import openai from dotenv import…