NoPoSplat は、ポーズをとらないまばらな画像から正準空間内の 3D ガウスを予測します。
高品質の新しいビュー合成と正確な姿勢推定を可能にします。
インストール
事前トレーニングされたチェックポイント
カメラの規約
データセット
コードの実行
謝辞
引用
私たちのコードは Python 3.10 以降に依存しており、PyTorch 2.1.2 および CUDA 11.8 に基づいて開発されていますが、より上位の Pytorch/CUDA バージョンでも動作するはずです。
NoPoSplat をクローンします。
git clone https://github.com/cvg/NoPoSplatcd NoPoSplat
環境を作成します。ここでは conda を使用した例を示します。
conda create -y -n noposplat python=3.10 conda は noposplat をアクティブ化します pip install torch==2.1.2 torchvision==0.16.2 torchaudio==2.1.2 --index-url https://download.pytorch.org/whl/cu118 pip install -r 要件.txt
オプションで、RoPE 用の cuda カーネルをコンパイルします (CroCo v2 と同様)。
# NoPoSplat は、実行時間を高速化するためにいくつかの cuda カーネルをコンパイルできる RoPE 位置埋め込みに依存しています。cd src/model/encoder/backbone/croco/curope/ python setup.py build_ext --inplacecd ../../../../../..
私たちのモデルはHugging Faceでホストされています?
機種名 | トレーニングの決意 | トレーニングデータ |
---|---|---|
re10k.ckpt | 256x256 | 10k |
酸.ckpt | 256x256 | 酸 |
mixRe10kDl3dv.ckpt | 256x256 | re10k、dl3dv |
mixRe10kDl3dv_512x512.ckpt | 512x512 | re10k、dl3dv |
ダウンロードされた重みはpretrained_weights
ディレクトリにあると仮定します。
カメラシステムはpixelSplatと同じです。カメラの固有行列は正規化されています (最初の行は画像の幅で除算され、2 行目は画像の高さで除算されます)。カメラの外部行列は、OpenCV スタイルのカメラから世界への行列 (+X 右、+Y 下、+Z カメラが画面を覗き込む) です。
データセットの準備については、DATASETS.md を参照してください。
メインのエントリ ポイントはsrc/main.py
です。次の方法で呼び出します:
# 8 GPU、各バッチ サイズ = 16。ログ記録に wandb を使用したくない場合は、最後の 2 つの引数を削除しますpython -m src.main +experiment=re10k wandb.mode=online wandb.name=re10k
このデフォルトのトレーニング構成には、各 GPU でバッチ サイズ 16 の 8x GPU (80GB 以上のメモリ) が必要です。トレーニングが完了するまでに約 6 時間かかります。ハードウェアに合わせてバッチ サイズを調整できますが、合計バッチ サイズを変更すると、パフォーマンスを維持するために初期学習率の変更が必要になる場合があることに注意してください。 1 つの A6000 GPU (48GB メモリ) でのトレーニングについては、re10k_1x8 を参照すると、同様のパフォーマンスが得られます。
# RealEstate10Kpython -m src.main +experiment=re10k mode=test wandb.name=re10k dataset/[email protected]_sampler=evaluation dataset.re10k.view_sampler.index_path=assets/evaluation_index_re10k.json Checkpointing.load=./pretrained_weights /re10k.ckpt test.save_image=true# RealEstate10Kpython -m src.main +experiment=acid mode=test wandb.name=acid dataset/[email protected]_sampler=評価データセット.re10k.view_sampler.index_path=assets/evaluation_index_acid .json Checkpointing.load=./pretrained_weights/acid.ckpt test.save_image=true
wandb.name=SAVE_FOLDER_NAME
を設定して保存パスを指定できます。
姿勢推定のパフォーマンスを評価するには、次のコマンドを実行します。
# RealEstate10Kpython -m src.eval_pose +experiment=re10k +evaluation=eval_pose Checkpointing.load=./pretrained_weights/mixRe10kDl3dv.ckpt dataset/[email protected]_sampler=evaluation dataset.re10k.view_sampler.index_path=assets/evaluation_index_re10 k.json # ACIDpython -m src.eval_pose +experiment=acid +evaluation=eval_pose Checkpointing.load=./pretrained_weights/mixRe10kDl3dv.ckpt dataset/[email protected]_sampler=評価データセット.re10k.view_sampler.index_path=assets/evaluation_index_acid.json # ScanNet-1500python -m src.eval_pose +experiment=scannet_pose +evaluation=eval_posecheckpointing.load=./pretrained_weights/mixRe10kDl3dv.ckpt
ここでは、RealEstate10K と DL3DV でトレーニングされた混合モデルを使用した評価を示していることに注意してください。チェックポイント パスを他のトレーニング済みモデルに置き換えることができます。
このプロジェクトは、pixelSplat、DUSt3R、CroCo などのいくつかの素晴らしいリポジトリを使用して開発されています。原作者の方々の素晴らしい仕事に感謝いたします。以前のメソッドの一部について、評価コードと事前トレーニング済みモデルを提供してくださった David Charatan 氏のご厚意に感謝いたします。
@article{ye2024noposplat, title = {No Pose, No Problem: Surprisingly Simple 3D Gaussian Splats from Sparse Unposed Images}, author = {Ye, Botao and Liu, Sifei and Xu, Haofei and Xueting, Li and Pollefeys, Marc and Yang, Ming-Hsuan and Songyou, Peng}, journal = {arXiv preprint arXiv:xxxx.xxxx}, year = {2024} }