Master Complex Domain 3dgs

系统化掌握 3D Gaussian Splatting 工作流

🎯 工作流概览

第0阶段        第1阶段        第2-3阶段      第4阶段        第5-6阶段
目标锚定      压缩编码      传输+解调      破坏测试      校验固化
   ↓            ↓            ↓            ↓            ↓
[问题驱动] → [知识索引] → [理解机制] → [找边界] → [长期记忆]

📋 执行流程

当前状态

领域: 3D Gaussian Splatting (3DGS) 目标: 理解底层原理(从输入图像到3D场景表示的完整机制) 阶段: 从第0阶段开始


第0阶段:目标锚定

核心任务

在开始学习前,明确问题驱动的锚点。

引导问题

1. 三问法(请回答以下问题)

  • 你要解决什么具体问题

    • 不是"了解3DGS",而是"能用3DGS做___"
    • 例如:实现从2D图像快速重建3D场景 / 优化3DGS渲染速度 / 理解可微渲染管线
  • 3周后,你要能完成哪个可演示任务

    • 示例:从头实现一个简化版3DGS渲染器 / 调试训练优化过程 / 对比3DGS与NeRF的性能
  • 3DGS领域80%场景下,最核心的20%是什么?

    • 提示:高斯投影、协方差变换、Alpha Blending、可微优化

2. 建立"问题-知识"映射

请列出你当前面临的具体问题场景:

问题场景需要的概念优先级
示例:为什么用高斯而不用点云?连续性、可微性、高效渲染P0
示例:如何从2D图优化3D高斯?可微渲染、梯度反传P0
示例:为什么3DGS比NeRF快?光栅化 vs 体渲染P0

3. 设定"止损失限"

  • 时间预算:____ 小时
  • 深度边界:达到"能实现/调优"即停,不追求"推导所有数学公式"

🎯 本阶段产出

  • 一张问题驱动清单(最多3个核心问题)
  • 一张ROI雷达图(时间/深度/覆盖度)

第1阶段:压缩编码

核心任务

建立知识索引,但强制压缩,避免信息过载。

SOP动作

1. 三书目录对比法

推荐资源(论文/代码/教程):

必读论文:

  1. 3D Gaussian Splatting for Real-Time Radiance Field Rendering (SIGGRAPH 2023)
    • 原始论文,包含所有核心原理

代码实现: 2. official-3dgs-repo (Inria NVIDIA)

教程/分析: 3. 3D Gaussian Splatting Explained (各种博客/视频)

  • 推荐搜索:kerbl.bernhard@gmail.com 的技术报告

用对齐章节,标记重合度:

  • 重合3次 → 【核心支柱】(必须掌握)
  • 重合2次 → 【重要概念】(理解即可)
  • 重合1次 → 【边缘知识】(用到再查)

核心支柱预判:

  1. 3D高斯表示 (位置、协方差、不透明度、球谐函数)
  2. 可微光栅化 (投影、排序、Alpha Blending、梯度计算)
  3. 自适应优化 (密集化、剪枝、重置)

2. 建立"黑话词典"(严格限制30个词)

每个词只记3样:

术语:3D Gaussian
一句话定义:用椭球体(由位置+协方差矩阵定义)表示3D空间中的体素
典型场景:表示场景中的光辐射分布
它不是什么:不是简单的点云(没有连续性),不是Mesh(没有显式的面)

术语:Covariance Matrix
一句话定义:3x3矩阵,控制高斯的形状(大小、方向、拉伸)
典型场景:让高斯适应场景的几何结构
它不是什么:不是对角矩阵(可以有旋转)

术语:Spherical Harmonics (SH)
一句话定义:用球面基函数编码视角相关的颜色
典型场景:表示高光、金属反射等各向异性效果
它不是什么:不是RGB三通道(是视角相关的)

术语:Splatting
一句话定义:将3D高斯投影到2D屏幕并累加颜色
典型场景:渲染管线中的核心步骤
它不是什么:不是简单的光栅化(需要排序和Alpha混合)

术语:Differentiable Rasterization
一句话定义:可计算梯度的光栅化,允许从2D损失优化3D参数
典型场景:训练时的反向传播
它不是什么:不是传统GPU光栅化(没有梯度)

术语:Alpha Blending
一句话定义:按深度排序后,从前到后累加颜色(类似透明物体渲染)
典型场景:合成最终像素颜色
它不是什么:不是简单的Z-buffer(需要正确的前后关系)

术语:Densification
一句话定义:根据梯度统计动态增加/删除高斯
典型场景:优化初期快速增加高斯密度
它不是什么:不是固定数量的点云

术语:PSNR / SSIM / LPIPS
一句话定义:评估渲染图像与真实图像的相似度指标
典型场景:训练时的损失函数
它不是什么:不是直接优化视觉质量的指标(PSNR高不一定好看)

3. 绘制"知识地形图"

           [高价值+高频] → 核心区(深度学习)
                  │
  [低价值+高频] ──┼── [高价值+低频] → 深入区(理解原理)
                  │
           [低价值+低频] → 查阅区(用到了再搜)

3D Gaussian Splatting 知识地形图

核心区(高价值+高频) - 必须深度掌握:

  • 3D高斯的参数化(位置、协方差、不透明度、SH系数)
  • 协方差的视角变换(世界空间 → 屏幕空间)
  • 可微光栅化管线(投影、排序、累加、梯度计算)
  • 自适应优化策略(密集化、剪枝、重置)

深入区(高价值+低频) - 理解原理即可:

  • 球谐函数的数学推导
  • 梯度计算的链式法则
  • 快速不同iable rasterization算法细节
  • 与NeRF、Mip-Splatting等方法的对比

查阅区(低价值+低频) - 用到再搜:

  • 特定数据集的准备细节
  • CUDA实现的优化技巧
  • 不同GPU的渲染速度benchmark
  • 各种后处理方法

4. 冗余检查

每学完一个子章节,问自己:

  • 这3个概念是否可以合并为1个?
  • 这个例子是否可以用更简单的替换?
  • 强制输出:用1句话+1张图总结

🎯 本阶段产出

  • 压缩版知识地图(A4纸1页)
  • 30词黑话词典(每个词≤30字)
  • 3个核心支柱(高斯表示 + 可微光栅化 + 自适应优化)

第2阶段:建立信号通路

核心任务

打通"I→O"的主流程,不带任何异常处理

SOP动作

1. 定义最小I/O系统

输入(Input)                          输出(Output)
─────────────────────────────────────────────────────────
多视角2D图像 + 相机参数    →    3D高斯集合 + 渲染图像
(Colmap/Neuralangelo)           (优化后的场景表示)

2. 跑通Happy Path(Hello World级)

推荐使用官方实现:

# 1. 环境准备
git clone https://github.com/nerfstudio-project/gsplat.git
cd gsplat
pip install -e .

# 2. 准备数据(使用小数据集)
wget https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/evaluation/data/tandt_db.zip
unzip tandt_db.zip

# 3. 训练
python train.py -s data/tandt/train -m output/tandt

# 4. 渲染/查看
python render.py -m output/tandt -s data/tandt/train

记录每个步骤的状态变化

Step0: 数据准备 → 状态A(多视角图像+相机位姿)
Step1: 初始化高斯(从SfM点云) → 状态B(初始3D高斯集合)
Step2: 训练循环(迭代优化) → 状态C(逐步优化的高斯参数)
  - 每次迭代:渲染 → 计算损失 → 反向传播 → 更新高斯 → 自适应调整
Step3: 渲染输出 → 状态D(新视角的渲染图像)

3. 绘制"主流程数据流图"

┌─────────────┐    ┌─────────────┐    ┌─────────────┐
│  输入数据   │ →  │ 初始化高斯  │ →  │  训练循环   │
│ (图像+相机) │    │  (SfM点云)  │    │  (迭代优化) │
└─────────────┘    └─────────────┘    └─────────────┘
     │                  │                  │
  Colmap格式        点云→高斯           可微渲染
                                        ↓
                              ┌─────────────┐    ┌─────────────┐
                              │  自适应控制 │ →  │  渲染结果   │
                              │ (密集/剪枝) │    │  (新视角图) │
                              └─────────────┘    └─────────────┘

训练循环内部流程

┌─────────────────────────────────────────────────────┐
│                  单次训练迭代                        │
├─────────────────────────────────────────────────────┤
│                                                     │
│  3D高斯集合                                          │
│     ↓                                               │
│  [投影] 世界坐标 → 屏幕坐标(协方差变换)            │
│     ↓                                               │
│  [排序] 按深度从后往前排序                           │
│     ↓                                               │
│  [光栅化] Alpha Blending累加颜色                     │
│     ↓                                               │
│  渲染图像                                            │
│     ↓                                               │
│  [损失] L1 + SSIM对比真实图像                        │
│     ↓                                               │
│  [反向] 计算梯度 → 更新高斯参数                      │
│     ↓                                               │
│  [自适应] 密集化/剪枝/重置                           │
│     ↓                                               │
│  更新后的3D高斯集合                                   │
│                                                     │
└─────────────────────────────────────────────────────┘

4. 建立"观测点"

在流程图的每个节点标记:

观测点清单

  • 初始化阶段

    • 观测:高斯数量、位置分布、初始大小
    • 工具:可视化点云、打印协方差统计
  • 投影阶段

    • 观测:屏幕空间的高斯形状、大小
    • 工具:可视化2D高斯椭圆
  • 光栅化阶段

    • 观测:每个像素的累加过程、Alpha值分布
    • 工具:TensorBoard监控中间渲染结果
  • 损失计算

    • 观测:PSNR/SSIM曲线、梯度模长
    • 工具:记录训练日志
  • 自适应阶段

    • 观测:高斯数量变化、梯度统计
    • 工具:打印密集化/剪枝统计

🎯 本阶段产出

  • 主流程数据流图(1张完整流程图)
  • Hello World级Demo(官方代码成功运行)
  • 观测点清单(每个节点的观测方法)

第3阶段:解调分析

核心任务

打开黑盒,理解核心机制,但继续压缩。

SOP动作

1. 寻找"元模型"(第一性原理)

对3DGS的核心概念,强迫自己问3次"为什么":

为什么用高斯?
→ 因为高斯是连续可微的,且易于渲染(投影后仍是2D高斯)
→ 为什么需要连续可微?
→ 因为要反向传播梯度,从2D图像优化3D参数
→ 为什么用高斯而不是其他可微表示?
→ 元模型:高斯在**计算效率(可解析投影)**和**表达能力(任意形状)**之间取得了最佳平衡
为什么需要球谐函数(SH)?
→ 因为颜色是视角相关的(不同角度看同一物体颜色不同)
→ 为什么不能直接用RGB?
→ 因为RGB只能表示视角无关的颜色,无法表示高光、反射
→ 为什么用SH而不是其他表示?
→ 元模型:SH是**球面上的正交基**,能高效编码任意视角相关的信号,且易于求导
为什么用Alpha Blending而不是体渲染?
→ 因为体渲染需要沿射线积分,计算量大
→ 为什么不能直接用最前层高斯?
→ 因为半透明效果、远处的物体需要透过近处物体
→ 为什么用从前到后的累加?
→ 元模型:Alpha Blending模拟了**光线的物理传播**(被前面物体吸收+透过),且计算高效

2. 建立"最小可行性类比"

核心概念生活类比验证(能说通吗)
3D高斯用彩色棉花糖搭建场景(每个棉花糖可以拉伸、旋转、有透明度)✅ 棉花糖可以任意变形,叠加产生混合效果
协方差变换从斜上方看圆形盘子会变成椭圆✅ 视角变换改变形状
Alpha Blending画水彩颜料,后画的颜料覆盖在先画的上面✅ 按顺序累加,透明度影响效果
梯度反传根据最终画作质量,告诉画家"这里应该多画/少画"✅ 从输出误差反馈到输入调整
密集化在画得不好的地方多添几笔,在多余的地方擦掉✅ 根据需要动态增减
球谐函数根据观察角度改变颜色的变色龙皮肤✅ 视角相关的颜色变化

3. 追问"魔法"(De-magic)

指着流程图的每个节点问:

[初始化魔法]

  • “SfM点云是怎么变成高斯的?”
    • 解答:每个点 → 一个高斯(中心=点位置,初始大小=启发式,初始颜色=点颜色)

[投影魔法]

  • “3D协方差怎么变成2D协方差?”
    • 解答:Σ_view = J^T Σ_world J(J是投影变换的雅可比矩阵)
    • 如果你觉得"自动完成",那是盲区!手动推导一遍!

[光栅化魔法]

  • “到底怎么累加颜色的?”
    • 解答:对每个像素,收集所有覆盖它的高斯,按深度排序,从前到后累加:
      color = 0
      alpha = 0
      for gaussian in sorted_gaussians:
          c = gaussian.color
          a = gaussian.alpha * gaussian_2d(x, y)
          color = color + (1 - alpha) * a * c
          alpha = alpha + (1 - alpha) * a
      

[梯度魔法]

  • “损失怎么反传到3D高斯的?”
    • 解答:链式法则 → dL/dΣ → dL/d位置 → 更新高斯参数

[自适应魔法]

  • “怎么知道哪里需要增加高斯?”
    • 解答:统计梯度大小,梯度大的区域说明当前高斯不够,需要密集化

4. 建立"概念依赖树"

        [3D Gaussian Splatting]
                  │
    ┌─────────────┼─────────────┐
    │             │             │
[高斯表示]   [可微渲染]   [自适应优化]
    │             │             │
    │        ┌────┴────┐        │
  [SfM]    [投影]   [光栅化]   [密集化]
    │        │        │        │
  点云    [协方差] [Alpha Blending] [剪枝]
         变换    排序+累加      重置

必须掌握的前置知识

  • 线性代数:矩阵乘法、协方差矩阵
  • 多视图几何:相机投影、世界坐标 vs 屏幕坐标
  • 计算机图形学:光栅化、Alpha Blending
  • 优化理论:梯度下降、反向传播

🎯 本阶段产出

  • 3个元模型(为什么用高斯/为什么用SH/为什么用Alpha Blending)
  • 5个关键类比(棉花糖/盘子/水彩/变色龙等)
  • 概念依赖树(修剪版,只保留主干)
  • “魔法"消除清单(每个黑盒步骤的手动推导)

第4阶段:破坏测试与边界探索 ⭐

核心任务

通过破坏性测试,找到系统的真实边界和失效场景。

SOP动作

1. 建立异常场景矩阵

         正常场景          非正常场景          极端场景
──────────────────────────────────────────────────────────
输入层    多视角图像        单视角/视角缺失      图像模糊/运动模糊
          已知相机参数      相机位姿错误         极端光照变化
高斯层    合理初始化        随机初始化          空白初始化
          正常训练          固定高斯数量        数量爆炸/塌陷
渲染层    标准视角          极端视角(仰视/俯视)  远离训练视角
优化层    正常收敛          不收敛/振荡         过拟合

2. 执行"愚蠢破坏流程”

Level 1:单点破坏

┌─────────┐    ┌─────────┐    ┌─────────┐
│  输入   │ →  │  训练   │ →  │  输出   │
└────┬────┘    └────┬────┘    └────┬────┘
     │             │              │
   [破坏]        [破坏]         [破坏]

逐个节点破坏,观察现象:

[输入层破坏]

  • 输入空白图像:能训练吗?高斯会如何?
    • 预期:损失不下降,高斯保持初始化状态
  • 输入单视角:能重建3D吗?
    • 预期:严重过拟合,只能在训练视角渲染,新视角崩溃
  • 相机位姿错误:平移/旋转错误10度,会发生什么?
    • 预期:3D高斯拉伸变形,渲染模糊

[高斯层破坏]

  • 初始化为空(0个高斯)
    • 预期:密集化策略会逐步增加,但可能收敛极慢
  • 初始化为随机位置
    • 预期:训练时间长,可能收敛到局部最优
  • 固定高斯数量(禁用密集化/剪枝)
    • 预期:质量下降,细节丢失

[渲染层破坏]

  • 禁用排序(随机顺序)
    • 预期:渲染完全错误(Alpha Blending依赖顺序)
  • 固定协方差为单位矩阵(不可变形):
    • 预期:渲染质量大幅下降(无法适应场景几何)

[优化层破坏]

  • 学习率过大(10x):
    • 预期:损失振荡,高斯爆炸/消失
  • 学习率过小(0.1x):
    • 预期:收敛极慢
  • 禁用自适应策略
    • 预期:需要在初始化时提供足够多的点云

Level 2:组合破坏

  • [单视角输入] + [大学习率] = ?
    • 预期:快速过拟合到单视角
  • [模糊输入] + [固定高斯数] = ?
    • 预期:无法恢复细节,渲染模糊
  • [相机位姿误差] + [视角外推] = ?
    • 预期:几何变形严重

Level 3:压力破坏

  • 输入图像数量扩大10倍
    • 预期:训练时间线性增加,质量提升但边际收益递减
  • 分辨率扩大4倍
    • 预期:显存爆炸,速度下降
  • 训练时间压缩(强制1000次迭代)
    • 预期:质量下降,高斯分布不均匀
  • 场景复杂度提升(植被/毛发)
    • 预期:需要更多高斯,可能出现artifacts

3. 反向推理检查表

异常场景观察现象根本原因应对策略
单视角输入新视角渲染崩溃缺乏多视图几何约束使用先验/正则化
学习率过大损失振荡梯度步长超出稳定区域降低学习率/梯度裁剪
禁用排序渲染错误Alpha Blending违反物理顺序必须排序
固定协方差细节丢失无法适应几何使用可学习协方差
极端视角渲染模糊训练数据未覆盖增加训练视角/正则化

4. 建立"负面知识库"

概念:3D Gaussian Splatting
何时不用它:
- 需要严格的几何一致性(用Mesh/NeRF)
- 场景极大(城市级)→ 高斯数量爆炸
- 需要物理精确的反射/折射(用路径追踪)
- 动态场景(需要时序高斯)

典型反模式:
- 用单视角图像重建3D(几何丢失)
- 期望Mesh一样的拓扑(高斯没有面)
- 忽略相机标定(位姿错误会破坏重建)

5. Trade-off竞品对比

场景特征3DGSNeRFMesh选择
实时渲染✅ 60fps+❌ <1fps3DGS
训练速度✅ 快❌ 慢N/A3DGS
几何质量⚠️ 无拓扑⚠️ 隐式✅ 精确Mesh
视角质量✅ 高✅ 高⚠️ 需要贴图3DGS/NeRF
内存占用⚠️ 大⚠️ 大✅ 小Mesh
可编辑性⚠️ 难❌ 难✅ 易Mesh

核心追问

  • “什么情况下,我绝对不应该用3DGS?”
    • 需要精确几何(CAD、工程仿真)
    • 需要拓扑编辑(动画绑定)
    • 场景极大且内存受限

🎯 本阶段产出

  • 异常场景矩阵(至少覆盖9个场景)
  • 3级破坏测试报告(每个Level记录现象+根因)
  • 负面知识库(3DGS的3个"不用"场景)
  • Trade-off决策树(3DGS vs NeRF vs Mesh)

第5阶段:校验与对齐

核心任务

通过输出倒逼输入,检验真实掌握程度。

SOP动作

1. 费曼技巧(严格版)

Step 1:给大一新生讲

  • 禁止使用任何专业术语
  • 必须用第3阶段建立的类比
  • 如果卡住,标记卡点,回到对应阶段补课

示例(用棉花糖类比):

“想象你有一堆透明的彩色棉花糖,每个棉花糖可以被拉伸、旋转,也可以调整透明度。现在你要用这些棉花糖搭建一个场景的3D模型。你从不同角度拍照,然后根据照片调整棉花糖的位置、形状、颜色,直到从任何角度看,棉花糖堆成的样子都和真实照片一样。这就是3D Gaussian Splatting。”

Step 2:5岁挑战

  • 能否用"画画/搭积木"解释?

示例

“就像画画一样,你先在大画布上铺很多小色块,然后看着照片调整每个色块的位置和颜色。不同的是,这里的色块是3D的,可以从任何角度看。”

2. 建立"校验点系统"

层级1:能复述(语义层)

  • 能用1句话定义3DGS
    • “用可优化的3D高斯集合表示场景,通过可微渲染从多视角图像学习”

  • 能画出主流程图
  • 能说出3个典型场景
    • “NeRF实时化、新视角合成、3D重建”

层级2:能应用(操作层)

  • 能解决第0阶段设定的3个问题
  • 能预测"如果我改动X参数,会发生什么"
    • “增大学习率 → 收敛加快但可能振荡”

    • “禁用密集化 → 细节丢失”

  • 能独立搭建Hello World级Demo

层级3:能调试(推理层)

  • 能解释异常现象的根因
    • “新视角渲染模糊 → 训练视角覆盖不足 / 高斯过拟合”

    • “训练不收敛 → 学习率过大 / 相机位姿错误”

  • 能提出改进方案
    • “加入正则化约束 / 使用自适应学习率 / 数据增强”

  • 能对比不同方案的Trade-off
    • “3DGS快但内存大,NeRF慢但质量高”

3. 极端假设游戏

回到第2阶段的流程图,问5个"what if":

  • 如果高斯数量扩大1000倍,哪里先崩?
    • 显存爆炸,渲染速度下降(每帧要处理更多高斯)

  • 如果训练图像分辨率从512x512变成8K,会发生什么?
    • 显存不够,训练极慢,可能需要梯度checkpoint

  • 如果相机位姿完全错误(随机),能训练吗?
    • 不能,会收敛到错误的几何(几何优化依赖正确的位姿)

  • 如果禁用自适应策略,只靠初始点云,会怎样?
    • 质量严重依赖初始点云质量,细节无法恢复

  • 如果只用RGB损失(不用SSIM),会发生什么?
    • 渲染模糊,过度平滑(SSIM保留结构信息)

能答对3个以上,算"真懂"。

4. 知识迁移测试

用学到的概念解释一个看似无关的现象。

示例1:用"高斯投影"解释"为什么斜着看硬币变成椭圆"

  • 硬币是圆形的,3D空间中是一个圆
  • 斜着看时,相当于相机视角变换
  • 圆的协方差矩阵(单位圆)经过投影变换,变成椭圆
  • 这就是3DGS中协方差变换的物理意义

示例2:用"Alpha Blending"解释"为什么透过半透明窗帘看外面是模糊的"

  • 窗帘的每一层都有透明度和颜色
  • 光线穿过多层窗帘时,每层都吸收一部分光
  • 从外到内累加(Alpha Blending),最终看到的颜色是多层混合的结果
  • 就像3DGS中多个高斯的前后叠加

示例3:用"密集化"解释"为什么画画时先铺大色块再细化"

  • 先铺大色块 = 初始化粗粒度的高斯
  • 细化 = 在细节不足的地方增加更多小高斯(密集化)
  • 擦掉多余 = 剪枝
  • 都是"从粗到细"的优化策略

🎯 本阶段产出

  • 费曼录音/文稿(≤3分钟的通俗解释)
  • 校验点通过证明(Demo运行截图、调试日志)
  • 极端假设答案(至少回答3个)
  • 知识迁移案例(1-2个跨领域解释)

第6阶段:解码固化为长期记忆

核心任务

建立知识索引卡片,确保未来可快速提取。

SOP动作

1. 建立"认知索引卡"(每概念1张)

┌─────────────────────────────────────────────┐
│ 概念:3D Gaussian Splatting                 │
├─────────────────────────────────────────────┤
│ 一句话:用可优化的3D高斯集合表示场景,通过   │
│         可微渲染从多视角图像学习             │
├─────────────────────────────────────────────┤
│ 本质(元模型):                            │
│ 可微渲染 + 自适应优化 = 高质量+高速度        │
│ 高斯在计算效率(可解析投影)和表达能力       │
│ (任意形状)之间取得最佳平衡                 │
├─────────────────────────────────────────────┤
│ 典型场景:NeRF实时化、新视角合成、3D重建     │
├─────────────────────────────────────────────┤
│ 它不是什么:不是点云(没有连续性),         │
│            不是Mesh(没有拓扑),            │
│            不是NeRF(不用体渲染)            │
├─────────────────────────────────────────────┤
│ Trade-off:速度快(60fps+)vs 内存大        │
│            质量高 vs 无拓扑                  │
│            训练快 vs 需要多视角              │
├─────────────────────────────────────────────┤
│ 何时不用:需要精确几何、场景极大、           │
│           动态场景、内存受限                 │
├─────────────────────────────────────────────┤
│ 类比:用可变形的彩色棉花糖搭建场景           │
└─────────────────────────────────────────────┘
┌─────────────────────────────────────────────┐
│ 概念:协方差变换 (Covariance Transform)      │
├─────────────────────────────────────────────┤
│ 一句话:3D高斯的形状和方向会随视角变化        │
├─────────────────────────────────────────────┤
│ 本质(元模型):                            │
│ Σ_view = J^T Σ_world J                     │
│ 雅可比矩阵编码了投影变换的局部线性化         │
├─────────────────────────────────────────────┤
│ 典型场景:渲染时从任意视角看高斯             │
├─────────────────────────────────────────────┤
│ 它不是什么:不是简单的缩放(有旋转)         │
├─────────────────────────────────────────────┤
│ Trade-off:精确变换(O(N^3))vs             │
│            近似分解(O(N))                  │
├─────────────────────────────────────────────┤
│ 何时不用:高斯固定为单位球(退化)           │
├─────────────────────────────────────────────┤
│ 类比:斜着看盘子,圆形变成椭圆               │
└─────────────────────────────────────────────┘
┌─────────────────────────────────────────────┐
│ 概念:自适应优化 (Adaptive Densification)    │
├─────────────────────────────────────────────┤
│ 一句话:根据梯度统计动态增加/删除高斯         │
├─────────────────────────────────────────────┤
│ 本质(元模型):                            │
│ 梯度大 = 信息不足 → 密集化                   │
│ 梯度小 = 冗余 → 剪枝                         │
│ 视角外推 → 重置                              │
├─────────────────────────────────────────────┤
│ 典型场景:训练初期快速增加密度,后期稳定      │
├─────────────────────────────────────────────┤
│ 它不是什么:不是固定数量的点云               │
├─────────────────────────────────────────────┤
│ Trade-off:质量提升 vs 计算开销              │
├─────────────────────────────────────────────┤
│ 何时不用:初始点云质量极高(够用)           │
├─────────────────────────────────────────────┤
│ 类比:画画时先铺大色块,细节不足的地方加笔   │
└─────────────────────────────────────────────┘

2. 建立"故障诊断树"

问题:渲染质量差(模糊/伪影)
    │
    ├─ 检查点1:训练视角渲染质量
    │      ├─ 好 → 问题在新视角外推
    │      │      ├─ 对策:增加训练视角
    │      │      └─ 对策:使用正则化
    │      └─ 差 → 继续排查
    │
    ├─ 检查点2:高斯数量
    │      ├─ 过少(<1万) → 需要密集化
    │      └─ 过多(>1000万) → 过拟合风险
    │
    ├─ 检查点3:损失曲线
    │      ├─ 不下降 → 学习率/位姿问题
    │      └─ 振荡 → 学习率过大
    │
    └─ 检查点4:相机位姿
           ├─ Colmap输出 → 检查reprojection error
           └─ 手动标定 → 验证外参
问题:训练速度慢
    │
    ├─ 检查点1:GPU利用率
    │      ├─ 低(<50%) → CPU瓶颈(数据加载)
    │      └─ 高(>90%) → 正常,只是计算量大
    │
    ├─ 检查点2:高斯数量
    │      ├─ 爆炸式增长 → 降低密集化阈值
    │      └─ 正常范围 → 减少图像数量/分辨率
    │
    └─ 检查点3:渲染分辨率
           ├─ >2K → 降至512/1K训练
           └─ 正常 → 考虑使用更小的backbone

3. 制定"复习计划"(间隔重复)

  • 第1天:学完后立即复习(输出索引卡)
  • 第3天:重新画一遍流程图(不看资料)
  • 第7天:回答"极端假设"问题
  • 第30天:用新知识解释一个现象
  • 第90天:实现一个简化版3DGS渲染器

4. 建立"知识触发器"

为每个核心概念设定触发条件

触发条件立即想起的概念
看到"新视角合成"NeRF、3DGS、光度一致性
看到"实时渲染"光栅化、3DGS、Mesh
看到"半透明物体"Alpha Blending、体渲染
看到"视角相关颜色"球谐函数、BRDF
看到"优化不稳定"学习率调度、梯度裁剪
看到"内存爆炸"剪枝、蒸馏、量化

🎯 本阶段产出

  • 核心概念索引卡(≤10张)
  • 故障诊断树(2个典型问题)
  • 复习计划(在日历设置提醒)
  • 触发器清单(贴在工位可见处)

🎯 完整检查清单

学前(第0阶段)

  • 写下3个要解决的具体问题
  • 设定时间预算和深度边界
  • 绘制ROI雷达图

编码(第1阶段)

  • 对比3篇论文/代码,标记重合度
  • 建立30词黑话词典
  • 用1句话+1张图总结每个子章节

传输(第2-3阶段)

  • 跑通官方代码Demo
  • 绘制主流程数据流图
  • 建立3个元模型和5个类比
  • 追问"魔法"并消除盲区(手动推导协方差变换、Alpha Blending)

校验(第4阶段)

  • 完成异常场景矩阵(9个场景)
  • 执行3级破坏测试(单点/组合/压力)
  • 建立"负面知识库"(3个不用场景)
  • 对比Trade-off(3DGS vs NeRF vs Mesh)

解码(第5-6阶段)

  • 完成费曼复述(录音/文稿)
  • 通过3层级校验点(复述/应用/调试)
  • 回答极端假设问题(至少3个)
  • 完成知识迁移测试(1-2个案例)
  • 建立认知索引卡(≤10张)
  • 制定复习计划

💡 关键原则

  1. 压缩是学习的起点:不压缩,信息会像噪声一样淹没信号

    • 3DGS的核心可以压缩为:高斯表示 + 可微渲染 + 自适应优化
  2. 破坏是理解的捷径:正常场景看不出设计意图,异常场景才能暴露边界

    • 通过禁用排序、固定协方差、单视角输入等破坏性测试,理解每个组件的必要性
  3. 输出是掌握的标志:能复述≠能应用,能应用≠能创造

    • 能手动推导协方差变换、能诊断训练问题、能实现简化版渲染器
  4. 迁移是融会贯通的证明:能在新语境中使用,才算真正理解

    • 能用高斯投影解释硬币斜看成椭圆,能用Alpha Blending解释窗帘透光

📚 推荐学习路径

快速通道(1周)

  • Day 1-2: 第0-1阶段(目标锚定+压缩编码)
  • Day 3-4: 第2-3阶段(跑通代码+理解机制)
  • Day 5-6: 第4阶段(破坏测试+边界探索)
  • Day 7: 第5-6阶段(费曼技巧+输出索引卡)

深入通道(3周)

  • 每个阶段2-3天,完整执行所有SOP动作
  • 重点: 手动推导数学公式(协方差变换、梯度计算)
  • 产出: 实现一个简化版3DGS渲染器(PyTorch/CUDA)

实战通道(结合项目)

  • 直接用3DGS解决你的实际问题(例如:重建你的房间)
  • 遇到问题时回到对应阶段补课
  • 产出: 项目Demo + 技术报告

🔗 关键资源

论文:

代码:

教程:

可视化:


记住:你觉得自己理解了3DGS,只有在你能向大一新生讲清楚、能诊断训练问题、能实现简化版渲染器的那一刻,才知道真正理解了。而卡壳的地方,就是真正需要下功夫的地方。


下一步行动

  1. 选择你的学习通道(快速/深入/实战)
  2. 从第0阶段开始,明确你的3个核心问题
  3. 下载官方代码,准备数据集
  4. 开始你的3DGS探索之旅!