论文笔记NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis
NeRF使用神经网络来表示场景。给定一个场景,输入该场景稀疏的视角图片,NeRF可以合成该场景新的视角的图片。

神经辐射场
神经辐射场(neural radiance field,NeRF)使用5D的向量值函数表示一个场景。
输入是连续的5D坐标(包括位置x=(x,y,z)\mathbf x = (x,y,z)x=(x,y,z)和视角方向d=(θ,ϕ)\mathbf d = (\theta, \phi)d=(θ,ϕ)),输出是发光颜色c=(r,g,b)\mathbf c = (r, g, b)c=(r,g,b)和体积密度σ\sigmaσ。
具体地,用一个全连接网络近似这个场景,也就是学习 FΘ:(x,d)→(c,σ)F_{\Theta}:(\mathbf x, \mathbf d) \rightarrow (\mathbf c, \sigma)FΘ:(x,d)→(c,σ)。
作者鼓励让体积密度只依赖于位置。所以网络结构是先输入位置x\mathbf xx,输出σ\sigmaσ和一个特征向量。之后将特征向量和视角方向拼接,最后映射到c\mathbf cc颜色。
注意不同的场景需要训练不同的NeRF。
位置编码
在将输入传递到网络之前,使用高频函数将输入映射到更高维空间可以更好地拟合包含高频变化的数据。类似Transformer,作者提出将x,d\mathbf x, \mathbf dx,d映射到高维空间中,再输入网络。
![]()
使用辐射场进行立体渲染
为了配合辐射场,作者采用立体渲染(volume rendering)方法渲染图像。
关于立体渲染可以参考 https://zhuanlan.zhihu.com/p/595117334
体积密度σ(x)\sigma(\mathbf x)σ(x)可以解释为光线在位置x\mathbf xx处终止于无穷小粒子的微分概率。
立体渲染中,相机光线r(t)=o+td\mathbf r(t) = \mathbf o + t\mathbf dr(t)=o+td在范围[tn,tf][t_n, t_f][tn,tf]的期望颜色C(r)C(\mathbf r)C(r)如下计算:
C(r)=∫tntfT(t)σ(r(t))c(r(t),d)dtwhereT(t)=exp(−∫tntσ(r(s))ds)C(\mathbf r) = \int_{t_n}^{t_f} T(t) \sigma(\mathbf r(t)) \mathbf c(\mathbf r(t), \mathbf d) dt \\ where~~ T(t) = \exp(-\int_{t_n}^t \sigma(\mathbf r(s))ds) C(r)=∫tntfT(t)σ(r(t))c(r(t),d)dtwhere T(t)=exp(−∫tntσ(r(s))ds)从连续的神经辐射场渲染一个视角,需要追踪所需虚拟相机的相机光线上的每个像素,来估计积分C(r)C(\mathbf r)C(r)。
上面公式的积分实际中用数值方法计算。如果固定在某些点采样计算积分,会限制表示的分辨率。为了解决这个问题,作者提出使用分层采样(stratified sampling)的方法。首先将[tn,tf][t_n, t_f][tn,tf]平分成N个大小一样的桶,然后在每个桶中采样一个样本:
ti∼U[tn+i−1N(tf−tn),tn+iN(tf−tn)]t_i \sim \mathcal U [t_n + \frac{i-1}{N}(t_f - t_n), t_n + \frac{i}{N}(t_f - t_n)] ti∼U[tn+Ni−1(tf−tn),tn+Ni(tf−tn)]虽然采样的样本还是离散的,但是优化过程是循环的,需要进行多次采样,每次采样可以采样到不同的位置,所以相当于在连续的位置优化。用采样的样本估计C(r)C(\mathbf r)C(r)的方法如下:
C^(r)=∑iNTi(1−exp(−σiδi))ciwhereTi=exp(−∑j=1i−1σjδj)\hat C(\mathbf r) = \sum_{i}^{N} T_i (1-\exp(-\sigma_i \delta_i)) \mathbf c_i \\ where~~ T_i = \exp(- \sum_{j=1}^{i-1} \sigma_j \delta_j) C^(r)=i∑NTi(1−exp(−σiδi))ciwhere Ti=exp(−j=1∑i−1σjδj)其中δi=ti+1−ti\delta_i = t_{i+1} - t_iδi=ti+1−ti。这个估计C(r)C(\mathbf r)C(r)的方法是可导的,所以可以方便的优化参数。
Hierarchical立体采样
如果沿每个相机光线的 N 个查询点密集地计算NeRF的值,这样的渲染策略是效率低下的,因为对渲染图像没有贡献的自由空间和遮挡区域会被重复采样。
为了解决这个问题,作者提出训练两个网络,一个是粗粒度(coarse)的,一个细粒度(fine)的。首先对粗粒度网络分层采样NcN_cNc个点,然后计算C^c(r)\hat{C}_c(\mathbf r)C^c(r)。
标准化w^i=wi∑jwj\hat{w}_i=\frac{w_i}{\sum_j w_j}w^i=∑jwjwi得到一个概率密度函数。根据这个分布,采样得到NfN_fNf个点。再使用细粒度网络计算这Nc+NfN_c + N_fNc+Nf个点的颜色C^f(r)\hat{C}_f(\mathbf r)C^f(r)。这样的方式可以对可见部分采样更多的点。
损失函数
损失函数是渲染像素和真实像素的平方误差:

其中R\mathcal RR是一个batch的光线集合。
在训练的每个循环中,从像素中随机采样一个batch的相机光线。
虽然最后渲染的图像由细粒度网络产生,但是粗粒度网络同样需要训练。
相关文章:
论文笔记NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis
NeRF使用神经网络来表示场景。给定一个场景,输入该场景稀疏的视角图片,NeRF可以合成该场景新的视角的图片。 神经辐射场 神经辐射场(neural radiance field,NeRF)使用5D的向量值函数表示一个场景。 输入是连续的5D坐…...
花3个月面过京东测开岗,拿个20K不过分吧?
背景介绍 计算机专业,代码能力一般,之前有过两段实习以及一个学校项目经历。第一份实习是大二暑期在深圳的一家互联网公司做前端开发,第二份实习由于大三暑假回国的时间比较短(小于两个月),于是找的实习是在…...
Leetcode DAY 35:柠檬水找零and根据身高重建队列 and用最少数量的箭引爆气球
860.柠檬水找零 class Solution { public:bool lemonadeChange(vector<int>& bills) {int five 0;int ten 0;for(int i 0; i < bills.size(); i) {if(bills[i] 5) {five;} else if(bills[i] 10) {ten;five--;if(five < 0){return false;}} else {if(ten …...
java-spring_bean实例化
bean是如何创建的实例化bean的三种方式构造方法静态工厂(了解)实例工厂与FactoryBean实例工厂FactoryBeanbean是如何创建的实例化bean的三种方式 构造方法 bean本质上就是对象,创建bean使用构造方法完成 提供可访问的构造方法 public clas…...
微信中如何接入机器人才比较安全(不会收到警告或者f号)之第三步正式接入
大家好,我是雄雄,欢迎关注微信公众号:雄雄的小课堂。 前言 前面两篇文章分别介绍了下chatgpt接入方式: 微信中如何接入chatgpt机器人才比较安全(不会收到警告或者f号)之第一步登录微信 微信中如何接入chatgpt机器人才比较安全(不会收到警告或者f号)之第二步注入dll文件…...
高通平台开发系列讲解(Sensor篇)IAM20680驱动程序的使用
文章目录 一、相关编译宏二、设备树配置三、打开iio自动挂载脚本四、模块加载验证沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇文章将介绍 IAM20680 驱动程序。 一、相关编译宏 目录:arch/arm/configs CONFIG_IIO_BUFFER=y CONFIG_IIO_KFIFO_BUF=y CONFIG_II…...
【VictoriaMetrics】VictoriaMetrics集群伪分布式部署(二进制版)
VictoriaMetrics支持单机版以及集群版部署,通常情况下,官方建议使用单节点版本,而不是集群版本,如果摄取速率低于每秒一百万个数据点,单节点版本可以完美地扩展CPU内核、RAM和可用存储空间的数量。与集群版本相比,单节点版本更容易配置和操作,因此在选择集群版本之前要三…...
华为手表开发:WATCH 3 Pro(7)获取电量信息
华为手表开发:WATCH 3 Pro(7)获取电量信息初环境与设备文件夹:文件新增第二页面showBatteryInfo.hmlshowBatteryInfo.js修改首页 -> 新建按钮 “ 跳转 ”index.hmlindex.js 引用包:system.router首页效果点击结果初…...
【数据结构】动态顺序表的接口实现(附图解和源码)
动态顺序表的接口实现(附图解和源码) 文章目录动态顺序表的接口实现(附图解和源码)前言一、定义结构体二、每一个接口的实现原理(附图解)1.初始化顺序表2.增容顺序表3.尾插数据4.删除顺序表信息(…...
L2-003 月饼
月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼。现给定所有种类月饼的库存量、总售价、以及市场的最大需求量,请你计算可以获得的最大收益是多少。 注意:销售时允许取出一部分库存。样例给出的情形是这样的&#…...
volatile不等于原子操作
volatile作用 确保数据每次都从源头读取,即每次都从内存中读取,不从缓存中读取。 这样做的目的是确保不会被优化 int i 0;int main(int argc, char **argv) {const char *str;if (i 0) {str "hello";} else {str "world";}ret…...
每天10个前端小知识 【Day 15】
👩 个人主页:不爱吃糖的程序媛 🙋♂️ 作者简介:前端领域新星创作者、CSDN内容合伙人,专注于前端各领域技术,成长的路上共同学习共同进步,一起加油呀! ✨系列专栏:前端…...
异构数据库同步方案
目录 1 概述 2 原理 3 参数 1 概述 将企业生产系统产生的业务数据实时同步到大数据平台,通过对业务数据的联机实时分析,快速制定或调整商业计划,提升企业的核心竞争力。 依据同步数据是否需要加工处理,采用不同的技术方案&am…...
MySQL-系统信息函数
获取 MySQL 版本号的函数VERSION()例:返回当前mysql版本信息mysql> select version(); ----------- | version() | ----------- | 5.7.40 | ----------- 1 row in set (0.01 sec)查看当前用户的连接数的ID函数CONNECTION_ID()例1:查看当前用户连接…...
Windows环境下使用Pycharm运行sh文件
博主在调试一些程序时,时常遇到 .sh文件,这是Linux中的shell脚本文件,那么这种文件在windows下如何运行呢,其实我们可以通过git来实现,接下来看我操作。 首先我们需要安装Git,关于其安装过程可以参考博主这…...
Flutter启动流程浅析
一,Mixins1,定义:Mixins 是一种在多个类层次结构中重用类代码的方法。个人理解:就是一个类,这个类有一些方法,其他类可以在不继承这个类的情况下使用这个类的方法。2,几个关键词(1&a…...
004:NumPy的应⽤-2
数组的运算 使⽤NumPy 最为⽅便的是当需要对数组元素进⾏运算时,不⽤编写循环代码遍历每个元素,所有的运算都会⾃动的⽮量化(使⽤⾼效的、提前编译的底层代码来对数据序列进⾏数学操作)。简单的说就是,NumPy 中的数学运…...
一文了解JAVA中同步、异步、阻塞和非阻塞
🏆今日学习目标: 🍀JAVA中同步、异步、阻塞和非阻塞 ✅创作者:林在闪闪发光 ⏰预计时间:30分钟 🎉个人主页:林在闪闪发光的个人主页 🍁林在闪闪发光的个人社区,欢迎你的加…...
查询股票交易日接口可以用C++实现查询当日成交吗?
用查询股票交易日接口可以自行查询各大交易网站或交易所的股票历史数据及行情数据,也可以用它 查询当日成交数据! 接下来小编就来分享一下用C实现查询当日成交代码: std::cout << " 查询当日成交: category 3 \n"; categ…...
java中常见的json库以及对应的用法
一、常见的json库 1、Jackson: Jackson是一个高性能、灵活性强的JSON库,提供了丰富的API,支持JSON和XML的数据解析和生成。它支持对Java对象进行序列化和反序列化,可以处理复杂的JSON格式数据。 导入的依赖 https://mvnrepository.com/ &…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...
Java 语言特性(面试系列1)
一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...
【2025年】解决Burpsuite抓不到https包的问题
环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...
佰力博科技与您探讨热释电测量的几种方法
热释电的测量主要涉及热释电系数的测定,这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中,积分电荷法最为常用,其原理是通过测量在电容器上积累的热释电电荷,从而确定热释电系数…...
Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
python爬虫——气象数据爬取
一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用: 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests:发送 …...
DBLP数据库是什么?
DBLP(Digital Bibliography & Library Project)Computer Science Bibliography是全球著名的计算机科学出版物的开放书目数据库。DBLP所收录的期刊和会议论文质量较高,数据库文献更新速度很快,很好地反映了国际计算机科学学术研…...
Qt的学习(一)
1.什么是Qt Qt特指用来进行桌面应用开发(电脑上写的程序)涉及到的一套技术Qt无法开发网页前端,也不能开发移动应用。 客户端开发的重要任务:编写和用户交互的界面。一般来说和用户交互的界面,有两种典型风格&…...
