神经辐射场 NeRF 相关公式推导

神经辐射场 NeRF 相关公式推导

Ciallo~(∠・ω< )⌒★ 我是赤川鹤鸣!
学习了 NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis 这篇论文后, 看到里面的一些公式, 思考着它们是怎么来的, 同时查询了很多资料和博客, 现在将它们的推导汇总起来.

论文中的相关概念

体积密度 σ(x) 可认为是光线终止于一个位于 x 处的无限小粒子的微分概率.

相机光线 r(t)=o+td 的期望颜色为 C(r), 其近界和远界分别为 tntf.

函数 T(t) 指的是光线从 tnt累计通透率, 即光线从 tn 传播到 t 而没有与任何其他粒子碰撞的概率.

累计通透率 T(t) 的公式推导

光线从 tnt+Δs 的累计通透率 T(t+Δs), 可以认为是光线传播到 t 时的累计通透率 T(n) 与光线在接下来的 Δs 的传播过程中撞不到任何粒子的累计概率的乘积.

不妨反过来思考, 光线在位置 t+Δs 时撞到粒子的概率是

思考概率密度函数和累计概率函数的差别, 我们这里类似于计算的是 P(τ=t+Δs).

σ(r(t+Δs))

在一个极小的 [t,t+Δs] 区间内, 对概率密度函数 σ 进行近似的积分

tt+Δsσ(r(t))dt=Δsσ(r(t+Δs))

思考概率密度函数和累计概率函数的差别, 我们这里类似于计算的是 P(tτt+Δs).

因此得到

T(t+Δs)=T(t)(1Δsσ(r(t+Δs)))

注意要用 1 减去, 因为我们要的是不碰撞的那一部分.

回想起导数的定义, 不妨求解 T(t) 的导数,

limΔs0T(t+Δs)T(t)Δt=limΔs0T(t)(1Δsσ(r(t+Δs)))T(t)Δs=limΔs0T(t)σ(r(t)+Δs)dTds=T(t)σ(r(t))

整理等式两侧

1T(t)dT=σ(r(t))ds

积分

tnt1T(t)dT=tntσ(r(t))ds

回想起log(x)的导数是1x,

logT(t)|tnt=tntσ(r(t))dslogT(t)T(tn)=tntσ(r(t))ds

两侧取指数, 则上式化为

T(t)T(tn)=exp(tntσ(r(t))ds)

T(tn)=1 因为 σ(r(tn))=0

T(t)=exp(tntσ(r(t))ds)

期望颜色 C(r) 的推导

C(r)=tntfT(t)σ(r(t))c(r(t),d)dt

我们可以直观地想象这个情景, 例如你在一个雾蒙蒙的天气看见一颗红色的苹果, 此时 T 就是在说来自苹果光线有多大的通透率(穿越迷雾)传到你的眼睛里. σ 说明了苹果表面上的某一个粒子有多大概率是正好是终结光线(光线不能穿透苹果本体)的那个粒子.

这个公式源自 Optical Models for Direct Volume Rendering.

黎曼和、定积分

离散化这个积分之前, 我们先要了解什么是黎曼和定积分.

黎曼和

设函数 f(x)[a,b] 上有定义, 在 [a,b] 上任意插入若干个分点

a=x0<x1<x2<xn=b

这些分点的集合 P=x0,x1,x2,,xn 称为 [a,b] 的一个划分.

划分 P 定义了 n 个子区间

[x0,x1],[x1,x2],,[xn1,xn]

它们的长度依次为

Δx1=x1x0,Δx2=x2x1,,Δxn=xnxn1

在每个子区间 [xk1,xk] 上任取选取一个数 ξk, 以 [xk1,xk] 为底, f(ξi) 为高构造矩形, 这些矩形的和

An=k=1nf(ξk)Δxk

称为函数 f 在区间 [a,b] 上的黎曼和.

定积分

设函数 f(x)[a,b] 上有定义, 对于 [a,b] 上的任意划分 P, ξk 为子区间 [xk1,xk] 上任意选取的数, 子区间 [xk1,xk] 的长度为 Δxk, 记

λ=max{Δx1,Δx2,...,Δxn}

实际上, λ 就是你所划分的那些块中最大长度的那块, 目的是令最大的那块趋近于无穷小.

如果下述极限存在

I=limλ0k=1nf(ξk)Δxk

则称被积函数 f(x) 在积分区间 [a,b] 可积 , a积分下限, b积分上限, If(x)[a,b] 上的定积分, x积分变量, 可以标记如下

I=abf(x)dx

期望颜色 C(r) 的积分离散化

下图是我自己做的, 有 svg 非位图版本, 若有需要请邮箱联系.

结合论文的内容, 以及上图, 积分区间为 [tn,tf], 将其划分为 N 个区间, 得到划分 P, 在这个划分 P 中, 第 i 个区间中任取一点 ti, 且满足

tiU[tn+i1N(tftn),tn+iN(tftn)], i=1, 2, 3,, N

这样第 i 个区间所对应的矩形记为 C^(r)i, 而根据期望颜色的公式可得

C(r)i=titi+1T(t)σ(r(t))c(r(t),d)dt

注意到, σc 与积分变量 t 有关, 又因为这段区间极小, 可以认为介质近似均匀, 所以

σ(r(t))=σi

c(r(t),d)=ci

视为常数, 由多层感知机给出结果.

然而 T(t) 与积分变量 ts 都有关, 无法忽略积分变量在积分区间内造成的影响, 不能视为常数.

进一步为什么不能将它近似视为Ti

T(t,s) 可视为二元函数, 对它积分就类比于求体积, 而 σ(t) 是一元函数, 对它积分类比于求面积, 我们不能把体积视为面积, 因为它们具有不同的维度.

因此, 代入并将常量提到积分号之前

C^(r)i=titi+1exp(tntσ(s)ds)σicidt=σicititi+1exp(tntσ(s)ds)dt

将嵌套的积分拆开得

C^(r)i=σicititi+1exp((tntiσ(s)ds+titσ(s)ds))dt=σicititi+1exp(tntiσ(s)ds)exp(titσ(s)ds)dt

不难发现, tntiσ(s)ds 中已经不存在积分变量 t, 因此根据之前的公式, 可记常量

Ti=exp(tntiσ(s)ds)=exp(j=1i1σj(tj+1tj))

而区间 [ti,t] 也是极小的, 故 titσ(s)ds 也可以视为长为 tti , 高为 σi 的矩形, 即

titσ(s)ds=σi(tti)

代入得

C^(r)i=σiciTititi+1exp(σi(tti))dt=σiciTieσi(tti)σi|titi+1=ciTi(1eσi(titii))

记第 i 个区间 [ti,ti+1] 的长度 δi=titii, 那么

C^(r)i=ciTi(1eσiδi)

将每个区间的 C^(r)i 加起来, 就得到了离散化的积分

C^(r)=i=1NC^(r)i

C^(r)=i=1NTi(1exp(σiδi))ci,whereTi=exp(j=1i1σjδj)

完毕.

【文献/资料引用】

posted @   赤川鹤鸣  阅读(222)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· Trae初体验
点击右上角即可分享
微信分享提示