Mip-NeRF: A Multiscale Representation for Anti-Aliasing Neural Radiance Fields
传统神经辐射场(Neural Radiance Field,NeRF)对图像中的每一个像素发射一条光线,在该光线上取若干采样点对场景进行采样。它的弱点在于训练和推导应当尽可能在同一分辨率下,否则会产生模糊(近距离)、混叠(远距离),造成准确率下降。为了解决这个问题,一个直接的想法是增加每个像素发射的光线数量,然而每条光线的渲染都需要查询 MLP 数百次,这种超采样方式的开销是不可接受的。
Mip-NeRF 的做法是用视锥取代光线,借用 CG 中 Mipmap 的概念,利用一些预处理得到的 Mipmap,从而能够更好地还原不同分辨率下的场景。这些 Mipmap 也是由 MLP 学习得到的特征,由于暗含了分辨率参数(事实上,即 ttt),Mip-NeRF 只需要一个统一的 MLP 即可表达场景,而不用像传统 NeRF 那样分粗、细粒度两个。
区别于 NeRF 采样空间中无限小的点,Mip-NeRF 采样的是具有形状和大小、对尺度敏感的视锥。对位置向量 x\bold xx 参数化:
术语 | 含义 |
---|---|
图像平面(t=1t=1t=1) | o+d{\bold o}+{\bold d}o+d |
图像平面视锥半径 (像素宽度的 2/122/\sqrt{12}2/12 倍) | r˙{\dot r}r˙ |
视锥范围(近点、远点) | [t0,t1][t_0,t_1][t0,t1] |
F(x,o,d,r˙,t0,t1)=1{(t0<dT(x−o)∥d∥22<t1)∧(dT(x−o)∥d∥2∥x−o∥2>11+(r˙/∥d∥2)2)}
{\rm F}({\bold x},{\bold o},{\bold d},{\dot r},t_0,t_1)=1\left\{\left(t_0<\frac{{\bold d}^{\rm T}({\bold x}-{\bold o})}{\|{\bold d}\|_2^2}<t_1\right)\land\left(\frac{{\bold d}^{\rm T}({\bold x}-{\bold o})}{\|{\bold d}\|_2\|{\bold x}-{\bold o}\|_2}>\frac{1}{\sqrt{1+\left({\dot r}/{\|{\bold d}\|_2}\right)^2}}\right)\right\}
F(x,o,d,r˙,t0,t1)=1⎩⎨⎧(t0<∥d∥22dT(x−o)<t1)∧∥d∥2∥x−o∥2dT(x−o)>1+(r˙/∥d∥2)21⎭⎬⎫用 tanθ˙=r˙∥d∥2\tan{\dot\theta}=\dfrac{\dot r}{\|{\bold d}\|_2}tanθ˙=∥d∥2r˙ 表示视锥在图像平面的半张角,上式改写为:
F(x,o,d,r˙,t0,t1)=1{(t0<dT(x−o)∥d∥22<t1)∧(dT(x−o)∥d∥2∥x−o∥2>cosθ˙)}
{\rm F}({\bold x},{\bold o},{\bold d},{\dot r},t_0,t_1)=1\left\{\left(t_0<\frac{{\bold d}^{\rm T}({\bold x}-{\bold o})}{\|{\bold d}\|_2^2}<t_1\right)\land\left(\frac{{\bold d}^{\rm T}({\bold x}-{\bold o})}{\|{\bold d}\|_2\|{\bold x}-{\bold o}\|_2}>\cos{\dot\theta}\right)\right\}
F(x,o,d,r˙,t0,t1)=1{(t0<∥d∥22dT(x−o)<t1)∧(∥d∥2∥x−o∥2dT(x−o)>cosθ˙)}当且仅当 F(x,⋅)=1{\rm F}({\bold x},\cdot)=1F(x,⋅)=1 时 x\bold xx 在视锥内部。此时位置编码更正为积分位置编码(Integral Positional Encoding,IPE)的期望:
γ∗(o,d,r˙,t0,t1)=∫γ(x)F(x,o,d,r˙,t0,t1)dx∫F(x,o,d,r˙,t0,t1)dx
\gamma^*({\bold o},{\bold d},{\dot r},t_0,t_1)=\frac{\displaystyle\int{\gamma({\bold x}){\rm F}({\bold x},{\bold o},{\bold d},{\dot r},t_0,t_1){\rm d}{\bold x}}}{\displaystyle\int{{\rm F}({\bold x},{\bold o},{\bold d},{\dot r},t_0,t_1){\rm d}{\bold x}}}
γ∗(o,d,r˙,t0,t1)=∫F(x,o,d,r˙,t0,t1)dx∫γ(x)F(x,o,d,r˙,t0,t1)dx上述积分的分子部分没有精确解,Mip-NeRF 使用多元高斯近似(假设视锥沿射线对称)。
术语 | 含义 |
---|---|
射线方向距离均值 | μt\mu_tμt |
射线方向距离方差 | σt2\sigma_t^2σt2 |
垂轴方向距离方差 | σr2\sigma_r^2σr2 |
对位置向量进行坐标变换:
{x=r′cosθy=r′sinθz=t,1r˙=tr′⟹r′=r˙t
\begin{cases}
x=r'\cos\theta\\
y=r'\sin\theta\\
z=t
\end{cases},\quad
\frac{1}{{\dot r}}=\frac{t}{r'}\Longrightarrow r'={\dot r}t
⎩⎨⎧x=r′cosθy=r′sinθz=t,r˙1=r′t⟹r′=r˙tx=φ(r,t,θ)=(rtcosθ,rtsinθ,t),θ∈[0,2π),t≥0,∣r∣≤r˙
{\bold x}=\varphi(r,t,\theta)=(rt\cos\theta,rt\sin\theta,t),\theta\in[0,2\pi),t\ge0,|r|\le{\dot r}
x=φ(r,t,θ)=(rtcosθ,rtsinθ,t),θ∈[0,2π),t≥0,∣r∣≤r˙微元:
dxdydz=∣detDφ(r,t,θ)∣drdtdθ=∣∂x∂r∂x∂t∂x∂θ∂y∂r∂y∂t∂y∂θ∂z∂r∂z∂t∂z∂θ∣drdtdθ=∣tcosθrcosθ−rtsinθtsinθrsinθrtcosθ010∣drdtdθ=−(rt2cos2θ+rt2sin2θ)drdtdθ=−rt2drdtdθ
\begin{align}
{\rm d}x{\rm d}y{\rm d}z
&=|\det{D\varphi}(r,t,\theta)|{\rm d}r{\rm d}t{\rm d}\theta\\
&=\begin{vmatrix}
\dfrac{\partial x}{\partial r} & \dfrac{\partial x}{\partial t} & \dfrac{\partial x}{\partial\theta}\\
\dfrac{\partial y}{\partial r} & \dfrac{\partial y}{\partial t} & \dfrac{\partial y}{\partial\theta}\\
\dfrac{\partial z}{\partial r} & \dfrac{\partial z}{\partial t} & \dfrac{\partial z}{\partial\theta}
\end{vmatrix}{\rm d}r{\rm d}t{\rm d}\theta\\
&=\begin{vmatrix}
t\cos\theta & r\cos\theta & -rt\sin\theta\\
t\sin\theta & r\sin\theta & rt\cos\theta\\
0 & 1 & 0
\end{vmatrix}{\rm d}r{\rm d}t{\rm d}\theta\\
&=-(rt^2\cos^2\theta+rt^2\sin^2\theta){\rm d}r{\rm d}t{\rm d}\theta\\
&=-rt^2{\rm d}r{\rm d}t{\rm d}\theta
\end{align}
dxdydz=∣detDφ(r,t,θ)∣drdtdθ=∂r∂x∂r∂y∂r∂z∂t∂x∂t∂y∂t∂z∂θ∂x∂θ∂y∂θ∂zdrdtdθ=tcosθtsinθ0rcosθrsinθ1−rtsinθrtcosθ0drdtdθ=−(rt2cos2θ+rt2sin2θ)drdtdθ=−rt2drdtdθ体积:
V=∭0≤θ<2πt≥0∣r∣≤r˙∣dxdydz∣=∫02πdθ∫t0t1t2dt∫0r˙rdr=2π⋅t13−t033⋅r˙22=π3(t13−t03)r˙2
\begin{align}V&=\iiint\limits_{\begin{aligned}0\le&\theta<2\pi\\&t\ge0\\|&r|\le{\dot r}\end{aligned}}{|{\rm d}x{\rm d}y{\rm d}z|}\\
&=\int_0^{2\pi}{{\rm d}\theta}\int_{t_0}^{t_1}{t^2{\rm d}t\int_0^{\dot r}{r{\rm d}r}}\\
&=2\pi\cdot\frac{t_1^3-t_0^3}{3}\cdot\frac{{\dot r}^2}{2}\\
&=\frac{\pi}{3}(t_1^3-t_0^3){\dot r}^2\end{align}
V=0≤∣θ<2πt≥0r∣≤r˙∭∣dxdydz∣=∫02πdθ∫t0t1t2dt∫0r˙rdr=2π⋅3t13−t03⋅2r˙2=3π(t13−t03)r˙2类似地:
μt=E[t]=1V∫02πdθ∫t0t1t3dt∫0r˙rdr=1V⋅2π⋅t14−t044⋅r˙22=3(t14−t04)4(t13−t03)
\mu_t={\rm E}[t]=\frac1V\int_0^{2\pi}{{\rm d}\theta}\int_{t_0}^{t_1}{t^3{\rm d}t\int_0^{\dot r}{r{\rm d}r}}=\frac1V\cdot2\pi\cdot\frac{t_1^4-t_0^4}{4}\cdot\frac{{\dot r}^2}{2}=\frac{3(t_1^4-t_0^4)}{4(t_1^3-t_0^3)}
μt=E[t]=V1∫02πdθ∫t0t1t3dt∫0r˙rdr=V1⋅2π⋅4t14−t04⋅2r˙2=4(t13−t03)3(t14−t04)E[t2]=1V∫02πdθ∫t0t1t4dt∫0r˙rdr=1V⋅2π⋅t15−t055⋅r˙22=3(t15−t05)5(t13−t03)
{\rm E}[t^2]=\frac1V\int_0^{2\pi}{{\rm d}\theta}\int_{t_0}^{t_1}{t^4{\rm d}t\int_0^{\dot r}{r{\rm d}r}}=\frac1V\cdot2\pi\cdot\frac{t_1^5-t_0^5}{5}\cdot\frac{{\dot r}^2}{2}=\frac{3(t_1^5-t_0^5)}{5(t_1^3-t_0^3)}
E[t2]=V1∫02πdθ∫t0t1t4dt∫0r˙rdr=V1⋅2π⋅5t15−t05⋅2r˙2=5(t13−t03)3(t15−t05)σt2=Var[t]=E[t2]−E2[t]=3(t15−t05)5(t13−t03)−μt2
\sigma_t^2={\rm Var}[t]={\rm E}[t^2]-{\rm E}^2[t]=\frac{3(t_1^5-t_0^5)}{5(t_1^3-t_0^3)}-\mu_t^2
σt2=Var[t]=E[t2]−E2[t]=5(t13−t03)3(t15−t05)−μt2E[x]=1V∫02πcosθdθ∫t0t1t3dt∫0r˙r2dr=0
{\rm E}[x]=\frac1V\int_0^{2\pi}{\cos\theta{\rm d}\theta}\int_{t_0}^{t_1}{t^3{\rm d}t\int_0^{\dot r}{r^2{\rm d}r}}=0
E[x]=V1∫02πcosθdθ∫t0t1t3dt∫0r˙r2dr=0E[x2]=1V∫02πcos2θdθ∫t0t1t4dt∫0r˙r3dr=1V⋅π⋅t15−t055⋅r˙44=3(t15−t05)20(t13−t03)r˙2
{\rm E}[x^2]=\frac1V\int_0^{2\pi}{\cos^2\theta{\rm d}\theta}\int_{t_0}^{t_1}{t^4{\rm d}t\int_0^{\dot r}{r^3{\rm d}r}}=\frac1V\cdot\pi\cdot\frac{t_1^5-t_0^5}{5}\cdot\frac{{\dot r}^4}{4}=\frac{3(t_1^5-t_0^5)}{20(t_1^3-t_0^3)}{\dot r}^2
E[x2]=V1∫02πcos2θdθ∫t0t1t4dt∫0r˙r3dr=V1⋅π⋅5t15−t05⋅4r˙4=20(t13−t03)3(t15−t05)r˙2σr2=Var[x]=E[x2]−E2[x]=3(t15−t05)20(t13−t03)r˙2
\sigma_r^2={\rm Var}[x]={\rm E}[x^2]-{\rm E}^2[x]=\frac{3(t_1^5-t_0^5)}{20(t_1^3-t_0^3)}{\dot r}^2
σr2=Var[x]=E[x2]−E2[x]=20(t13−t03)3(t15−t05)r˙2上述公式在数值计算层面存在指数爆炸(五次方)、差为零(t1−t0t_1-t_0t1−t0 太小)的问题,训练过程会产生 0 或者 NaN\rm NaNNaN,需要进一步参数化 t1t_1t1 和 t0t_0t0 :
{tμ=t1+t02tδ=t1−t02
\begin{cases}
t_\mu=\dfrac{t_1+t_0}{2}\\
t_\delta=\dfrac{t_1-t_0}{2}
\end{cases}
⎩⎨⎧tμ=2t1+t0tδ=2t1−t0重写前述公式:
μt=34⋅(t1−t0)(t1+t0)[(t1+t0)2−2t1t0](t1−t0)(t12+t02+t1t0)=3(tμ2+tδ2)tμ3tμ2+tδ2=tμ+2tμtδ23tμ2+tδ2
\begin{align}\mu_t&=\dfrac34\cdot\dfrac{(t_1-t_0)(t_1+t_0)\left[(t_1+t_0)^2-2t_1t_0\right]}{(t_1-t_0)(t_1^2+t_0^2+t_1t_0)}\\
&=\dfrac{3(t_\mu^2+t_\delta^2)t_\mu}{3t_\mu^2+t_\delta^2}\\
&=t_\mu+\dfrac{2t_\mu t_\delta^2}{3t_\mu^2+t_\delta^2}
\end{align}
μt=43⋅(t1−t0)(t12+t02+t1t0)(t1−t0)(t1+t0)[(t1+t0)2−2t1t0]=3tμ2+tδ23(tμ2+tδ2)tμ=tμ+3tμ2+tδ22tμtδ2σt2=35⋅(t1−t0)[(t12+t02)2−(t1t0)2+(t12+t02)t1t0](t1−t0)(t12+t02+t1t0)−μt2=3(5tμ4−2tμ2tδ2+tδ4)tδ25(3tμ2+tδ2)2=[13−4(12tμ2−tδ2)tδ215(3tμ2+tδ2)2]tδ2
\begin{align}
\sigma_t^2&=\dfrac35\cdot\dfrac{(t_1-t_0)\left[\left(t_1^2+t_0^2\right)^2-\left(t_1 t_0\right)^2+\left(t_1^2+t_0^2\right)t_1t_0\right]}{(t_1-t_0)(t_1^2+t_0^2+t_1t_0)}-\mu_t^2\\
&=\dfrac{3(5t_\mu^4-2t_\mu^2t_\delta^2+t_\delta^4)t_\delta^2}{5\left(3t_\mu^2+t_\delta^2\right)^2}\\
&=\left[\dfrac13-\dfrac{4(12t_\mu^2-t_\delta^2)t_\delta^2}{15\left(3t_\mu^2+t_\delta^2\right)^2}\right]t_\delta^2
\end{align}
σt2=53⋅(t1−t0)(t12+t02+t1t0)(t1−t0)[(t12+t02)2−(t1t0)2+(t12+t02)t1t0]−μt2=5(3tμ2+tδ2)23(5tμ4−2tμ2tδ2+tδ4)tδ2=[31−15(3tμ2+tδ2)24(12tμ2−tδ2)tδ2]tδ2σr2=320⋅(t1−t0)[(t12+t02)2−(t1t0)2+(t12+t02)t1t0](t1−t0)(t12+t02+t1t0)⋅r˙2=(tμ24+5tδ212−4tμ2tδ215(3tμ2+tδ2))r˙2
\begin{align}
\sigma_r^2&=\dfrac{3}{20}\cdot\dfrac{(t_1-t_0)\left[\left(t_1^2+t_0^2\right)^2-\left(t_1 t_0\right)^2+\left(t_1^2+t_0^2\right)t_1t_0\right]}{(t_1-t_0)(t_1^2+t_0^2+t_1t_0)}\cdot{\dot r}^2\\
&=\left(\dfrac{t_\mu^2}{4}+\dfrac{5t_\delta^2}{12}-\dfrac{4t_\mu^2t_\delta^2}{15(3t_\mu^2+t_\delta^2)}\right){\dot r}^2
\end{align}
σr2=203⋅(t1−t0)(t12+t02+t1t0)(t1−t0)[(t12+t02)2−(t1t0)2+(t12+t02)t1t0]⋅r˙2=(4tμ2+125tδ2−15(3tμ2+tδ2)4tμ2tδ2)r˙2于是相机坐标到世界坐标的变换:
{μ=o+μtdΣ=σt2ddT+σr2(I−ddT∥d∥22)
\begin{cases}
{\boldsymbol\mu}={\bold o}+\mu_t{\bold d}\\
{\boldsymbol\Sigma}=\sigma_t^2{\bold d}{\bold d}^{\rm T}+\sigma_r^2\left({\bold I}-\dfrac{{\bold d}{\bold d}^{\rm T}}{\|{\bold d}\|_2^2}\right)
\end{cases}
⎩⎨⎧μ=o+μtdΣ=σt2ddT+σr2(I−∥d∥22ddT)矩阵变换形式的位置编码:
P=[1002002L−100010020⋯02L−10001002002L−1]T,γ(x)=[sinPxcosPx]
{\bold P}=\begin{bmatrix}
1 & 0 & 0 & 2 & 0 & 0 & & 2^{L-1} & 0 & 0 \\
0 & 1 & 0 & 0 & 2 & 0 & \cdots & 0 & 2^{L-1} & 0 \\
0 & 0 & 1 & 0 & 0 & 2 & & 0 & 0 & 2^{L-1}
\end{bmatrix}^{\rm T},
\gamma({\bold x})=\begin{bmatrix}
\sin{{\bold P}{\bold x}}\\
\cos{{\bold P}{\bold x}}
\end{bmatrix}
P=100010001200020002⋯2L−10002L−10002L−1T,γ(x)=[sinPxcosPx]根据:
Ex∼N(μ,Σ)[sinxcosx]=[sinμexp(−12σ2)cosμexp(−12σ2)]
{\rm E}_{x\sim{\cal N({\boldsymbol\mu},{\boldsymbol\Sigma})}}\begin{bmatrix}
\sin{x}\\
\cos{x}
\end{bmatrix}=\begin{bmatrix}
\sin{\mu}\exp\left(-\dfrac{1}{2}\sigma^2\right)\\
\cos{\mu}\exp\left(-\dfrac{1}{2}\sigma^2\right)
\end{bmatrix}
Ex∼N(μ,Σ)[sinxcosx]=sinμexp(−21σ2)cosμexp(−21σ2)定义积分位置编码:
γ(μ′,Σ′)=Ex∼N(μ′,Σ′)[γ(x)]=[sinμ′∘exp(−12diag Σ′)cosμ′∘exp(−12diag Σ′)]
\gamma({\boldsymbol\mu}',{\boldsymbol\Sigma}')={\rm E}_{{\bold x}\sim{\cal N({\boldsymbol\mu}',{\boldsymbol\Sigma}')}}[\gamma({\bold x})]=\begin{bmatrix}
\sin{{\boldsymbol\mu}'}\circ\exp\left(-\dfrac{1}{2}{\rm diag\ }{\boldsymbol\Sigma}'\right)\\
\cos{{\boldsymbol\mu}'}\circ\exp\left(-\dfrac{1}{2}{\rm diag\ }{\boldsymbol\Sigma}'\right)
\end{bmatrix}
γ(μ′,Σ′)=Ex∼N(μ′,Σ′)[γ(x)]=sinμ′∘exp(−21diag Σ′)cosμ′∘exp(−21diag Σ′)其中:
{μ′=PμΣ′=PΣPT
\begin{cases}
{\boldsymbol\mu}'={\bold P}{\boldsymbol\mu}\\
{\boldsymbol\Sigma}'={\bold P}{\boldsymbol\Sigma}{\bold P}^{\rm T}
\end{cases}
{μ′=PμΣ′=PΣPTdiag Σ′=[diag Σ4diag Σ⋯4L−1diag Σ]T
{\rm diag\ }{\boldsymbol\Sigma}'=
\begin{bmatrix}
{\rm diag\ }{\boldsymbol\Sigma} & 4{\rm diag\ }{\boldsymbol\Sigma} & \cdots & 4^{L-1}{\rm diag\ }{\boldsymbol\Sigma}
\end{bmatrix}^{\rm T}
diag Σ′=[diag Σ4diag Σ⋯4L−1diag Σ]T于是:
γ(μ′,Σ′)={[sin2lμ∘exp(−22l−1diag Σ)cos2lμ∘exp(−22l−1diag Σ)]}l=0L
\gamma({\boldsymbol\mu}',{\boldsymbol\Sigma}')=\left\{\begin{bmatrix}
\sin{2^l{\boldsymbol\mu}}\circ\exp\left(-2^{2l-1}{\rm diag\ }{\boldsymbol\Sigma}\right)\\
\cos{2^l{\boldsymbol\mu}}\circ\exp\left(-2^{2l-1}{\rm diag\ }{\boldsymbol\Sigma}\right)
\end{bmatrix}\right\}_{l=0}^L
γ(μ′,Σ′)={[sin2lμ∘exp(−22l−1diag Σ)cos2lμ∘exp(−22l−1diag Σ)]}l=0L由于 IID,我们只需要关心协方差矩阵的对角线,Σ\boldsymbol\SigmaΣ 的计算可以简化为:
diag Σ=σt2(d∘d)+σr2(1−d∘d∥d∥22)
{\rm diag\ }{\boldsymbol\Sigma}=\sigma_t^2\left({\bold d}\circ{\bold d}\right)+\sigma_r^2\left(1-\dfrac{{\bold d}\circ{\bold d}}{\|{\bold d}\|_2^2}\right)
diag Σ=σt2(d∘d)+σr2(1−∥d∥22d∘d)
References
J. T. Barron, B. Mildenhall, M. Tancik, et al. Mip-NeRF: A Multiscale Representation for Anti-Aliasing Neural Radiance Fields. ICCV’21. https://arxiv.org/abs/2103.13415