Instant-ngpの構築方法

今回は、Instant-ngpを使って3Dモデルを生成してみたいけど、やり方が分からない方向けにセットアップの方法や操作方法、モデルの出力方法を解説します。
構築方法が分からなくて悩んでいる方は、この記事を参考にしてInstant-ngpを構築して動かしてみてください。

NeRFとは

NeRFとは、新しい視点の画像を生成するニューラルネットワークで、複数の視点から画像とカメラの位置情報を入力し、学習させることで新規の視点から画像をレンダリングすることができます。

Instant-ngpとは

Instant-ngpとはNvidiaの研究チームが論文発表したもので、NVIDIA CUDA ToolkitとTiny CUDA Neural Networkライブラリを使用して開発されたものです。
Multi-resolution Hash Grid Encodingという技術を使用して学習時間を大幅に短縮させた、Nvidia製のGPUで動作します。

動作環境

今回は、以下の環境でInstant-ngpを動かしました。

OS: Windows11 home

CPU: Intel Core I7 13700k

RAM: DDR4 3200 16GB

GPU: NVIDIA RTX 3070 8GB

推奨GPUはRTX3090ですが、私が使用しているRTX3070でも動作はしますが、学習中はフレームレートが低すぎて作業しづらかったり、ハイパーパラメータの値を上げすぎるとInstant-ngpが落ちたりしますので推奨以下のGPUで動作させる場合は注意してください。

セットアップ方法

次にセットアップ方法について解説します。

セットアップの方法はbycloudai氏のGitHubを参考にして作成しました。

ツールのダウンロード

最初にInstant-ngpに必要なツールをダウンロードします。

Community2019をダウンロードしてください。
インストーラーのダウンロードが終わりましたら「変更」をクリックして「C++によるデスクトップ開発」にチェックマークをつけてからインストールしてください。

Community2019をダウンロード

Community2019をダウンロード

最新のバージョンをインストールしてください。

こちらも最新のバージョンをインストールして、Python3.9を入れてください。

最新版をダウンロードします。
Windows x64 Installerをダウンロードしてください。

Windows x64 Installerをダウンロード

インストールする際には「Add CMake to the system PATH for all users」をクリックしてインストールしてください。

「Add CMake to the system PATH for all users」をクリックしてインストール

上記同様最新版をダウンロードしてください。
ダウンロードするためにはNVIDIA開発プログラムに加入しないとダウンロードできないので先に加入してください。

インストール後システム変数を以下のようにしてください。

変数名: OptiX_INSTALL_DIR

変数値: C:\ProgramData\NVIDIA Corporation\OptiX SDK 7.5.0

システム変数

変数値の項目はインストールしたバージョンに変更してください。

クローンを生成するために必要なのでダウンロードしてください。
その後システム環境変数にgitを追加してください。

クローンを生成するために必要なのでダウンロード

システム環境変数にgitを追加

自分で用意した画像を学習できるようにするために必要なので最新版をダウンロードしてください。
解凍したらフォルダの名前を「COLMAP」に変更してください。
こちらもgit同様システム環境変数にcolmapを追加してください。

システム環境変数にcolmapを追加

必要なツールのダウンロードは以上です。

instant-ngpの構築

次にinstant-ngpの構築を行います。最初に

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.6\extras\visual_studio_integration\MSBuildExtensions

の中にあるファイルを全て

C:\ProgramFiles(x86)\MicrosoftVisualStudio\2019\Community\MSBuild\Microsoft\VC\v160\BuildCustomizations

にコピーしてください。

instant-ngpの構築

instant-ngpの構築

次にコードのクローンをダウンロードするためにディレクトリを作成してください。

例:C:\Tutorial\ngp

作成が終わりましたらAnaconda Promptを開いて、先程作ったディレクトリに移動してください。

例:cd C:\Tutorial\ngp

移動したらgit cloneを実行するので、以下のコマンドを実行してください。

git clone –recursive https://github.com/nvlabs/instant-ngp

クローンの生成が完了したらinstant-ngpのディレクトリに移動してください。

cd instant-ngp

移動した後はDeveloper Command Promptを開いて、クローンを作った場所に移動してください。

cd C:\Tutorial\ngp\instant-ngp

移動したら以下のコマンドを実行してください。

cmake . -B build

ビルドファイルが生成されたら次に以下のコマンドを実行してください。
「-j」のあとにある数字は使用しているCPUのコア数を入力してください。

cmake –build build –config RelWithDebInfo -j 16

完了したら仮想環境を構築するのでAnaconda Promptを開いて以下のコマンドを実行してください。

conda create -n ngp python=3.9

Remove existing environmentやProceedとでたら「y」と入力してenterを押してください。
構築し終わったら先程作成した仮想環境を動かすので以下のコマンドを実行してください。

conda activate ngp

ngpをアクティベートさせたらパッケージを一括でインストールするので以下のコマンドを実行してください。

pip install -r requirements.txt

先程のコマンドでpiexrのインストールに失敗した場合は、こちらからOpenEXR-1.3.2-cp39-cp39-win_amd64.whlをダウンロードしてください。
ダウンロードしたフォルダはinstant-ngpのフォルダ内に移動してください。

ダウンロードしたフォルダはinstant-ngpのフォルダ内に移動

移動したらpiexrをインストールするのでAnaconda Promptで以下のコマンドを実行してください。

pip install OpenEXR-1.3.2-cp39-cp39-win_amd64.whl

instant-ngpの構築は以上です。

画像データセットの準備

自分で画像を用意する際の注意点ですが、画像の解像度は4Kより低い画像を使用してください。
高解像度の画像を使うとAIに読み込ませた際にクラッシュする可能性があります。

画像の枚数は、最低でも50枚程度は用意してください。少なすぎるとモデルの精度が悪くなります。私の場合はガンダムのプラモデルの画像を100枚使用し、撮影方法はモデルを中心に360℃撮りました。
また、フィギュア等を生成する場合正面からの撮影だけでなく真上や斜め上、下方向など様々な角度から撮影するとモデルの精度が良くなるのでおすすめです。

画像が用意できたら画像が入っているフォルダをinstant-ngpのdataフォルダに入れてください。

画像が入っているフォルダをinstant-ngpのdataフォルダに入れる

入れ終わったら以下のコマンドを実行してjsonファイルを生成します。

python scripts/colmap2nerf.py –colmap_matcher exhaustive –run_colmap –aabb_scale 16 –images <image/path>

生成されたjsonファイルは、instant-ngp内のフォルダに入っています。

生成されたjsonファイルはinstant-ngp内のフォルダに入っている

jsonファイルが生成されたのを確認したら次にフォルダの中とjsonファイルを以下のように変更してください。

📂instant-ngp/

├── 📂data/

│         ├── 📂test/

│         │         ├── 📜transforms.json/

│         │         ├── 📂data/

│         │         │         ├── 📂test /

│         │         │         │         ├── 📜IMG_1.jpg

│         │         │         │         ├── 📜IMG_2.jpg

│         │         │         │         │…

│         │         │         │…

│         │         │…

│         │…

│…

Instant-ngpの実行

Instant-ngpを実行して学習させます。以下のコマンドを実行してください。

<path_to_your_ngp>\instant-ngp\build\testbed.exe –scene data/<image_set_name>

<path_to_your_ngp>にはngpのpathを、<image_set_name>には画像の入ったフォルダの名前を入力してください。

例 C:\Tutorial\ngp\instant-ngp\build\testbed.exe –scene data/test

Instant-ngpの実行

上の画像のように表示されたら成功です。

操作方法

Instant-ngpでの操作方法は以下のとおりです。

  • WASD:前後左右に移動
  • Spacebar/C:上下移動
  • =/+:カメラの速度の増減
  • -/_:ズームインとズームアウト
  • E/Shift+E:露出の増減
  • Tab:タブの切り替え
  • R:ファイルからネットワークを再読み込みする
  • Shift+R:カメラのリセット
  • マウス左クリック長押し+上下左右:カメラの回転

動画の出力方法

動画を出力するにはffmpegが必要になりますのでこちらから「win64-gpl」をダウンロードして解凍してください。

解凍し終わりましたらPathを通すのでAnaconda Promptから仮想環境アクティベートして以下のコマンドを実行してください。

set PATH=%PATH%;(ffmpegのPath)

例:set PATH=%PATH%; C:\Program Files\ffmpeg\bin

ffmpeg -versionを実行して、ffmpegのversionが表示されたら問題ないです。

動画の出力方法

Pathを通しましたら、instant-ngpを起動してメニューの「Camera path」を開いてください。

instant-ngpを起動してメニューの「Camera path」を開く

開くと「Add from cam」がありますので、取りたい位置に移動したら、このボタンをクリックしてカメラの位置を追加してください。

「Add from cam」がありますので取りたい位置に移動したらこのボタンをクリックしてカメラの位置を追加

この作業をしているときは、メニューからTrainingの中にあるStop trainingを押してトレーニングを中止してください。

トレーニング中だとGPUに負荷がかかり、フレームレートが下がって作業がしづらくなるので中止させるのをお勧めします。

メニューからTrainingの中にあるStop trainingを押してトレーニングを中止

カメラの設定が完了したら「Save」を押して保存して、メニューからSnapshotも保存してください。

「Save」を押して保存して、メニューからSnapshotも保存

保存されたファイルは「data/画像名」の中に入っています。

「data/画像名」

次に、動画を出力するので以下のコマンドを実行してください。

python scripts/run.py –scene data/test –load_snapshot data/test/base.msgpack –video_n_seconds 5 –video_fps 60 –width 1920 –height 1080 –mode nerf –video_camera_path data/test/base_cam.json
  • 動画の時間を変更したい場合は「–video_n_seconds」の数値
  • フレームレートを変更したい場合は「–video_fps」の数値
  • 解像度を変更したい場合は「–width 1920 –height 1080」の数値

を変更してください。5秒の動画でも、出力するのに15分弱かかるので長時間の動画を出力する際は気をつけてください。

「instant-ngp」の中に保存されていれば成功です。

「instant-ngp」の中に保存されていれば成功

モデルの出力方法

最後にモデルの出力方法について解説します。
この作業を行う際も、メニューからStop trainingを押してトレーニングを中止してください。

最初に、不要な部分をトリミングします。
Renderingの中にCrop aabbという項目があるので、そちらでトリミングを行ってください。

モデルの出力方法

トリミングが終わったら、次にモデルをメッシュ化します。
Marching Cubes Mesh OutputからMesh it!をクリックするとメッシュ化します。

Marching Cubes Mesh OutputからMesh it!をクリックするとメッシュ化

Mesh化にすることが出来ましたら、次にモデルを保存します。

Mesh render modeは「Vertex Colors」、Optimize meshにチェックマーク、Inflateは「0」に設定してその他の項目はお好みで設定してください。
設定し終わったらSave itを押して保存してください。

Mesh render modeは「Vertex Colors」、Optimize meshにチェックマーク、Inflateは「0」に設定してその他の項目はお好みで設定

保存されたモデルは、instant-ngp→data→画像フォルダ名の中に保存されています。

instant-ngp→data→画像フォルダ名の中に保存

保存されたのでBlenderでモデルを確認します。

Blenderでモデルを確認

このままだと色が反映されていないので、オブジェクトモードから頂点ペイントに変更して下さい。

オブジェクトモードから頂点ペイントに変更

頂点ペイントにするとモデルに色が付きます。

モデル

まとめ

この記事ではinstant-ngpの構築方法について解説しました。
Instant-ngpをビルドする箇所が一番大変ですが、そこさえ乗り切れば後は簡単ですのでNvidia製のグラフィックスカードをお持ちの方はこの記事を参考して是非お試しください。

最新情報をチェックしよう!