旧原宿駅と首里城を3D復元してみた。
写真から空間を構築するNeRFという技術。
2年前に撮影した原宿駅の16枚の写真と、
みんなの首里城プロジェクトの200枚の写真から生成。ガラスや水、氷も3Dで再現出来るのすごいな。 pic.twitter.com/oERg8YNoEX
— 龍 lilea / Ryo Fujiwara (@lileaLab) April 9, 2022
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
以上!