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_032110 小时前
AI生成的3D白模单帧没问题,镜头一移动就被挡?用6步检查遮挡与构图
图像处理·人工智能·数学建模·3d·ai·自然语言处理·游戏策划
时间的情敌3 天前
Cesium 建筑单体化、3DTiles 分类、楼层显隐、分户高亮(BIM + 倾斜孪生高频)
前端·3d·cesium
加搜科技观察4 天前
哪个品牌 3D 相机好用?工业 3D 相机品牌选型评估指南
数码相机·3d
Martina_03215 天前
AI生成3D场景的霓虹灯一开就糊成光团?用6步检查Emissive、Bloom与曝光
人工智能·3d·ai·自然语言处理·游戏引擎·材质·贴图
Martina_03216 天前
AI生成3D场景从白模换成精模后镜头全偏了?用6步检查单位、枢轴与层级替换
图像处理·人工智能·3d·ai·自然语言处理·材质·1024程序员节
时间的情敌7 天前
Cesium 加载 3D Tiles 倾斜摄影、压平、样式设置(Vue3 实战)
vue.js·3d·cesium
AGI_Eval8 天前
AI 3D生成技术:从“可用”走向“可靠”还有多远?
人工智能·3d
翌日阳9 天前
二十分之一的压缩比:Spatial Vivid 1.0 把 3DGS 全链路参考实现按 MIT 开源了
3d·开源
Dream-Y.ocean10 天前
鸿蒙PC平台宅匠 3D 室内设计适配实战:基于 Electron 壳方案的 Three.js 双渲染引擎与参数化户型编辑器开发
javascript·3d·harmonyos
硕迪科技SOLIDWORKS10 天前
SOLIDWORKS Electrical 2027:从线束定义到2D–3D更改分析
3d·solidworks 202