# Nerfstudio 本地訓練指南 (Windows + RTX 3080 版)
這份文件記錄了在 Windows 環境下,使用 RTX 3080 進行 Gaussian Splatting (Splatfacto 模型) 訓練的完整流程。
## 📋 1. 環境前置準備 (Prerequisites)
在開始安裝 Python 套件前,必須先確保底層編譯環境與 CUDA 驅動正確。
### A. 安裝 C++ 編譯器
Nerfstudio 依賴 `tiny-cuda-nn`,安裝時需要即時編譯。
1. 下載 **Visual Studio 2022 Community** (免費版)。
2. 安裝時,在「工作負載 (Workloads)」頁籤中,**務必勾選**:
* `[v] 使用 C++ 的桌面開發 (Desktop development with C++)`
3. *注意:如果不裝這個,pip install 時會噴出一大堆紅色錯誤。*
### B. 安裝 CUDA Toolkit
建議使用 **CUDA 11.8** (目前 PyTorch 支援最穩定的版本)。
1. 前往 [NVIDIA CUDA Toolkit Archive](https://developer.nvidia.com/cuda-11-8-0-download-archive) 下載。
2. 安裝完成後,開啟 CMD 輸入以下指令確認:
```bash
nvcc --version
```
*(應顯示 V11.8.x)*
### C. 準備外部工具 (COLMAP & FFmpeg)
這兩個工具負責「影片轉圖片」與「相機位姿解算」。
1. **COLMAP (CUDA版):**
* 下載:[COLMAP GitHub](https://github.com/colmap/colmap/releases) (找 Windows-CUDA-No-Install.zip)
* 解壓至例如 `C:\Tools\colmap`
2. **FFmpeg:**
* 下載:[FFmpeg Build](https://www.gyan.dev/ffmpeg/builds/) (release-essentials.zip 即可)
* 解壓至例如 `C:\Tools\ffmpeg`
3. **設定環境變數 (關鍵步驟):**
* 將包含 `.exe` 的資料夾路徑 (例如 `C:\Tools\colmap` 和 `C:\Tools\ffmpeg\bin`) 加入 Windows 的 **系統環境變數 Path** 中。
* *設定完後請重啟 Terminal 才會生效。*
---
## 🛠️ 2. 安裝 Nerfstudio (Installation)
請開啟 Anaconda Prompt 或支援 Conda 的終端機。
### 步驟 1: 建立虛擬環境
使用 Python 3.10 以獲得最佳相容性。
```bash
conda create --name nerfstudio -y python=3.10
conda activate nerfstudio
```
### 步驟 2: 安裝 PyTorch (CUDA 11.8 版本)
精確指定版本以免裝到 CPU 版或不相容的 CUDA 版。
```bash
pip install torch==2.1.2+cu118 torchvision==0.16.2+cu118 --extra-index-url https://download.pytorch.org/whl/cu118
```
### 步驟 3: 安裝 Nerfstudio 核心
這一步會自動編譯 `tiny-cuda-nn`,依據 CPU 效能可能需要 5-10 分鐘。
```bash
pip install nerfstudio
```
---
## 🎬 3. 標準作業流程 (Pipeline)
假設您的專案資料夾在 `D:\GS_Project`,影片檔名為 `source.mp4`。
### Phase 1: 資料前處理 (Process Data)
將影片轉換為 Nerfstudio 可讀取的訓練資料。此步驟會自動執行:
1. FFmpeg 拆解影格。
2. COLMAP 特徵匹配與相機解算 (SfM)。
```bash
# 基本指令
ns-process-data video --data source.mp4 --output-dir processed_data
```
### Phase 2: 開始訓練 (Train)
使用 Gaussian Splatting 模型 (`splatfacto`)。
```bash
ns-train splatfacto --data processed_data
# [針對 RTX 3080 的優化指令]
# 如果影片是 4K,建議降採樣以防顯存爆炸 (OOM)
ns-train splatfacto --data processed_data --downscale-factor 2
```
* **Viewer:** 訓練開始後,Terminal 會顯示 `Viewer at: https://viewer.nerf.studio/...`。
* **操作:** 按住 `Ctrl` 點擊連結,即可在瀏覽器即時監看訓練成果。
* **時間:** RTX 3080 訓練標準場景約需 15-30 分鐘。
### Phase 3: 匯出模型 (Export)
訓練完成後 (或按 `Ctrl+C` 中止後),將模型匯出為通用的 `.ply` 格式。
1. **尋找 Config 檔:** 在 `outputs/processed_data/splatfacto/YYYY-MM-DD.../` 資料夾中找到 `config.yml`。
2. **執行匯出:**
```bash
# 語法: ns-export gaussian-splat --load-config [Config路徑] --output-dir [輸出路徑]
ns-export gaussian-splat --load-config outputs/processed_data/splatfacto/2026-01-08_12-00-00/config.yml --output-dir exports/
```
* 結果會在 `exports/splat.ply`,可直接拖入 [Spline](https://spline.design/) 或 [Polycam](https://poly.cam/) 等網頁觀看。
---
## ⚠️ 4. 常見問題與 RTX 3080 優化 (Troubleshooting)
### Q1: 訓練時出現 CUDA Out of Memory (OOM)
* **原因:** 4K 圖片解析度太高,塞滿 3080 的 10GB/12GB 顯存。
* **解法:**
1. 在訓練時使用 `--downscale-factor 2` (推薦)。
2. 或者在訓練時減少 Batch Size (不推薦,會影響品質)。
### Q2: COLMAP 跑很久或失敗
* **檢查:** 拍攝時是否只有純旋轉 (原地轉圈)?這會導致 COLMAP 算不出深度。必須要有位移 (Parallax)。
* **設定:** 確認使用的是 GPU 版 COLMAP。如果不確定,請在 `ns-process-data` 指令後加上 `--verbose` 查看 Log。
### Q3: 匯出的 .ply 檔案極大
* **說明:** 原始的 Splat 模型通常有 300MB - 1GB。
* **解法:** 若要網頁展示,可考慮使用 `ns-export gaussian-splat --format splat` (較新的壓縮格式),或是使用 [SuperSplat](https://playcanvas.com/supersplat/editor) 進行手動修剪 (Crop) 後再儲存。
### Q4: COLMAP 報錯 `unrecognised option '--SiftExtraction.use_gpu'` 🌟 (新版 COLMAP 必看)
* **現象:** 在執行 `ns-process-data` 時,出現紅字錯誤,指出無法識別 SiftExtraction 參數。
* **原因:** 您安裝的 COLMAP 版本較新 (3.9 或以上),參數名稱已更改 (`Sift` -> `Feature`),但 Nerfstudio 舊版代碼仍送出舊參數。
* **解法 (修改原始碼):**
1. 前往您的 Nerfstudio 安裝路徑 (或是您 clone 下來的資料夾)。
2. 找到並編輯檔案:`nerfstudio\process_data\colmap_utils.py`。
3. 搜尋並修改參數名稱 (大約在第 129 行與 143 行):
* 將 `"SiftExtraction.use_gpu"` 改為 **`"FeatureExtraction.use_gpu"`**
* 將 `"SiftMatching.use_gpu"` 改為 **`"FeatureMatching.use_gpu"`**
4. 存檔後重新執行指令即可正常運作。
## 🔗 常用指令速查表
| 動作 | 指令關鍵字 |
| --- | --- |
| **處理影片** | `ns-process-data video --data [影片] --output-dir [資料夾]` |
| **處理照片集** | `ns-process-data images --data [圖片資料夾] --output-dir [資料夾]` |
| **開始訓練** | `ns-train splatfacto --data [資料夾]` |
| **繼續訓練** | `ns-train splatfacto --load-dir [Checkpoint資料夾]` |
| **匯出 PLY** | `ns-export gaussian-splat --load-config [Config檔]` |
| **開啟 Viewer** | `ns-viewer --load-config [Config檔]` (不訓練純觀看) |