欢迎光临
我们一直在努力

【机器视觉】最强算法之:3D高斯泼溅(3D Gaussian Splatting)

机器视觉必会算法:3D高斯泼溅

  • 1、引言
  • 2、3D高斯泼溅(3D Gaussian Splatting)
    • 2.1 定义与解析
    • 2.2 核心原理
      • 2.2.1 用"一团团高斯"表示三维场景
      • 2.2.2 泼溅(Splatting):3D → 2D 投影
      • 2.2.3 可微渲染:从图像反推高斯
      • 2.2.4 为啥比 NeRF 快这么多
    • 2.3 实现方式 / 工作流程
    • 2.4 算法公式
    • 2.5 代码示例
    • 3、总结

1、引言

小屌丝:鱼哥,最近刷到个词叫"高斯泼溅",说是能实时渲染 3D 场景,比 NeRF 快几百倍,真的假的?

小鱼:真的。NeRF 是"慢工出细活",3D 高斯泼溅(3DGS)是"又快又细活"。

小屌丝:那它俩到底差在哪?NeRF 不是也挺神吗?

小鱼:NeRF 用神经网络"隐式"存场景,每次渲染都要跑一遍 MLP,慢得抠脚。3DGS 干脆用一堆立体的小高斯球把场景显式铺出来,渲染靠投影+混合,GPU 上能跑实时。

小屌丝:哦~ 一个"记在脑子里慢慢想",一个"摆在桌面上直接看"。

小鱼:精辟。那咱开整,看看这桌面上到底摆了啥。

2、3D高斯泼溅(3D Gaussian Splatting)

2.1 定义与解析

3D 高斯泼溅(3D Gaussian Splatting,3DGS),是 Kerbl 等人在 2023 年(SIGGRAPH / TOG)提出的**新视角合成(Novel View Synthesis)**方法。

一句话理解它:用成千上万个"带颜色、带透明度、带朝向的 3D 高斯椭球"来显式表示三维场景。给定一组多角度照片,它优化出这堆高斯,之后从任意新视角都能实时渲染出高质量画面。

它解决的问题和 NeRF 一样(多视角重建 + 新视角合成),但把"慢"这个最大痛点基本解决了——训练快、渲染能上 100+ FPS。

简单来说,3DGS 把场景当成"无数半透明的小云团",相机一转,云团投影到屏幕上叠在一起,就是你要的画面。

在这里插入图片描述

2.2 核心原理

2.2.1 用"一团团高斯"表示三维场景

每个 3D 高斯由几个参数定义:

  • 位置

    μ

    \\mu

    μ(3D 中心,球在哪);

  • 协方差

    Σ

    \\Sigma

    Σ(3×3,决定球的扁圆、朝向、大小);

  • 颜色

    c

    c

    c(通常用球谐函数 SH 系数,能表现视角相关的颜色);

  • 不透明度

    α

    \\alpha

    α(这团有多"实心")。

整张场景 = 一个高斯列表。优化目标就是调这些参数,让渲染图和真实照片对得上。

2.2.2 泼溅(Splatting):3D → 2D 投影

渲染时,把每个 3D 高斯按相机参数"泼溅"到 2D 图像平面:

  • 用相机外参把 3D 均值

    μ

    \\mu

    μ 投影成 2D 点;

  • 用雅可比把 3D 协方差

    Σ

    \\Sigma

    Σ 投影成 2D 协方差

    Σ

    ′

    \\Sigma'

    Σ′(EWA 投影,保证椭圆形状正确);

  • 得到屏幕上一个个 2D 高斯斑。

2.2.3 可微渲染:从图像反推高斯

关键创新是可微的α混合(alpha blending):

C

=

∑

i

=

1

N

c

i

α

i

∏

j

=

1

i

−

1

(

1

−

α

j

)

C = \\sum_{i=1}^{N} c_i \\alpha_i \\prod_{j=1}^{i-1}(1-\\alpha_j)

C=i=1∑N​ci​αi​j=1∏i−1​(1−αj​)

按深度从远到近排序,把覆盖同一像素的所有高斯,用"透明度加权"叠起来,得到像素颜色

C

C

C。整个过程可导,所以能拿"渲染图 vs 真实图"的差(如 L1 + D-SSIM 损失)反向传播,端到端优化每个高斯的参数。

2.2.4 为啥比 NeRF 快这么多

  • 显式表达:不用每像素都跑 MLP,直接投影+混合,天然适合 GPU 光栅化;
  • 自适应密度:训练中自动对"细节不够"的地方克隆/分裂高斯,对"冗余"的地方剪枝,场景表示又紧又准;
  • tile-based 光栅化:把屏幕分块并行处理,吞吐量拉满。

2.3 实现方式 / 工作流程

典型流程(以 nerfstudio 为例):

  • 准备数据:对同一物体/场景拍摄几十~上百张带位姿(pose)的照片;
  • 初始化:用 SfM(如 COLMAP)得到稀疏点云,作为高斯的初始位置;
  • 优化:可微渲染 + 损失反传,迭代调整每个高斯的参数,并做自适应增删;
  • 实时渲染:保存高斯属性,从任意视角 .render() 出图/视频。
  • 多视角图像 + 相机位姿
    │
    ▼
    SfM 稀疏点云 (初始化高斯位置)
    │
    ▼
    可微泼溅渲染 ──► 与真实图算损失 ──► 反向传播
    ▲ │
    └──────── 自适应增删高斯 ◄──────────┘
    │
    ▼
    最终高斯场景 ──► 实时新视角渲染 (100+ FPS)

    2.4 算法公式

    3D 高斯函数(各向异性椭圆):

    G

    (

    x

    )

    =

    exp

    ⁡

    (

    −

    1

    2

    (

    x

    −

    μ

    )

    ⊤

    Σ

    −

    1

    (

    x

    −

    μ

    )

    )

    G(x) = \\exp\\left(-\\frac{1}{2}(x-\\mu)^\\top \\Sigma^{-1}(x-\\mu)\\right)

    G(x)=exp(−21​(x−μ)⊤Σ−1(x−μ))

    2D 投影协方差(EWA):

    Σ

    ′

    =

    J

    W

    Σ

    W

    ⊤

    J

    ⊤

    \\Sigma' = J W \\Sigma W^\\top J^\\top

    Σ′=JWΣW⊤J⊤

    其中

    W

    W

    W 为视角变换、

    J

    J

    J 为投影雅可比。

    像素颜色(α 混合):

    C

    =

    ∑

    i

    =

    1

    N

    c

    i

    α

    i

    ∏

    j

    =

    1

    i

    −

    1

    (

    1

    −

    α

    j

    )

    C = \\sum_{i=1}^{N} c_i \\alpha_i \\prod_{j=1}^{i-1}(1-\\alpha_j)

    C=i=1∑N​ci​αi​j=1∏i−1​(1−αj​)

    训练损失(图像重建):

    L

    =

    (

    1

    −

    λ

    )

    L

    1

    (

    C

    ,

    C

    ^

    )

    +

    λ
     

    L

    D-SSIM

    (

    C

    ,

    C

    ^

    )

    \\mathcal{L} = (1-\\lambda)\\mathcal{L}_1(C,\\hat{C}) + \\lambda\\,\\mathcal{L}_{\\text{D-SSIM}}(C,\\hat{C})

    L=(1−λ)L1​(C,C^)+λLD-SSIM​(C,C^)

    一句话:3D 高斯投影成 2D 斑,按深度α混合成图,和真图比差、反传调参,场景就被"泼"出来了。

    在这里插入图片描述

    2.5 代码示例

    最省心的用法是走 nerfstudio(封装好了全套 pipeline):

    # 安装 nerfstudio(含 gaussian-splatting 方法)
    pip install nerfstudio
    # 准备数据:把多视角图按如下结构放好
    # data/my_scene/images/*.jpg
    # data/my_scene/transforms.json # 位姿(或先用 COLMAP 算)
    ns-train gaussian-splatting –data data/my_scene

    也能用官方仓库直接推理/查看(需先编译 CUDA 扩展):

    # 官方仓库:graphdeco-inria/gaussian-splatting
    git clone https://github.com/graphdeco-inria/gaussian-splatting
    cd gaussian-splatting
    pip install -r requirements.txt
    # 训练(提供 images/ 与 sparse/0 的 COLMAP 输出)
    python train.py -s data/my_scene -m output/my_scene
    # 渲染指定视角
    python render.py -m output/my_scene

    渲染结果可视化(Viewer):训练完成后 ns-viewer 或直接打开 .ply 高斯文件,即可在浏览器里实时拖动视角。

    小提示:3DGS 对数据质量很敏感——照片要覆盖足够视角、位姿要尽量准(COLMAP 跑得稳)。场景里有大片弱纹理或反光玻璃时容易"泼"出鬼影,记得多拍几张补视角。

    典型应用场景:实时数字孪生、VR/AR 场景重建、机器人/无人机三维感知、文物/地产扫描、影视级新视角合成。

    3、总结

    今天这篇,把 3D 高斯泼溅(3D Gaussian Splatting) 啃了一遍:

    • 是什么:用一堆 3D 高斯显式表示场景的新视角合成方法;
    • 怎么渲:3D 高斯投影成 2D 斑,按深度 α 混合成图,全程可微;
    • 强在哪:显式表达 + GPU 光栅化,训练和渲染都比 NeRF 快几个数量级;
    • 怎么用:nerfstudio 一条命令训练,Viewer 里实时拖视角;
    • 往哪走:它是 3D 重建/实时渲染的事实新标准,和 NeRF 是"快慢双雄",现在新项目基本首选 3DGS。

    到这儿,咱的"基础模型系列"再添一员猛将:SAM(分割)+ CLIP(图文)+ DINOv2(表征)+ 3DGS(三维),从 2D 到 3D 全齐活。

    要是这篇对你有帮助,点赞 + 收藏 + 关注 三连走起,鱼哥继续带你从 0 到 1 啃透计算机视觉。下篇想看 ControlNet 啥,评论区留言,咱接着唠~

    我是小鱼:

    • CSDN 博客专家;
    • AIGC MVP专家;
    • 阿里云 专家博主;
    • 51CTO博客专家;
    • 企业认证金牌面试官;
    • 多个头部名企认证&特邀讲师等;
    • 名企签约职场面试培训、职场规划师;
    • 多个国内主流技术社区的认证专家博主;
    • 多款主流产品(阿里云等)评测一等奖获得者;

    关注小鱼,学习【机器视觉与目标检测】最新最全的领域知识。

    赞(0)
    未经允许不得转载:171主机测评 » 【机器视觉】最强算法之:3D高斯泼溅(3D Gaussian Splatting)
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址