Ubuntu 24 と新しい CUDA SDK バージョン向け Gaussian Splatting トレーナーを構築する

https://github.com/graphdeco-inria/gaussian-splatting
はじめに
イントロダクション
3D ガウス スプラッティングは、コンピュータビジョン/コンピュータグラフィックス/ディープラーニングの分野における最新技術であり、「ニューラルレンダリング」領域の最先端の成果です。この技術は3つの重要な技術を導入することで、画質を保ちながら実用的なトレーニング時間を実現し、1080p 解像度でのリアルタイムレンダリングを可能にしました。
基礎理論
技術の中核
NeRF
- 従来の NeRF は、シーンを連続関数 として表現し、3D 空間上の点 と視点方向 を入力とします。
- しかし、NeRF のレンダリングにはボリューム積分が必要であり、トレーニングも推論も非常に遅いという欠点があります。
SfM
- 密なボクセル上で直接最適化するのではなく、まず COLMAP/SfM を使用してスパースな点群を取得します。
- 各点は「ガウス球」に変換され、シーンを近似します。
Gaussian Splatting
- 各シーンポイントは、共分散行列 を持つ 3D ガウス楕円体としてモデル化されます。
- レンダリング時にはポイントごとに描画するのではなく、これらの楕円体を 2D 画像に投影し、滑らかなスプラットを生成します。
Differentiable Rasterization
- レンダリングが微分可能であるため、逆伝播によって位置、形状、色、透明度などのパラメータを最適化できます。
- OpenGL に似た高速なラスタライザーが使用されています。
基礎的な数学モデル
- 単一ガウスの定義
ガウス分布の中心を 、共分散行列を とします:
ここで:
- :ガウスの中心(3D ポイントの位置)
- :共分散行列。形状(球形/楕円体)を制御します。
:そのガウスにおける特定の点の「寄与度」
2D 画像平面への投影
カメラ投影行列 を使用して、$\mu$ と を画像平面にマッピングします:
ここで は投影のヤコビ行列です。
これにより、3D ガウスは画面上で 2D ガウス斑点(ぼやけた小さな楕円)になります。
- 色と透明度の合成
各ガウスには、色 と透明度 も含まれています。
画像上の最終的なピクセル値は、複数のガウススプラットの加重混合です:
ここで は、前方のガウスの透過率を表します(ボリュームレンダリングの式に似ています)。
- 最適化目標
実際の写真と比較し、差異(MSE、SSIM、LPIPS などの損失)を最小化します。
逆伝播を通じて、$\mu,\Sigma,\alpha,\mathbf{c}$ などのパラメータを更新し、レンダリング結果が実際の画像と一致するようにします。
ビルド手順
デバイスとシステムの準備
CUDA バージョンについて
- CUDA バージョン == 12.8 を使用してください。
Ubuntu 24 システムのデフォルトの CUDA バージョンは 12.9 で、最新バージョンは 13 です。
ただし、新しいバージョンの CUDA Toolkit + PyTorch を使用すると、Gaussian Splatting でサポートされていないより高い Python バージョンが必要になるなど、さまざまな問題が発生する可能性があります。
インストール
開始する前に Environment.yml を確認してください。このファイルには、使用に必要なすべてのモジュールが含まれています。
中国国内のサーバーまたはコンピューターを使用している場合は、ダウンロードの失敗を避けるために、事前にネットワークプロキシを設定するか、ダウンロードミラーを構成してください。
コマンドを実行する前に、システムに Git がインストールされていることを確認してください。
ステップ 1: Git クローン
git clone https://github.com/graphdeco-inria/gaussian-splatting --recursive
注:--recursive は、プロジェクトにサブモジュールが含まれているため、必ず含めてください。
ステップ 2: Conda 環境の作成
conda create -n gaussian_splattingpython=3.9 ipython
conda activate gaussian_splatting
ステップ 3: CUDA Toolkit のインストール
CUDA Toolkit のバージョンが 12.8 であることを確認してください。そうであれば、「ステップ 3」 の 最後のコマンド の実行に進んでください。
nvcc --version
注: nvidia-smi コマンドで表示される CUDA バージョンはドライバーのバージョンであり、CUDA Toolkit のバージョンではないことに注意してください。
そうでない場合は、現在のバージョンをアンインストールして、再インストールする必要があります。このガイドでは、アンインストール手順は省略し、バージョン 12.8 のインストールプロセスにのみ焦点を当てます。
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1-1_all.deb
sudo apt-get update
sudo apt-get -y install cuda-toolkit-12-8
conda install -c nvidia cuda-toolkit=12.4
Conda は CUDA Toolkit 12.4 をインストールします。これは CUDA 12.8 の命令と後方互換性があります。
ステップ 4: C++ コンパイル環境のインストール
sudo apt-get update
sudo apt install build-essential ninja-build
ステップ 5: 追加の依存関係のインストール
conda install -c conda-forge plyfile
conda install tqdm
そして重要なステップ:
pip install torch==2.7.1 torchvision==0.22.1 torchaudio==2.7.1 --index-url https://download.pytorch.org/whl/cu128
Python のバージョンが 3.9 でない場合、インストールは 中止 されます。
pip install opencv-python joblib
最後に、numpy==1.22 であることを確認してください。そうでない場合は、pip を使用して現在の numpy をアンインストールし、バージョン 1.22 を再インストールしてください。
ステップ 6: モジュールの修正
まず、プロジェクトディレクトリに移動して入ります。たとえば、私のディレクトリは ~/Code/gaussian-splatting です。
cd ~/Code/gaussian-splatting
そして、ファイルを編集して float.h を含めます: #include <float.h>
vim submodules/simple-knn/simple-knn.cu
ステップ 7: モジュールのコンパイル
pip install submodules/diff-gaussian-rasterization
pip install submodules/simple-knn
pip install submodules/fused-ssim
最終ステップ
データセットを保存した後、コマンドを実行してトレーニングを開始できます。
python train.py -s ./xxx