# 大作业：3D Gaussian Splatting 室内场景重建

**发布日期**：2026 年 5 月 25 日

**最终截止日期**：2026 年 6 月 21 日

**总分**：28 分

---

## 一、作业背景

### 课程回顾

在前九次作业中，我们沿着几何深度学习的主线，从基础架构走到了 3D 几何表示的前沿：

| 作业 | 数据域 / 表示 | 架构 | 核心思想 |
|------|-------------|------|---------|
| 1-2 | 无结构（向量） | MLP | 通用近似 |
| 3 | 规则网格（图像） | CNN | 平移等变 |
| 4 | 序列 | Transformer | 注意力 + 位置编码 |
| 5 | 图 | GCN / GAT | 消息传递，置换等变 |
| 6 | 点云（显式） | PointNet | 共享 MLP + 对称函数 |
| 7 | 体素（显式） | 3D CNN | 3D 卷积 |
| 8 | SDF（隐式） | DeepSDF | 神经隐式表示 |
| 9 | BRep（参数化） | GNN | 图级分类 |
| **10** | **多视图 → 3D** | **3D Gaussian Splatting** | **可微渲染 + 场景重建** |

本次大作业是课程的**终极挑战**——将前面学到的所有 3D 表示知识汇聚到一个真实的应用场景中：**用手机拍摄的视频重建三维室内场景**。

### 竞赛背景

本作业对标一个真实竞赛——**旧改施工室内重建**：

> 旧改施工的核心痛点，始于"看不清现状"——老旧建筑图纸缺失、室内结构复杂、现场测量耗时耗力。参赛者仅需利用普通手机拍摄室内视频，通过三维重建算法实现高精度三维场景重建，输出可用于施工勘测的可量化模型。

赛题说明网址：[广联达赛题B](https://ggp.glodon.com/gdc26/)

竞赛考核指标：
- 技术方案文档完整、清晰
- 三维重建场景模型完整、效果优良
- 模型精度达到 20cm（10cm 内为加分项）
- 演示程序可运行

### 什么是 3D Gaussian Splatting？

**3D Gaussian Splatting（3DGS）**（Kerbl et al., SIGGRAPH 2023）是当前最先进的实时三维场景重建方法之一。它用大量**三维高斯椭球**来表示场景——每个高斯有位置、形状（协方差）、颜色（球谐系数）和不透明度——通过**可微光栅化**将这些高斯投影到相机平面，与真实照片对比并优化。

与作业八的 DeepSDF 相比：

| | DeepSDF（作业八） | 3D Gaussian Splatting（本作业） |
|---|---|---|
| 表示方式 | 连续隐式函数 $f(\mathbf{z}, \mathbf{x}) \to s$ | 离散高斯集合 $\{(\mu_i, \Sigma_i, c_i, \alpha_i)\}$ |
| 优化目标 | SDF 值回归 | 渲染图像与真实照片的像素误差 |
| 输入数据 | 3D 查询点 + SDF ground truth | 多视角照片 + 相机位姿 |
| 输出 | 形状的零等值面 | 任意视角的渲染图像 |
| 实时性 | 需要 Marching Cubes 后处理 | **实时渲染**（>100 FPS） |

### 整体 Pipeline

```
手机拍视频 → ffmpeg 抽帧 → COLMAP (SfM) → 稀疏点云 + 相机位姿 → 3DGS 训练 → 渲染 / 查看
```

其中 **COLMAP** 是一个开源的 Structure from Motion (SfM) 工具，它从一组照片中恢复出每张照片的拍摄位姿（相机在哪、朝哪看）和一个稀疏的 3D 点云。这是 3DGS 训练的**必需前置步骤**——没有相机位姿，3DGS 无法知道如何将 3D 高斯投影到 2D。

---

## 二、作业总览与评分体系

本作业分为两个阶段，跨越 3 周。

| 阶段 | 内容 | 分值 |
|------|------|------|
| Stage 1：Pipeline 热身 | 拍摄小物体，跑通 COLMAP + 3DGS | 8 分 |
| Stage 2：竞赛室内重建 | 在共享室内场景上重建 + 优化 + 精度评估 + 创新 + 文档答辩 | 20 分 |
| **合计** | | **28 分** | |

### 时间安排

```
5月25日 —— 发布 Stage 1 + 发布共享室内测试场景

6月1日（星期一）── 个人汇报（每人 5 分钟，共18人）+ 答疑讨论
6月2日（星期二）── 个人汇报（每人 5 分钟，共18人）+ 答疑讨论
6月3日（星期三）── 个人汇报（每人 5 分钟，剩下同学）+ 答疑讨论 + 为Stage 2，现场为没有组队的同学组队

6月7日 23：59（星期日）── Stage 1 提交截止

6月8日（星期一）── 小组汇报与交流Stage 2方案（每组 15 分钟）+ 答疑讨论
6月9日（星期二）── 小组汇报与交流Stage 2方案（每组 15 分钟）+ 答疑讨论
6月10日（星期三）── 小组汇报与交流Stage 2方案（每组 15 分钟）+ 答疑讨论

6月15日（星期一）── 最终答辩（每组 10 分钟）
6月16日（星期二）── 最终答辩（每组 10 分钟）+ 课程总结

6月21日 23：59（星期日）── Stage 2 提交截止
```

### 共享室内测试场景

数据集下载地址：[数据集](https://pan.baidu.com/s/1uFeRpVOfdGZ7Cyw3tTjgsA?pwd=GDC1) 密码：GDC1

所有小组在 Stage 2 阶段必须在以上场景上进行重建。

### 小组要求

- Stage 1 要求个人完成
- Stage 2 可自由组队，**1-5 人/组**
- 充分鼓励使用 AI 工具辅助编码、调参、debug、文档撰写
- 充分鼓励组内分工与组间互助
- 推荐分工：(1) 数据采集/预处理 (2) COLMAP 调参 (3) 3DGS 训练调优 (4) 精度评估 (5) 文档/答辩

---

## 三、环境准备

### 3.1 硬件要求

- **GPU**：NVIDIA GPU，显存 >= 8GB（推荐 RTX 3060 及以上）
- **内存**：>= 16GB RAM
- **存储**：>= 50GB 可用空间
- **手机**：任意可拍视频的智能手机

> 如果没有合适的 GPU，可以使用学校/实验室的计算资源，或使用 AutoDL、Google Colab 等云平台。

### 3.2 安装 COLMAP

COLMAP 用于从照片恢复相机位姿和稀疏点云。

**Ubuntu**：

```bash
sudo apt-get install colmap
```

**macOS**：

```bash
brew install colmap
```

**Windows**：从 [COLMAP Releases](https://github.com/colmap/colmap/releases) 下载预编译二进制文件。

**验证安装**：

```bash
colmap -h
```

### 3.3 安装 3D Gaussian Splatting

```bash
# 克隆官方仓库
git clone https://github.com/graphdeco-inria/gaussian-splatting.git --recursive
cd gaussian-splatting

# 创建 conda 环境
conda env create --file environment.yml
conda activate gaussian_splatting

# 验证安装
python train.py --help
```

> **常见问题**：
> - 如果 `conda env create` 失败，尝试手动安装：`conda create -n gs python=3.8 && conda activate gs && pip install torch torchvision torchaudio && pip install plyfile tqdm`
> - CUDA 版本需与 PyTorch 匹配，参考 [PyTorch 官网](https://pytorch.org/get-started/locally/)
> - `submodules/diff-gaussian-rasterization` 和 `submodules/simple-knn` 需要编译 CUDA 扩展，确保 `nvcc` 可用

### 3.4 安装 ffmpeg

```bash
# Ubuntu
sudo apt-get install ffmpeg

# macOS
brew install ffmpeg

# 验证
ffmpeg -version
```

### 3.5 安装其他依赖

```bash
pip install opencv-python numpy matplotlib scikit-image
```

---

## 四、Stage 1：Pipeline 热身（8 分）

**目标**：用手机拍摄一个简单的小物体（桌面摆件、水杯、书本等），跑通从视频拍摄到 3DGS 渲染的完整 pipeline。

### 步骤一：拍摄视频

用手机拍摄一段**围绕小物体旋转**的视频：

- 时长：10-30 秒
- 要领：匀速环绕物体一圈，保持物体始终在画面中心
- 注意：避免手抖导致的模糊帧，保持光照稳定
- 将视频文件传输到电脑，命名为 `input.mp4`

### 步骤二：视频抽帧 + COLMAP 重建

执行：

```bash
# 抽帧
mkdir -p my_object/input
ffmpeg -i input.mp4 -qscale:v 1 -qmin 1 -vf fps=2 my_object/input/%04d.jpg

# COLMAP 重建
cd gaussian-splatting
python convert.py -s /path/to/my_object
```

运行成功后，用 COLMAP GUI 打开 `my_object/distorted/sparse/0/` 查看稀疏点云和相机位姿。

### 步骤三：3DGS 训练 + 渲染

执行：

```bash
cd gaussian-splatting
python train.py -s /path/to/my_object -m /path/to/my_object/output --iterations 7000
python render.py -m /path/to/my_object/output
python metrics.py -m /path/to/my_object/output
```

渲染结果保存在 `output/train/ours_7000/renders/` 目录中。

### Stage 1 评分（8 分）

只看 **两个关键结果**：

| 分值 | 交付物 | 评分标准 |
|------|--------|----------|
| 3 分 | COLMAP 重建结果 | 稀疏点云截图（COLMAP GUI）：点云覆盖物体主体，相机位姿环绕分布合理 |
| 5 分 | 3DGS 渲染结果 | 渲染的新视角图片（>= 5 张）：物体清晰可辨，无严重伪影，PSNR >= 20dB |

### Stage 1 提交方式

打包为 `学号_stage1.zip`，包含：
- COLMAP 稀疏点云截图
- 3DGS 渲染结果图片（>= 5 张）
- PSNR/SSIM 指标截图

通过 QQ群在线提交。

---

## 五、Stage 2：竞赛室内场景重建（20 分）

**目标**：在共享室内测试场景上，完成高质量的 3DGS 重建，进行精度评估，并通过分析问题和创新改进提升重建质量。

### 5.1 推荐工作流程

```
1. 跑通基线（用Stage 1 流程）
   └── 观察渲染结果，识别问题区域

2. 诊断与改进
   ├── 数据侧：补拍弱覆盖区域、调整抽帧密度、筛选策略
   ├── COLMAP 侧：调参数、检查注册率、尝试不同 matcher
   ├── 3DGS 侧：调超参数、增加迭代次数、尝试进阶方法
   └── 反复迭代直到满意

3. 精度评估
   ├── 导出高斯中心点云
   ├── 尺度标定（利用已知尺寸参照物）
   └── 距离测量与误差计算

4. 技术文档撰写 + 答辩准备
```

### 5.2 精度评估方法

COLMAP 重建的坐标系尺度是**任意的**（比如真实 3 米的距离可能在重建中只有 0.5 个单位）。要评估真实精度，需要进行**尺度标定**：

1. 在场景中放置/标记**已知尺寸**的参照物（如 A4 纸 297mm × 210mm、门框宽度等）
2. 在重建的点云中找到这些参照物对应的 3D 点
3. 计算重建距离与真实距离的比值，得到缩放因子
4. 用缩放因子换算所有测量值

### 5.3 进阶优化方向

以下方向可自由选择、组合：

- **数据侧优化**：改进拍摄策略、补拍弱覆盖区域、更精细的抽帧/筛选策略
- **深度正则化**：利用单目深度估计（如 DPT/MiDaS）作为额外监督信号
- **Mip-Splatting**：抗锯齿处理，改善远近景一致性
- **2DGS**：用 2D 高斯面片替代 3D 高斯椭球，获得更好的几何表面
- **分区重建**：大场景拆分为子区域分别重建，再拼接
- **动态物体处理**：检测并 mask 场景中的运动物体
- **自定义方向**：与助教沟通确认后实施

### Stage 2 评分（20 分）

最终在 **答辩时** 统一评判。

#### A. 重建质量（8 分）

在共享测试场景上评判，各组可直接对比。

| 分值 | 评分标准 |
|------|----------|
| 2 分 | 共享测试场景 3DGS 训练完成，可渲染新视角 |
| 2 分 | 渲染质量可接受：房间主要结构可辨识，PSNR >= 20dB |
| 2 分 | 渲染质量良好：细节清晰，无明显 floater/模糊，PSNR >= 25dB |
| 2 分 | 渲染质量优秀：接近照片级真实感，PSNR >= 28dB 或有显著视觉改善 |

#### B. 精度评估（4 分）

| 分值 | 评分标准 |
|------|----------|
| 1 分 | 有精度评估方法和流程（脚本可运行） |
| 1 分 | 精度评估数据完整（>= 5 组测量对比数据） |
| 1 分 | 精度达到 20cm |
| 1 分 | 精度达到 10cm |

#### C. 问题分析与创新改进（4 分）

| 分值 | 评分标准 |
|------|----------|
| 2 分 | 清晰识别并记录了重建过程中遇到的具体问题（哪些区域失败、为什么），有针对性的改进尝试 |
| 2 分 | 改进方案有效果：采用了超越基线的策略（进阶算法、数据增强、后处理等），并有对比数据证明改善 |

#### D. 技术文档 + 答辩（4 分）

| 分值 | 评分标准 |
|------|----------|
| 1 分 | 文档结构完整（Introduction + Method + Experiments + Conclusion） |
| 1 分 | 方法描述清晰，pipeline 有流程图 |
| 1 分 | 实验部分有定量结果、对比分析、失败案例讨论 |
| 1 分 | 答辩展示清晰，回答问题合理 |

### 技术文档要求

最终提交的技术文档应包含以下章节：

1. **Introduction**：问题背景、任务描述
2. **Method**：完整 pipeline 描述（含流程图），技术选型理由，重点描述针对室内场景的特殊处理
3. **Experiments**：
   - 定量结果（PSNR / SSIM / 精度数据）
   - 消融实验或对比实验（不同策略的效果对比）
   - 失败案例分析（哪些区域重建不好、为什么）
4. **Conclusion**：总结与不足

### Stage 2 提交方式

打包为 `组号_final.zip`，包含：
- 所有代码和脚本（可复现完整 pipeline）
- 共享测试场景的渲染结果图片
- 精度评估数据和脚本
- 技术文档（PDF 格式）
- 答辩 PPT
- 小组成员和具体分工文档

通过 qq 群在线提交。

---

## 六、课堂安排

### Week 1 / Week 2 的 周一 和 周二

全部用于**小组汇报和互助答疑**：

- 每组 **9 分钟**上台展示当前进度（截图/演示），重点分享遇到的问题和尝试的解决方案
- 其他组提问、助教补充
- 鼓励组间协助——帮别人解决问题也是学习
- **汇报完毕可提前下课**

### Week 3 周二：最终答辩

- 每组 **10 分钟**答辩（含展示和问答）
- 展示内容：pipeline 演示、渲染效果、精度结果、改进方案、踩坑经验

---

## 八、评分总览

| 部分 | 分值 | 说明 |
|------|------|------|
| **Stage 1：Pipeline 热身** | **8 分** | **基础保底** |
| COLMAP 重建结果 | 3 分 | 稀疏点云截图，覆盖合理 |
| 3DGS 渲染结果 | 5 分 | 新视角渲染图，PSNR >= 20dB |
| **Stage 2：竞赛室内重建** | **20 分** | **核心挑战** |
| 重建质量 | 8 分 | 共享场景渲染效果（PSNR 分档） |
| 精度评估 | 4 分 | 评估方法 + 数据 + 精度达标 |
| 问题分析与创新 | 4 分 | 识别问题 + 改进方案 + 有效果 |
| 技术文档 + 答辩 | 4 分 | 文档质量 + 答辩表现 |
| **合计** | **28 分** | |

---

## 九、参考资源

### 论文

- Kerbl et al., "3D Gaussian Splatting for Real-Time Radiance Field Rendering", SIGGRAPH 2023
- Schönberger & Frahm, "Structure-from-Motion Revisited", CVPR 2016（COLMAP）

### 代码仓库

- [gaussian-splatting 官方实现](https://github.com/graphdeco-inria/gaussian-splatting)
- [COLMAP](https://colmap.github.io/)
- [gsplat](https://github.com/nerfstudio-project/gsplat)（社区实现，可参考）

### 查看器

- [SuperSplat](https://playcanvas.com/supersplat/editor)：在线 3DGS 查看器
- SIBR viewer：官方仓库自带的实时查看器

### 进阶方法

- [Mip-Splatting](https://github.com/autonomousvision/mip-splatting)：抗锯齿
- [2D Gaussian Splatting](https://github.com/hbb1/2d-gaussian-splatting)：面片化
- [Depth-Regularized 3DGS](https://github.com/robot0321/DepthRegularizedGS)：深度正则化
