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的。

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

相关推荐
Martina_03215 小时前
AI生成3D场景第一次进入总卡一下?用6步排查Shader编译、纹理上传与预加载
图像处理·人工智能·游戏·3d·ai·自然语言处理·游戏策划
嘿嘿-666 小时前
GPT-6.1 Sol 实战:做一个可交互的 3D 汽车展厅
人工智能·gpt·3d·chatgpt·汽车
Zldaisy3d18 小时前
表面粗糙度不再掣肘:3D打印喷油器为紧凑型燃气轮机多燃料低排放燃烧开辟新路
3d
Jmyd01231 天前
3D商品展示的工程化落地:资产管线、性能预算与A/B验证
3d·三维数字化
潜创微科技1 天前
内置 4K 解码与 HDMI 输出的高集成 SoC:SSD203D 在微型投影与商显中的应用
3d·评估板·参考设计·星宸
HwJack201 天前
【共创稿事节】 HarmonyOS 7从 2D 到 3D:空间计算带来的到底是什么范式变革
3d·harmonyos·空间计算
警醒与鞭策2 天前
Direct3D 12 中的内存管理
3d·游戏引擎·direct3d
李游Leo2 天前
《HarmonyOS 7 ArkGraphics 3D 空间设计开发实战》01:从空场景到第一个可运行的3D房间【鸿蒙心迹】
3d·华为·harmonyos
云飞云共享云桌面2 天前
有个10人的SolidWorks设计团队,服务器什么配置合适,如何落地
运维·服务器·3d·自动化·电脑·制造
李游Leo3 天前
《HarmonyOS 7 ArkGraphics 3D 空间设计开发实战》02:世界坐标、局部坐标与Transform空间变换【鸿蒙心迹】
3d·harmonyos