3D Gaussian Splatting的cuda code总结

作者 : admin 本文共667个字,预计阅读时间需要2分钟 发布时间: 2024-06-10 共3人阅读

3D Gaussian Splatting的cuda code总结插图

总结视频来源:http://www.youtube.com/watch?v=1buFrKUaqwM

总结视频来源作者:AI葵

3D Gaussian Splatting的cuda code总结插图(1)

3D高斯分布投影到图像上,每个像素投影到该像素上的高斯数不同,因此不能用pytorch并行化处理

一、前向传播

前向传播

  1. 计算投影出来圆圈的半径
  2. 计算圆圈覆盖的像素数(把画面分成了很多个方块,记录圆与哪些方块相连)
  3. 计算每个高斯的前后顺序(alpha合成)
  4. 计算每个像素的颜色

1. preprocessCUDA

diff-gaussian-rasterization/cuda_rasterizer/forward.cu

预处理CUDA preprocessCUDA函数用于解决第一个第二个问题 

3D Gaussian Splatting的cuda code总结插图(2)

将3D投影到投影上

3D Gaussian Splatting的cuda code总结插图(3)

 计算三个轴的长度的过程

3D Gaussian Splatting的cuda code总结插图(4)

计算投影到二维后椭圆的样子

3D Gaussian Splatting的cuda code总结插图(5)

 计算长轴的半径

3D Gaussian Splatting的cuda code总结插图(6)

计算高斯的半径

3D Gaussian Splatting的cuda code总结插图(7)

有了圆心和半径16×16瓦片,计算圆覆盖的像素数

3D Gaussian Splatting的cuda code总结插图(8)

 保存后面所有用到的值

3D Gaussian Splatting的cuda code总结插图(9)

tilesTouch保存总共覆盖了几个 tile

3D Gaussian Splatting的cuda code总结插图(10)

2. rasterizer_impl.cu

解决第三个问题

将tile+高斯想象成一个组合,按照tile的数量,先排列。如果是同一个tile,按照每个高斯的顺序排列

3D Gaussian Splatting的cuda code总结插图(11)

一直到这里 

3D Gaussian Splatting的cuda code总结插图(12)

3D Gaussian Splatting的cuda code总结插图(13)

3. renderCUDA

解决第四个问题

3D Gaussian Splatting的cuda code总结插图(14)

3D Gaussian Splatting的cuda code总结插图(15)

一张图片分割成很多图块,图块中每个线程负责一个像素,计算颜色

把每个tile当时一个块,每个块里的线程其实就是一个图块中的一个像素

共享内存

3D Gaussian Splatting的cuda code总结插图(16)

更新变量 

3D Gaussian Splatting的cuda code总结插图(17)

把每个像素点对高斯的中心做一个距离计算,应用在高斯分布的概率计算中得到点的alpha

如果alpha<0.0001就会结束这个计算 

3D Gaussian Splatting的cuda code总结插图(18)

alpha合成

3D Gaussian Splatting的cuda code总结插图(19)

把颜色写在正确的位置

3D Gaussian Splatting的cuda code总结插图(20)

本站无任何商业行为
个人在线分享 » 3D Gaussian Splatting的cuda code总结
E-->