前回、Ubuntu 22.04 環境で Nerfstudio のセットアップを行いました。Jawset Postshot ではなくNerfstudioを使ってみよう、という趣旨で作業を進めていますが、セットアップに問題がなければ、以下のように Conda仮想環境 を立ち上げて作業ができます。
前回記事:その1
https://techietechnology.co.jp/2025/03/07/nerfstudio-vs-jawset-postshot/
仮想環境を起動
conda activate nerfstudio
仮想環境を終了
conda deactivate
Python プログラムは、実行環境に応じて異なるライブラリのバージョンを必要とすることが多く、ライブラリの更新によって過去のバージョンが必要なプログラムが動作しなくなる場合があります。仮想環境を使うと、各環境ごとにインストールされるライブラリのバージョンや依存関係が独立しているため、互いの影響を排除できます。これは、例えば同一マシン上で複数の Python プロジェクトを同時進行させる場合などに有効で、以前の環境を維持する必要があるプロジェクトと最新ライブラリで動かしたいプロジェクトが共存可能になります。
仮想環境を使わずにグローバル環境へライブラリをインストールしてしまうと、OS 全体のパッケージ管理(apt-get や他のソフトウェアとの衝突など)に影響を与える可能性があります。仮想環境内にインストールしていれば、そもそもシステム全体には変更を及ぼさないため、最小限の範囲で試行錯誤が可能となります。ある環境が破損した場合でも、システムレベルのライブラリまで巻き込む危険性が低減します。
環境の作成から破棄までが簡単に行えます。プロジェクト実験中に依存関係が複雑になった場合でも、仮想環境ごと削除して再度作り直すだけで初期化が完了します。システム上の他の環境に影響を与えることなく、問題が発生した環境のみを切り離して再構築できるのは管理上の利点です。
環境を削除するコマンド
conda remove -n nerfstudio –all
簡単に環境自体を削除できます。もし環境が壊れてしまったり、ライブラリを一から入れ直したい場合などには、不要な環境を削除してから再度新規作成(再インストール)することで、すぐにクリーンな状態を用意できるという利点があります。各環境は簡単に作成・破棄できるので、実験や検証が必要な作業では柔軟性が高まります。わずかなディスク消費や環境切り替え時の煩雑さといったオーバーヘッドは存在するものの、複数の開発案件を並行する際には十分に恩恵を受けられる技術手法です。
Nerfstudio は Docker イメージ も公式に提供しています。仮想環境(Conda)を使わず、Docker コンテナとして環境まるごとセットアップする方法です。公式ドキュメントでも docker pull や docker run の手順が解説されており、慣れている人はDockerも快適な選択肢です。私もGPU パススルーやボリューム管理を勉強しなくては思いつつ。。。。
Nerfstudio Docker 公式イメージ
https://docs.nerf.studio/quickstart/installation.html
さて細かい話は抜きにして、テスト動作をするのが良いでしょう。まずは手軽に試せるサンプルデータをダウンロードします。Nerfstudio には公式のサンプルセットが用意されており、以下のコマンドで特定のシーンを取得可能です。data/nerfstudio/poster ディレクトリ内に、テスト用のデータ一式が展開されます。
ns-download-data nerfstudio –capture-name=poster
Nerfstudioには複数の手法 (Nerfacto / Instant-NGP / NeRF / Mip-NeRF / TensoRF / Splatfacto など) が同梱されています。その中でも SplatfactoはGaussian Splattingをベースにしたアプローチです。Nerfstudio内で既存のデータパーサーを使いつつ、学習エンジン部分を Splatfactoに切り替えるだけで Gaussian Splattingを実行できます。これによりNerfstudioが提供するビューアや可視化ツールをそのまま利用できます。便利ですね。
基本的なおすすめ手法はNerfactoのようです。NeRF系のnerfactoいくつかの最新要素を取り入れつつ使いやすさ・高速化を重視した総合的なアプローチとなっています。なので以下2つを試すのがよいでしょう。
ns-train nerfacto –data data/nerfstudio/poster
ns-train splatfacto –data data/nerfstudio/poster
いずれも同じデータを用いて学習処理が始まり、ターミナルに進捗表示が流れます。加えて ポート 7007 にビュアーが起動し、ブラウザからアクセスすると学習中の推定結果をインタラクティブにプレビュー可能です。
さてsplatfactoが動いたらならちょっと設定を変えてみましょう。以下説明をざっと見てみましょう。
Splatfacto Nerfstudio’s Gaussian Splatting Implementation
https://docs.nerf.studio/nerfology/methods/splat.html#splatfacto
Nerfstudioでは3D Gaussian Splatting をベースとする手法を Splatfacto と名付けていますとnerfactoが複数の最先端手法を組み合わせて発展していくように、Splatfacto も様々なガウスベースの技術をブレンドしていく方針です。これはオリジナルの論文実装から離れていく可能性があるため、あえて別の名前を付けています。Gaussian Splatting はランダムなガウス配置よりも、COLMAP など SfM(Structure from Motion)で推定した点群情報を初期位置として使うほうが収束が速く高品質になります。Nerfstudio の ns-process-data や COLMAP データを用いると、自動的に 3D ポイントが保存され、そこにガウスを割り当てる形で開始できます。従来の NeRF 系では「レイをサンプリングして学習」する方法が多いですが、Gaussian Splatting は 1 枚の画像全体をまとめて処理する手法を取ります。
Splatfacto は、以下のようなコマンドで実行可能です。先ほどのサンプルはこの形式でした。
ns-train splatfacto –data <データセットディレクトリ>
splatfactoやsplatfacto-bigなどのせて地も用意されています。
・splatfacto
デフォルト設定の Gaussian Splatting。メモリ使用量は 6GB 程度とされ、レンダリング速度も比較的速いバランス型です。
・splatfacto-big
より多くのガウスを使用し、表現力を高めた大規模モデル。メモリ消費が約 12GB に増え、速度も低下するが、高品質な再構成が期待できます。
・ns-train splatfacto-mcmc
どこかに資料があった記憶ですが、探したら見つからずです。PsotshotはMCMCを使っているので、たぶん同じようなものなのではないかと。
https://www.jawset.com/docs/d/Postshot+User+Guide/Interface/Training+Configuration
NeurIPS 2024 SPOTLIGHTが元の機能でしょうか。
https://ubc-vision.github.io/3dgs-mcmc/
以上からつまりMCMC(Markov Chain Monte Carlo) とは、「ある分布からサンプルを得るために、ランダムに状態を遷移させながら探索する手法の総称」 です。3D Gaussian Splatting では、シーンを表す多数の3Dガウス(スプラット) を「ランダムに少しずつ動かしたり、サイズを変えたりする」ことで、最終的にシーンに合った配置を探す のにMCMCを活用できるということのようですね。
ちなみにsplatfacto-big-mcmcなどのコマンドは入力してもダメでした。
より細かい設定はns-train splatfacto –helpで調べることができます。splatfacto –help に表示されるオプション群をざっと見てみるとこんな感じです。
Machine / Logging / Viewerなどや、pipeline.datamanager、pipeline.model (Gaussian Splatting固有のCull/Densify、SH Degree、MCMC戦略など)。各種オプティマイザ (optimizers.*)といったカテゴリーに分かれており、3D Gaussian Splattingの学習パイプラインを柔軟に制御できます。
よく見たらMCMCに関する項目がありました。同じMCMCだとは思います。オプションで指定してみたら動作しました。pipeline.model.strategy=mcmc を指定することでMCMCが有効になりました。bigとも並行できました。結果はブラウザー越しではよくわかりませんね。よさそうな気がしないでもありません。空中のノイズが減りやすい気もしますが、パラメータの複雑性も増しそうです。
その3につづく
https://techietechnology.co.jp/2025/03/11/nerfstudio-data-setup/