1. 正向渲染公式推导
正向渲染是指从3D高斯球渲染到2D屏幕中某个像素值的颜色的过程。
1.1 3D高斯到2D高斯
3D高斯参数有高斯球的中心即均值,协方差
,体密度
,颜色
,2D高斯参数有高斯球的中心即均值
,协方差
。
首先,对于高斯球上一个x,将其变换到相机坐标系下有:,然后再将其变换到2D高斯上一个u,有:
对于2D高斯的均值来说,则有:
,
接下来是2D高斯协方差的求法,三维高斯球
是一个椭球体,它可以通过对半径为1的标准圆施加旋转R和缩放矩阵S生成,即
, 这是因为标准正态分布的协方差
就是一个半径为1的标准圆,椭球就是将这个圆进行旋转缩放变成的。
是一个单位矩阵,所以可以省略。
由于3D转2D的变换是非线性变换,因此在3D协方差转2D协方差时需要做线性化,假设原先的3D高斯分布指数表示为,2D高斯分布表示为
,那么在
处对x进行线性化,设
,
就是2D坐标对3D坐标的雅可比矩阵,那么带入上式有:
其中是均值, 我们会用
而不是
。
对比发现:,即
。
于是,, 对应论文公式(5),其中
,为何少了一个旋转,是因为
其中,是
的旋转部分,
就是论文中所述的W。
由于2D高斯转换到2D高斯后只剩二维坐标了,所以通常取的前两行两列作为2D高斯球的协方差矩阵。
1.2 2D高斯到像素颜色
gaussian splatting渲染实际是借鉴了nerf的积分方式,步骤是:
1. 图像中任选一个像素,遍历所有2D高斯球
2. 选择与该像素的距离不小于3倍方差的2D高斯球,则将其加入到候选集合
3. 按深度对候选集合排序,然后从近到远进行颜色的计算,计算公式如下:
颜色计算的离散公式推导:nerf中连续的积分渲染公式是:
其中是体密度,T(t)表示为被遮挡率,它的计算公式是:
那么转换为离散公式后有:
其中,代表j时刻的时间差,将其带入渲染公式:
设透明度
则被遮挡率
有
而gaussian-splating的公式与nerf不一样的点在于,透明度的计算是根据像素点处于2D高斯球的概率求得的:
其中是3D高斯球溅射到屏幕上形成的2D高斯球的均值, x是屏幕坐标,
是2D高斯球的协方差,
是3D高斯球的体密度。
2. 反向传播公式推导
反向传播与正向渲染的方向是相反的,指从2D屏幕中某个像素值的颜色如何将梯度传导到3D高斯球的过程,从而更新3D高斯球的参数,需要更新的参数有:表示3D高斯球的协方差的参数R,S,体密度
, 以及颜色c。
2.1 从像素到2D高斯
以任意一个像素i为例,其像素颜色可表示为:
那么,对于序号为j的高斯球来说,它的各项参数的导数的计算方法是,
- 对于颜色
的导数显而易见:
- 对于透明度
的导数可以求出来:
其中n是与该像素有交集的高斯球的个数,前面为什么除是因为后面从k=0到m-1时也会乘以
,所以要把这个因素考虑在内。
- 根据链式求导法则,对于体密度
的导数也就可以求出来了:
- 对于2D高斯协方差
的导数比较复杂,求解过程如下:
将展开:
根据二维矩阵求逆公式有:
为了方便表示,设
,
,
,
将按行列式展开得:
那么,
同理,
2.2从2D高斯到3D高斯
从2D高斯到3D高斯的反向传播即将2D高斯中的协方差的梯度如何传递给对表示3D高斯协方差的两个参数R,S的梯度,并对R,S进行更新的过程,即
和
,根据链式求导法则,其可以表示为
以及
, 这里的M代表RS。
首先,求,根据前面的推导有
,展开来:
同理对于r从0到2,c从0到2,有:
然后设,那么
,将其按行列展开,
那么对于,可得:
最后,求和
,
对于:
对于,先将R写为四元数的方式:
那么有:
那么,
同理,对于,
对于,
对于,
至此,所有的反向传播参数都求得了
参考:
【CV】Nerf中体素渲染的离散公式推导 - Edlinf - 博客园
https://github.com/WangFeng18/3d-gaussian-splatting.git