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

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

  • 1、引言
  • [2、3D高斯泼溅(3D Gaussian Splatting)](#2、3D高斯泼溅(3D Gaussian Splatting))
    • [2.1 定义与解析](#2.1 定义与解析)
    • [2.2 核心原理](#2.2 核心原理)
      • [2.2.1 用"一团团高斯"表示三维场景](#2.2.1 用"一团团高斯"表示三维场景)
      • [2.2.2 泼溅(Splatting):3D → 2D 投影](#2.2.2 泼溅(Splatting):3D → 2D 投影)
      • [2.2.3 可微渲染:从图像反推高斯](#2.2.3 可微渲染:从图像反推高斯)
      • [2.2.4 为啥比 NeRF 快这么多](#2.2.4 为啥比 NeRF 快这么多)
    • [2.3 实现方式 / 工作流程](#2.3 实现方式 / 工作流程)
    • [2.4 算法公式](#2.4 算法公式)
    • [2.5 代码示例](#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∑Nciαij=1∏i−1(1−αj)

按深度从远到近排序,把覆盖同一像素的所有高斯,用"透明度加权"叠起来,得到像素颜色 C C C。整个过程可导,所以能拿"渲染图 vs 真实图"的差(如 L1 + D-SSIM 损失)反向传播,端到端优化每个高斯的参数。

2.2.4 为啥比 NeRF 快这么多

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

2.3 实现方式 / 工作流程

典型流程(以 nerfstudio 为例):

  1. 准备数据:对同一物体/场景拍摄几十~上百张带位姿(pose)的照片;

  2. 初始化:用 SfM(如 COLMAP)得到稀疏点云,作为高斯的初始位置;

  3. 优化:可微渲染 + 损失反传,迭代调整每个高斯的参数,并做自适应增删;

  4. 实时渲染 :保存高斯属性,从任意视角 .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∑Nciαij=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):

bash 复制代码
# 安装 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 扩展):

bash 复制代码
# 官方仓库: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博客专家;
  • 企业认证金牌面试官;
  • 多个头部名企认证&特邀讲师等;
  • 名企签约职场面试培训、职场规划师;
  • 多个国内主流技术社区的认证专家博主;
  • 多款主流产品(阿里云等)评测一等奖获得者;

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

相关推荐
w_zero_one2 小时前
算法--桶思想
java·开发语言·算法
程序员陆通2 小时前
实测 Magpie 和 CC Switch,多个AI 编程工具共用所有订阅和 API 额度
人工智能
飞猫的边缘AI2 小时前
MCU面试开放题
人工智能·mcu·面试·求职招聘·flash·ram·边缘ai
Autumn_ing2 小时前
国内有好用的设计智能体吗?Paico、墨刀AI客户端与 Codex 怎么分工
人工智能·墨刀ai客户端·设计智能体
QXWZ_IA2 小时前
无人机巡检油气管道如何实现自主飞行和AI识别?
人工智能·无人机
zhangfeng11332 小时前
大语言模型 Greedy Decoding,贪心解码 / 贪心搜索
人工智能·语言模型·自然语言处理
四季豆333 小时前
AI时代中小企业如何低成本提升数据和知识质量?
大数据·人工智能·数据挖掘
张建飞(Frank)3 小时前
从零构建Agent(十):Model管理
人工智能·agent
沐曦股份MetaX3 小时前
沐曦股份亮相CCF第三届算力活动:重磅发布Token算力普惠计划,赋能科研新时代
人工智能·科技·ai·开源·gpu算力