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

1、需要求解的参数

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

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

1) 三维高斯球的中心点位置

2)协方差矩阵的参数,在3DGS中,用的是4元数+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一模一样,公式如下:

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

假设当前要求偏导的高斯球序号为k,那么的偏导求解过程如下:

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

2)第k个高斯球的导数为:,且

3)第k个高斯球之后的所有高斯球(不包括背景颜色),都包含有,所以也需要求导。以第i个高斯球为例,颜色项为:,对求偏导,偏导数为,由于,所以偏导数有可以写为:

4)背景颜色项,也包含了,和3)里面的第i个高斯球推导是类似的,偏导数为:。因为是背景,所以背景是没有透明度的,相比较于3)中,少了透明度。

综上,对于第k个高斯球,完整的的导数为:

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

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

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

相关推荐
高升说18 小时前
手眼 3D 相机选型:先定工作距离,再谈精度,最后定安装
人工智能·数码相机·3d
利刃大大20 小时前
我用 GPT-6 给江南大学建了个 3D 沙盘
gpt·3d·ai·blender·江南大学
不要生病了1 天前
从脑电到彩色三维点云:Neuro-3D 精读与证据边界
3d
时空节拍AI数字人1 天前
AI 数字人为什么需要“3D”?2D 不够用吗
人工智能·网络协议·tcp/ip·3d·信息可视化
Zldaisy3d2 天前
以光束整形3D打印,探索陶瓷-铜功能件的一体化制造
3d·制造
LeapMay2 天前
中国科学院深圳先进技术研究院-深圳职业技术大学联合培养博士后招聘(具身智能/多模态感知/视觉检测方向)
人工智能·计算机视觉·3d·机器人
tsqtsqtsq03092 天前
3DGS 端侧重建:基于 Spatial Recon Kit 的全面实践指南
3d
小溪学编程2 天前
3ds Max 2025 全面指南:新特性、安装与实战入门
3d
兜里只有三分钱~2 天前
翻卡_3D 的仪式感,和三个让它穿帮的写法
javascript·css·3d
云飞云共享云桌面3 天前
钣金制造研发优化:不采购传统工作站,实现 SolidWorks 团队共用服务器开展三维建模
运维·服务器·网络·数据库·3d·制造