3DGS 任务的数学表达

任务目标

通过 NN 套多视角图片、相机内参(intrinsic,包括焦距、宽高等)和相机外参(extrinsics,包括旋转、平移)

{Ii,Ki,W ⁣i}i=1N\{\bm{I}_i, \bm{K}_i, \bm{W}_{\!i}\}_{i=1}^N

用可微的渲染来重建 3D 场景.

对于每个视角 ii,都使用当前的参数 θ\theta 来渲染场景,获得图像 Iθ,i\bm{I}_{\theta, i},然后将这张图像与其对应的输入图像 Ii\bm{I}_i 进行比较,使 IiIθ,i\bm{I}_i \approx \bm{I}_{\theta,i}.这可以通过使用标准梯度下降算法,达到最小化光度损失 (photometric loss) 以实现:

L(θ)=1Ni=1NIθ,iIi2.(1)\mathcal{L}(\theta) =\frac{1}{N} \sum_{i=1}^N \| \bm{I}_{\theta,i} -\bm{I}_i \|^2. \tag{1}

体积表示

NeRF 和 3DGS 引入了体积表示 (volumetric representations) 使得可微的体渲染成为可能.场景被描述为一个量化吸收率的密度场

σθ:R3R\sigma_\theta \::\: \R^3 \rightarrow \R

和一个量化辐射率的色彩场

cθ:R3R.c_\theta \::\: \R^3 \rightarrow \R.

体积渲染微分方程

设点 pp 为输入图像 Ii\bm{I}_i 中的一个像素,oi\bm{o}_i 为相机位置,

γp(t)=oi+tv\gamma_p(t) = \bm{o}_i + t\bm{v}

为视线.若忽略散射,则累积辐射亮度 I(γ(t))I(\gamma(t)) 满足体积光传输常微分方程 (ordinary differential equation, ODE):

dI(t)dt=σθ(t)I(t)吸收+σθ(t)cθ(t)辐射.(2)\frac{\mathrm{d}I(t)}{\mathrm{d}t} =\underbrace{-\sigma_\theta(t) \, I(t)}_{\text{吸收}} +\underbrace{\sigma_\theta(t) \, c_\theta(t)}_{\text{辐射}}. \tag{2}

出于简洁考虑,在符号中省略了 γ\gamma.严格来讲,分别是 σθ(γ(t))\sigma_\theta(\gamma(t))cθ(γ(t),v)c_\theta(\gamma(t),\bm{v})

数值求积解微分方程 (NeRF)

常微分方程 (2)(2) 式的求解过程见一阶线性微分方程求解.假设初始状态背景辐射为零,即 I(tnear)=0I(t_\mathrm{near})=0,则射线末端的累积辐射为:

Ifar:=I(tfar)=tneartfarT(t)σθ(t)cθ(t)dt,(3)I_\mathrm{far} := I(t_\mathrm{far}) =\int_{t_\mathrm{near}} ^ {t_\mathrm{far}} T(t) \, \sigma_\theta(t) \, c_\theta(t) \, \mathrm{d}t, \tag{3}

其中

T(t)=exp(tneartσθ(s)ds).T(t) =\exp\left( -\int_{t_\mathrm{near}}^t \sigma_\theta(s) \, \mathrm{d}s \right).

T(t)T(t) 代表透射率 (transmittance),表示从相机 tneart_\mathrm{near}tt 位置后未被吸收的光量.在实际中,为了渲染预测图像 Iθ,i\bm{I}_{\theta, i},将使用数值求积法 (numerical quadrature methods) 来近似 (3)(3) 式:

Ifari=1Ncθ(ti)(1exp(σθ(ti)δi))j=1i1exp(σθ(tj)δj),(4)I_\mathrm{far} \approx \sum_{i=1}^N c_\theta(t_i) \Big( 1 - \exp\big(-\sigma_\theta(t_i) \, \delta_i\big) \Big) \prod_{j=1} ^ {i-1} \exp\big( -\sigma_\theta(t_j) \, \delta_j \big), \tag{4}

其中 δi=titi1\delta_i = t_i - t_{i-1} 是步长.

高斯的密度函数

在 NeRF 中,函数 σθ\sigma_\thetacθc_\theta 均由神经网络建模.然而,神经网络需要对整个域进行监督,这之中包含了大量空白区域,从而导致高昂的计算开销.

为了解决这个问题,在 3DGS 中,函数 σθ\sigma_\thetacθc_\theta 用有色 3D 高斯集表示.3DGS 从 SfM 获取有色点云,用于初始化 MM 个高斯的集合,

gi:={μi,Σi,σi,ci},g_i := \{ \bm{\mu}_i, \bm{\Sigma}_i, \sigma_i, c_i \},

其中
μiR3\bm{\mu}_i \in \R^3 是高斯中心,
ΣiR3×3\bm{\Sigma}_i \in \R^{3 \times 3} 是协方差矩阵,
σiR\sigma_i \in \R 是不透明度,
ciR3c_i \in \R^3 是 RGB 颜色.

每个高斯都用如下的密度函数 Gi(x):R3R\mathcal{G}_i(\bm{x}) : \R^3 \rightarrow \R 影响点 x\bm{x} 周围的空间:

Gi(x):=exp(12(xμi)TΣi1(xμi)),(5)\mathcal{G}_i(\bm{x}) := \exp\left( -\frac{1}{2} (\bm{x} - \bm{\mu}_i) ^ T \bm{\Sigma}_i ^ {-1} (\bm{x} - \bm{\mu}_i) \right), \tag{5}

体积泼溅解微分方程 (3DGS)

求积法体渲染的计算开销太大,因此 3DGS 采用体积泼溅 (volume splatting) 来近似 (3)(3) 式的积分.设 γ\gamma 为与像素 p\bm{p} 对应的视线,交叉于按距离排序的 KK 个高斯椭球.利用积分学的基本性质,我们可以将 (3)(3) 式重写为

I(γ)=i=1Kciσiτij=1i1(1σjτj),with τi=RGi(γ(t))dt,(6)I(\gamma) = \sum_{i=1} ^ K c_i \sigma_i \tau_i \prod_{j=1} ^ {i-1} (1 - \sigma_j \tau_j), \quad \text{with } \tau_i = \int_\R \mathcal{G}_i(\gamma(t)) \, \mathrm{d}t, \tag{6}

推导过程见此处

3D 高斯投影

想求解 (6)(6) 式,就要先解决积分 τi\tau_i 的问题.将 3D 高斯 Gi\mathcal{G}_i 泼溅到 2D 屏幕上,就能得到与 τi\tau_i 等效的 2D 高斯 G~i:R2R\tilde{\mathcal{G}}_i : \R^2 \rightarrow \R

由相机内参 K\bm{K} 决定的透视投影 PK:R3R2P_{\bm{K}} : \R^3 \rightarrow \R^2 是非仿射的,所以使用它在高斯中心 μi\bm{\mu}_i 处的雅可比矩阵 JR2×3\bm{J} \in \R^{2 \times 3} 对投影做一阶近似:

PK(x)PK(μi)+J(xμi)(7)P_{\bm{K}}(\bm{x}) \approx P_{\bm{K}}(\bm{\mu}_i) + \bm{J}(\bm{x} - \bm{\mu}_i) \tag{7}

——尽管透视投影是非线性的,但是一个高斯通常较小,所以其附近可以近似看作线性变换.高斯经过线性变换后仍然是高斯,所以这一步使得 3D 高斯投影后,可以近似看作 2D 高斯.

屏幕空间中的合成

为了进行屏幕空间中的合成,需要与 3D 高斯对应的 2D 高斯的全套参数:

g~i:={μ~i,Σ~i,σ~i,c~i}.\tilde{g}_i := \{ \tilde{\bm{\mu}}_i, \tilde{\bm{\Sigma}}_i, \tilde{\sigma}_i, \tilde{c}_i \}.

用相机外参 W\bm{W} 将世界空间的 3D 高斯中心 μi\bm{\mu}_i 变换到相机坐标系,得到投影后的 2D 高斯中心

μ~i:=PK(Wμi).(8.1)\tilde{\bm{\mu}}_i := P_{\bm{K}}(\bm{W} \bm{\mu}_i). \tag{8.1}

同理,先用 W\bm{W} 将协方差矩阵 Σi\bm{\Sigma}_i 变换到相机坐标系,再用雅可比矩阵 J\bm{J} 近似一阶线性,得到

Σ~i:=JWΣiWTJT.(8.2)\tilde{\bm{\Sigma}}_i := \bm{J}\bm{W}\bm{\Sigma}_i\bm{W}^T\bm{J}^T. \tag{8.2}

最后,不透明度和颜色保持不变,即 σ~i=σi,c~i=ci\tilde{\sigma}_i = \sigma_i, \quad \tilde{c}_i = c_i.代入 (6)(6) 式,最终得到在屏幕像素 p\bm{p} 位置的光辐射函数

If=i=1Kciσ~iG~i(p)j=1i1(1σ~jG~j(p)).(9)I_\mathrm{f} = \sum_{i=1} ^ K c_i \tilde{\sigma}_i \tilde{\mathcal{G}}_i(\bm{p}) \prod_{j=1} ^ {i-1} \left(1 - \tilde{\sigma}_j \tilde{\mathcal{G}}_j(\bm{p})\right). \tag{9}