NVIDIA InstantNeRF (InstantNGP) の環境セットアップと,
自身で用意した画像群を使った3D再構成をするフローのメモ.
基本的に公式リポジトリのセットアップ手順そのまま.
github.com
セットアップ
実行環境
WIndows10 64bit
RTX 3070
Requirementsのセットアップ
CUDA
"v10.2 or higher"
11.7 をインストール.
developer.nvidia.com
CMAKE
"v3.21 or higher"
3.24.0-rc5 をインストール.
インストーラによる system Path へのCMAKEパス追加 は true とした.
自分で追加する場合は環境変数Pathに "C:\Program Files\CMake\bin" あたりを追加する.
cmake.org
Python
"3.7 or higher"
自身の環境のAnacondaに 3.9 が含まれていたので改めてインストールはせず.
Python Modules
公式リポジトリの requirements.txt をローカルにダウンロード.
このtxtに必要なモジュールが記述されているのでpipでPython環境にインストール.
https://github.com/NVlabs/instant-ngp/blob/master/requirements.txt
pip install -r requirements.txt
OptiX
"7.3 or higher"
7.5 をインストール.
インストール後に以下の環境変数が設定されていなければ手動で追加する.
変数名 "OptiX_INSTALL_DIR"
値 "C:\ProgramData\NVIDIA Corporation\OptiX SDK バージョン番号"
developer.nvidia.com
3D再構成の準備
NeRFの学習には画像毎のカメラ姿勢情報が必要.
COLMAPを利用することで画像群からカメラ姿勢を推定することができ, NeRFの学習に利用できるようになる.
InstantNgpでは colmap2nerf.py というスクリプトが提供されており, COLMAPで推定したカメラ姿勢情報をNeRF向けに変換できる.
詳細は以下の公式tipsの「Preparing new NeRF datasets」を参考.
github.com
3D再構成
新規に用意した画像群でInstatnNeRFを学習する.
簡単のために画像データは instant-ngp ディレクトリの data/nerf 下に新規にディレクトリを作成するものとする.
画像ファイルの準備
instant-ngp/data/nerf/new_data ディレクトリを作成.
instant-ngp/data/nerf/new_data/images ディレクトリを作成.
instant-ngp/data/nerf/new_data/images に画像群をコピー.
COLMAPによる画像群カメラ姿勢推定
instant-ngp/data/nerf/new_data ディレクトリでコマンドラインからcolmap2nerf.pyを実行してカメラ姿勢情報を生成する.
python [path-to-instant-ngp]/scripts/colmap2nerf.py --colmap_matcher exhaustive --run_colmap --aabb_scale 16
これで画像毎のカメラ姿勢情報を格納したtransforms.jsonなどが生成される.
InstantNeRFを実行
instant-ngpディレクトリでコマンドラインからnew_dataでNeRFを実行する.
.\build\testbed.exe --mode nerf --scene .\data\nerf\new_data
以上で新たに用意した画像群からカメラ姿勢推定情報を計算してInstantNeRFで再構成することができる.
現実で手頃な被写体がなかったので、ゲームのスクリーンショット画像群で試した例がこちら(ELDEN RING)
スクリーンショットからでもカメラ姿勢推定ができるCOLMAPの威力を見た...
🔥
— なが (@nagakagachi) 2022年8月2日
3D volume reconstruction from ELDEN RING screenshots using InstantNeRF (55 images).
Instant NeRF でエルデンリングのシーン3D再構成.
COLMAPがスクリーンショットからでもカメラ姿勢推定できてしまうのがすごい
ノンフォトリアルなゲームだとどうなるかな#InstantNeRF #ELDENRING pic.twitter.com/49eTVPxZKQ