3D Gaussian Splatting中梯度反传求偏导的推导

1、需要求解的参数

在3DGS中,需要求解的参数包括:

#下面的参数都是针对一个三维高斯球的

1) 三维高斯球的中心点位置\mu \in \mathbb{R}^{3}

2)协方差矩阵的参数,在3DGS中,用的是4元数q \in \mathbb{R}^{4}+3个尺度s \in \mathbb{R}^{3}

3)不透明度 

4)颜色球谐系数 

2、反传过程
2.1 forward和backward函数简单介绍

在3DGS前向函数forward中,输出的是rendered_image(渲染影像)、radii(半径)、depth_image(逆深度图),其中radii未参与优化,因此可以不管radii的梯度。

 @staticmethod

    def forward( ctx, means3D, means2D, sh, colors_precomp, opacities, scales, rotations, cov3Ds_precomp, raster_settings,):

        return color, radii, invdepths

#这个是forward函数,输出的就是渲染影像、半径、深度图

在前向结束后,3DGS采用的是颜色loss和深度loss(在没有参考深度时,该loss直接是设置为0,相当于没用)。颜色loss采用的是L1 loss和SSIM loss,深度loss采用的也是L1 loss。

在回传优化时,loss函数会对渲染的影像和深度求梯度,这个都不用管,Pytorch会自动求。求出来的梯度,就是3DGS反向函数backward的输入。

def backward(ctx, grad_out_color, _, grad_out_depth):

#在backward函数输入中,grad_out_color 对应着loss对渲染颜色的梯度;radii不参与优化,所以不考虑它的梯度;grad_out_depth 对应着loss对深度的梯度。

2.2 对透明度求偏导

3DGS中,渲染的前向过程和NeRF一模一样,公式如下:

C = \sum_{i= 1}^{N} T_i \alpha_ic_i \\ \\ T_i = \prod_{j = 1}^{i-1} (1-\alpha_j) \\ \\ T_1 = 1

现在,我们有loss对每个像素的C的偏导数\frac{\partial_L}{\partial_C},现在需要求C对影响该像素颜色的高斯球的透明度\alpha_i的偏导。在前向的过程中,我们是按深度值,从近往远进行叠加,得到最后的颜色。将上面的公式展开如下:

C = \alpha_1c_1 + (1-\alpha_1)\alpha_2c_2 + \cdots + \prod_{j=1}^{k-1}(1-\alpha_j)\alpha_kc_k + \cdots + \prod_{j=1}^{N}(1-\alpha_{j})c_{bg}

假设当前要求偏导的高斯球序号为k,那么\frac{\partial_C}{\partial_{\alpha_k}}的偏导求解过程如下:

1)在k之前的高斯球的颜色项,不包含\alpha_k,所以就直接为0;

2)第k个高斯球的导数为:T_kc_k,且 T_k = \prod_{j=1}^{k-1}(1-\alpha_j)

3)第k个高斯球之后的所有高斯球(不包括背景颜色),都包含有\left ( 1-\alpha_k \right ),所以也需要求导。以第i个高斯球为例,颜色项为:T_k (1-\alpha_k) \prod_{j = k+1}^{i-1}(1-\alpha_j) \alpha_i c_i,对\alpha_k求偏导,偏导数为-T_k \prod_{j = k+1}^{i-1}(1-\alpha_j) \alpha_ic_i,由于T_i = \prod_{j = 1}^{i-1} (1-\alpha_j),所以偏导数有可以写为:-\frac{T_i}{1-\alpha_k} \alpha_i c_i

4)背景颜色项,也包含了\left ( 1-\alpha_k \right ),和3)里面的第i个高斯球推导是类似的,偏导数为:-\frac{T_{N+1}}{1-\alpha_k} c_{bg}。因为是背景,所以背景是没有透明度的,相比较于3)中,少了透明度。

综上,对于第k个高斯球,完整的\frac{\partial_C}{\partial_{\alpha_k}}的导数为:

\frac{\partial_C}{\partial_{\alpha_k}} = T_kc_k - \sum_{k+1}^{N}(\frac{T_i \alpha_i c_i }{1-\alpha_k} )-\frac{T_{N+1}}{1-\alpha_k} c_{bg}

从上式中,可以看到,为了求对第k个\alpha_k的梯度,需要求它后面所有高斯球的颜色,计算量较大。

为了避免这个问题,在3DGS中,采用了一个非常巧妙的等价设计。懒得敲了,直接复制AI的。

后续有空,再记录进一步的推导。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值