Stories

Detail Return Return

3D Gaussian splatting 02: 快速評估 - Stories Detail

目錄

  • 3D Gaussian splatting 01: 環境搭建
  • 3D Gaussian splatting 02: 快速評估
  • 3D Gaussian splatting 03: 用户數據訓練和結果查看
  • 3D Gaussian splatting 04: 代碼閲讀-提取相機位姿和稀疏點雲
  • 3D Gaussian splatting 05: 代碼閲讀-訓練整體流程
  • 3D Gaussian splatting 06: 代碼閲讀-訓練參數
  • 3D Gaussian splatting 07: 代碼閲讀-訓練載入數據和保存結果
  • 3D Gaussian splatting 08: 自建模型展示網頁

快速評估

以下使用 Inria 提供的數據集運行訓練過程, 驗證和評估重建效果, 數據輸入是一組靜態場景的圖像以及攝像機位置, 表示為稀疏的點雲, 通過colmap處理得到.

下載示例數據

在項目 GitHub 倉庫 的首頁找到 Running 部分, 能找到這個下載鏈接

You can find our SfM data sets for Tanks&Temples and Deep Blending here: https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/datasets/input/tandt_db.zip If you do not provide an output model directory (-m), trained models are written to folders with randomized unique names inside the output directory. At this point, the trained models may be viewed with the real-time viewer (see further below).

下載 tandt_db.zip 到本地並解壓縮. 這個數據集裏面帶了4個場景, 兩個室內的, 兩個室外的, 都是兩三百張圖片, 圖片比較小, 單圖幾百K到幾千K, 適合驗證測試.

每一個數據集, 都會包含一系列的目錄和文件, 其中input是原始圖片輸入, images 和 sparse 目錄是下一步訓練要用到的文件.

訓練

用 conda 啓用之前創建的 3dgs 環境, 然後在項目目錄下執行

python train.py -s [素材路徑]
# 例如
python train.py -s ./data/tandt/truck

如果要進行評估, 訓練時需要增加--eval參數

python train.py -s ./data/tandt/truck --eval

執行過程中可以通過 nvidia-smi 和 nvtop 查看GPU的情況, 可以看到運行的功率, 顯存的使用率, 推薦使用 nvtop, 可以實時監控. 訓練時間根據顯卡不同, 從十幾分鍾到一個多小時都有可能. 訓練的輸出目錄在 output 目錄下, 每次訓練都會隨機產生一個目錄名, 可以通過創建時間辨別.

在結果目錄中可以看到兩個目錄, iteration_7000 和 iteration_30000, 分別是迭代7000次和30000次的 point cloud 文件. 這個文件可以直接用於3D渲染.

一般來講, 迭代7000次之後的效果就已經接近最終效果, 而30000次迭代的訓練時間是7000次迭代的5-6倍, 如果想快速評估模型結果, 訓練時可以加上--iterations 7000參數讓其在7000次迭代後結束.

查看

快速查看可以用第三方的網頁工具, 例如 https://poly.cam/tools/gaussian-splatting, 可以註冊後免費上傳 ply 文件.

評估

用帶--eval訓練的模型結果, 分別對訓練使用的鏡頭進行渲染, 需要指定訓練結果路徑(在output下的隨機目錄名), 以及訓練的輸入數據

python render.py -m [訓練結果路徑] -s [素材路徑]

例如

python render.py -m ./output/89ea0caf-3 -s ./data/tandt/truck

會在訓練結果目錄下創建 train 和 test 兩個目錄, 分別對應訓練數據和測試數據, 每一組數據分 gt 和 renders 兩個目錄, 分別是素材原圖和渲染結果圖.

在渲染完成後, 計算渲染結果和原圖的 SSIM, PSNR 和 LPIPS

python metrics.py -m [訓練結果路徑]

例如

python metrics.py -m ./output/89ea0caf-3

如果訓練時沒有指定 --eval參數, 也沒有人工區分訓練集和測試集, render.py 產生的 test 目錄是空的, 執行上面的命令會產生空結果.

Scene: ./output/89ea0caf-3
Method: ours_30000
Metric evaluation progress:   0%|                                      | 0/106 [00:00<?, ?it/s]Downloading: "https://raw.githubusercontent.com/richzhang/PerceptualSimilarity/master/lpips/weights/v0.1/vgg.pth" to /home/milton/.cache/torch/hub/checkpoints/vgg.pth
100%|█████████████████████████████████████████████████████| 7.12k/7.12k [00:00<00:00, 9.46MB/s]
Metric evaluation progress: 100%|████████████████████████████| 106/106 [02:31<00:00,  1.43s/it]
  SSIM :    0.9513068
  PSNR :   31.6362495
  LPIPS:    0.0676759

高級選項

optimizer_type 訓練加速

這個功能是 2024年7月在核心模塊 diff-gaussian-rasterization 的 3dgs_accel 分支加入的.

默認的導出不帶這個選項, 要啓用此選項, 需要將之前安裝的 submodules/diff-gaussian-rasterization 模塊刪除,

pip uninstall diff_gaussian_rasterization

將模塊切換到 3dgs_accel 分支後重新 pip install,

$ cd submodules/diff-gaussian-rasterization/
$ git branch -a
* (HEAD detached at 9c5c202)
  main
  remotes/origin/3dgs_accel
  remotes/origin/HEAD -> origin/main
  remotes/origin/debug
  remotes/origin/dr_aa
  remotes/origin/fast_culling
  remotes/origin/main
$ git checkout -b 3dgs_accel origin/3dgs_accel
$ cd ../..
$ pip install submodules/diff-gaussian-rasterization/

而後在訓練時, 可以使用參數 --optimizer_type, 可以指定default, sparse_adam兩種加速方式

python train.py -s /home/milton/WorkPython/data2/ --optimizer_type sparse_adam
  • 4060Ti顯卡, 使用sparse_adam參數實測速度提升明顯, 訓練時間只有未開啓加速的一半. 從顯卡功耗看, 比未開啓加速功耗增加20%.
  • P104-100顯卡, 使用sparse_adam參數實測速度無明顯提升, 顯卡功耗無明顯變化.

猜測這個加速會充分利用GPU的並行處理, 會增加GPU功耗, 4060Ti在正常模式下温度僅到63度, 而P104-100在非加速情況下温度83度已經達到温度牆, 功率受到限制, 因此沒有提升.

antialiasing: 抗鋸齒

--antialiasing抗鋸齒選項是 2024年8月在核心模塊 diff-gaussian-rasterization 的 dr_aa 分支加入的. 來源於 mip-splatting 項目.

這個參數可以作用於訓練和查看, 實測在訓練中使用這個參數後效果反而變差, 邊緣尖刺增加. 在SIBR Viewer中查看時, 勾選此參數可以改善遠景的圖像質量.

問題

顯卡温度過高

長時間運行時, 建議控制顯卡GPU温度在75攝氏度以下. 如果在nvtop中温度超過75, 需要使用 nvidia-smi 限制顯卡頻率以降低功率.

通過 nvidia-smi 查看 GPU 温度設置

nvidia-smi -q -d temperature

輸出為

Attached GPUs                             : 1
GPU 00000000:01:00.0
    Temperature
        GPU Current Temp                  : 35 C
        GPU T.Limit Temp                  : N/A
        GPU Shutdown Temp                 : 96 C
        GPU Slowdown Temp                 : 93 C
        GPU Max Operating Temp            : N/A
        GPU Target Temperature            : 83 C
        Memory Current Temp               : N/A
        Memory Max Operating Temp         : N/A

默認的 Target Temp 是 83, 設置 Target Temp 的命令是 sudo nvidia-smi -gtt [温度]. 在散熱不佳 GPU 温度過高時, 執行這個命令可以立即觀察到頻率的下降, 可以用這個命令給GPU降温.

user avatar vawe86 Avatar
Favorites 1 users favorite the story!
Favorites

Add a new Comments

Some HTML is okay.