Instant NGP (NeRF) のセットアップ方法

Instant NGP (NeRF) の使い方についてまとめました。

といってもセットアップ方法はNVIDIA公式のGitHubにあります。
ただ開発者ではない人にとっては (私にとっては) それを読んでも簡単にはビルドできなかったりしたので、各工程を備忘録としてまとめました。

NVIDIA公式のGitHubはこちらですが、私は解説動画を公開されているbycloudai氏のこちらのGitHubをベースに進めました。
※追記:Jonathan氏のこちらの動画も分かりやすいです (こちらもbycloudai氏のリポジトリをベースに解説されたもの)

ここではbycloudai氏の方でセットアップを進めますが、方法がわかったらNVIDIA公式の方が最新版なのでそちらを利用するのが良いかと思います。
(公式の方であればDLSSも利用できる)

では、必要な環境の準備から進めます。

NVIDIA GPU 編

RTX3090~推奨。
私の環境、RTX2080Tiでも実行できましたが結構重いです。

Visual Studio 編

Visual Studio 2019をインストール。
2019(旧バージョン)のインストーラーは こちら からDLする。

C++によるデスクトップ開発を追加。

CMake 編

CMakeとは?

CMakeは、コンパイラに依存しないビルド自動化のためのフリーソフトウェアであり、様々なオペレーティングシステムで動作させることができる。
ビルドマネジメントツール
※引用元:CMake入門-基本概念と主な関数

CMakeを入れる。
最新版ではなく3.22.3を入れる (最新版はビルドに失敗するようなので注意)
v3.22.3はこちら:https://github.com/Kitware/CMake/releases/tag/v3.22.3
最新版はこちら:https://cmake.org/download/

インストール時にPATHも通しておく。

CUDA Toolkit 編

CUDA Toolkitを入れる。
ここからダウンロード。
https://developer.nvidia.com/cuda-downloads?target_os=Windows&target_arch=x86_64&target_version=10&target_type=exe_network


最新の11.6.2を入れた。


ユーザー環境変数に追加する。
変数:CMAKE_CUDA_COMPILER
値:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.6\bin\nvcc.exe
※値の欄はインストールしたバージョンに合わせ変更する 上記はv11.6の場合

Python 編

AnacondaでPythonをインストール。
最新版のPython 3.9を入れた。
https://www.anaconda.com/products/distribution

OptiX 編

OptiXとは?
NVIDIAのレイトレーシングエンジン。
instant-ngpでは「メッシュSDFのトレーニングを高速化」するために使っているらしい。

ここからダウンロード。
https://developer.nvidia.com/rtx/ray-tracing/optix



ダウンロードするには開発者プログラムへの参加が必要なので参加する。

インストールしたらシステム環境変数に追加する。
変数:OptiX_INSTALL_DIR
値:C:\ProgramData\NVIDIA Corporation\OptiX SDK 7.4.0
※値はファイルではなくディレクトリ
※値の欄はインストールしたバージョンに合わせ変更する 上記はv7.4.0の場合

コンパイル 編

instant-ngp-Windowsをビルド

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\extras\visual_studio_integration\MSBuildExtensions
にあるファイルを、
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\BuildCustomizations
にコピーする。

instant-ngp-Windowsを ここ からzipダウンロードorクローンする。
※追記:zipダウンロードの場合そのままでは必要なデータが不足していたりとエラーになりがちなのでクローンの方が良さそう

Developper Command Prompt for VS 2019を起動。

クローンしたリポジトリのルートディレクトリへ移動する。
例:cd E:\Git\lileaLab\NeRF\instant-ngp-Windows

cmake . -B buildを実行。

※参考:このコマンドの意味はこちらの記事が参考になった

続いて以下のコマンドを実行。
cmake --build build --config RelWithDebInfo -j 16
この処理はそこそこ時間がかかる。

COLMAPを準備

COLMAPをダウンロードする。
https://github.com/colmap/colmap/releases

解凍したらリポジトリのルートディレクトリに配置しフォルダ名をCOLMAPにリネームする。
※追記:リポジトリ内に入れる必要はなかった。下記工程でPathを通すのでどこでも良い。

システム環境変数のPathにCOLMAPのディレクトリを追加する。
例:E:\Git\lileaLab\NeRF\instant-ngp-Windows\COLMAP

Pythonで仮想環境を構築

Anacondaのプロンプトを起動。

以下のコマンドを実行。
ngpという名前の仮想環境を作成。
conda create -n ngp python=3.9
※Python ver.3.10だとこの後の「OpenEXR‑1.3.2‑cp39‑cp39‑win_amd64.whl」がインストール出来ないので注意

作成したngpの仮想環境をアクティブにする。
conda activate ngp

クローンしたディレクトリへ移動する。
cd E:\Git\lileaLab\NeRF\instant-ngp

次の工程で必要なものをインストールするので一旦pipアップグレードする。
python -m pip install --upgrade pip

必要なものをrequirementsテキストを参照しインストール。
pip install -r requirements.txt

pyexr がインストールされなかった場合は「OpenEXR‑1.3.2‑cp39‑cp39‑win_amd64.whl」をダウンロードしてくる。
https://www.lfd.uci.edu/~gohlke/pythonlibs/#openexr

ダウンロードしたファイルをリポジトリのルートフォルダに置く。

下記コマンドの実行しインストールする。
pip install OpenEXR-1.3.2-cp39-cp39-win_amd64.whl
※Python 3.10を使っていると失敗したので注意

生成編

dataフォルダ内に任意のフォルダを作成し、その中へ生成したい画像一式を入れる。

公式サンプルの画像はこちらからDL可能。
https://drive.google.com/drive/folders/1J2tjCOoZeP-UTq3xsXS6WpTlc_yrzVuq

python scripts/colmap2nerf.py –colmap_matcher exhaustive –run_colmap –aabb_scale 16 –images <image/path> を実行する。
例:「data/toy_truck」フォルダに画像を入れていた場合は以下のコマンド。
python scripts/colmap2nerf.py --colmap_matcher exhaustive --run_colmap --aabb_scale 16 --images data/toy_truck

コマンド実行時にnumpyがないとエラーになった場合はー
ModuleNotFoundError: No module named 'numpy'

pip install numpyでインストールする。
参考記事:https://blog.mktia.com/how-to-solve-the-error-that-module-not-found/

コマンド実行時にcv2がないとエラーになった場合はー
ModuleNotFoundError: No module named 'cv2'

pip install opencv-pythonでインストールする。
参考記事:https://qiita.com/solitude_under_the_blue_sky/items/c49ff2d1970089ae3a1b

必要なものがインストールできたら、再度python scripts/colmap2nerf.py --colmap_matcher exhaustive --run_colmap --aabb_scale 16 --images data/toy_truckを実行。

ルートにjsonファイルが生成される。

いよいよ実行するが、その前にjsonファイルとディレクトリの構成を以下のように整理する。

リポジトリのルートフォルダからtestbed.exeをデータフォルダを引数で指定し実行する。
例:E:\Git\lileaLab\Instant-NGP-Windows\instant-ngp-Windows\build\testbed.exe --scene data/toy_truck

以上!