[DL] NeRF 核心思想简记
NeRF 核心思想简记
Overview
- 输入:空间中的位置 x,相机的方向 d
- 输出:x 位置的颜色和体密度
- 映射:,c是颜色,是网络的参数。
这个输出不是最终像素的颜色,而是空间中一点的颜色和密度,还需要用体渲染的算法将颜色混合,才能得到最终的像素颜色。
网络结构
很简单,x 经过一定层数的 MLP,输出一个特征向量和 ,然后将特征向量和相机方向向量拼接,进入MLP,输出颜色c,(c, ) 作为网络最终的输出。
体渲染
常见的体渲染的方法,网络的输出只是解决了空间一点的密度和颜色问题,还需要对他们进行累加。这里只截取了论文的离散后的公式,分别讨论一下符号的意义。
- 表示密度,密度越大代表当射线遍历到这里的时候,被阻挡的概率越大,所以后面的颜色可能就看不见了,也能理解为不透光率。
- 累计的透光率,从j出发一直累计到i-1,计算出i点之前的透光率,这个值越大,代表能看到此点颜色概率越大。其实和密度意思差不都,只是这里用exp做了变换,将其压缩在0-1之间,而且表示是不透光率,这里取个反。
- 是当前点的颜色。
- ,代表沿着观察射线取一点空间位置
- 代表差分,两次采样的距离
- 所以前面的式子表示 “当前点之前的透光率 X 当前点的不透光率 X 当前的颜色”。为什么是当前的不透光率?因为如果当前的不透光率越大,代表射线大概率会终止在这个地方,所以此点的颜色应该贡献也越大。所以之前的系数,相当于这个点对最终像素颜色值得贡献。
如何将连续空间的体渲染离散?
体渲染可以选定固定的步长,例如可以选择固定的数值例如0.001,但是这会损失多样性,因为场景是连续,因为可能恰好细节被跨过了。 文中采用的分层抽样的方法。
从到划分成个区间,然后每次从这个个区间均匀采样,得到采样点。
优化
位置编码
直接将位置和方向信息输入网络,根据论文里描述会降低生成的质量,因此将低维的输出编码到高维空间。
其中是位置信息,用这个函数进行编码,位置和方向在论文中都进行了编码,详细的参数可以参考论文。
层次化采样
有些地方可能被遮挡或者是空的空间,因此可以不采样那么多点,而是在细节丰富的地方进行采样。基于此,论文中提出了训练两个网络,一个是coarse一个是fine,粗网络选择个分段采样,正常利用体渲染混合公式输出颜色。得到一个射线上所有点的贡献值后,进行归一化,做成一个PDF,然后fine网络在进行采样的时候,用这个PDF采样,这样就会在细节丰富的地方多采样,而且采样点也多 。他们的联合采样点混合成最终的颜色。
损失函数
MSE作为损失,其中coarse和fine输出的颜色和GT进行比较来监督,coarse参与损失是为了让PDF更准确。
参考
- NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis
- FastNeRF: High-Fidelity Neural Rendering at 200FPS
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了