今回は、Instant-ngpを使って3Dモデルを生成してみたいけど、やり方が分からない方向けにInstant-ngpのセットアップの方法や構築方法、モデルの出力方法を解説します。
Instant-ngpの構築方法が分からなくて悩んでいる方は、この記事を参考にしてInstant-ngpを構築して動かしてみてください。
Instant-ngpとは
Instant-ngpとはNvidiaの研究チームが論文発表したもので、NVIDIA CUDA ToolkitとTiny CUDA Neural Networkライブラリを使用して開発されたものです。
Multi-resolution Hash Grid Encodingという技術を使用して学習時間を大幅に短縮させた、Nvidia製のGPUで動作します。
Instant-ngpの動作環境
今回は、以下の環境で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で動作させる場合は注意してください。
Instant-ngpのセットアップ方法
次にセットアップ方法について解説します。
セットアップの方法はbycloudai氏のGitHubを参考にして作成しました。
ツールのダウンロード
最初にInstant-ngpに必要なツールをダウンロードします。
Community2019をダウンロードしてください。
インストーラーのダウンロードが終わりましたら「変更」をクリックして「C++によるデスクトップ開発」にチェックマークをつけてからインストールしてください。
最新のバージョンをインストールしてください。
こちらも最新のバージョンをインストールして、Python3.9を入れてください。
最新版をダウンロードします。
Windows x64 Installerをダウンロードしてください。
インストールする際には「Add CMake to the system PATH for all users」をクリックしてインストールしてください。
上記同様最新版をダウンロードしてください。
ダウンロードするためにはNVIDIA開発プログラムに加入しないとダウンロードできないので先に加入してください。
インストール後システム変数を以下のようにしてください。
変数名: OptiX_INSTALL_DIR
変数値: C:\ProgramData\NVIDIA Corporation\OptiX SDK 7.5.0
変数値の項目はインストールしたバージョンに変更してください。
クローンを生成するために必要なのでダウンロードしてください。
その後システム環境変数にgitを追加してください。
自分で用意した画像を学習できるようにするために必要なので最新版をダウンロードしてください。
解凍したらフォルダの名前を「COLMAP」に変更してください。
こちらもgit同様システム環境変数にcolmapを追加してください。
必要なツールのダウンロードは以上です。
instant-ngpの構築
次にinstant-ngpの構築を行います。最初に
の中にあるファイルを全て
にコピーしてください。
次にコードのクローンをダウンロードするためにディレクトリを作成してください。
例:C:\Tutorial\ngp
作成が終わりましたらAnaconda Promptを開いて、先程作ったディレクトリに移動してください。
例:cd C:\Tutorial\ngp
移動したらgit cloneを実行するので、以下のコマンドを実行してください。
クローンの生成が完了したらinstant-ngpのディレクトリに移動してください。
cd instant-ngp
移動した後はDeveloper Command Promptを開いて、クローンを作った場所に移動してください。
cd C:\Tutorial\ngp\instant-ngp
移動したら以下のコマンドを実行してください。
ビルドファイルが生成されたら次に以下のコマンドを実行してください。
「-j」のあとにある数字は使用しているCPUのコア数を入力してください。
cmake –build build –config RelWithDebInfo -j 16
完了したら仮想環境を構築するのでAnaconda Promptを開いて以下のコマンドを実行してください。
Remove existing environmentやProceedとでたら「y」と入力してenterを押してください。
構築し終わったら先程作成した仮想環境を動かすので以下のコマンドを実行してください。
ngpをアクティベートさせたらパッケージを一括でインストールするので以下のコマンドを実行してください。
先程のコマンドでpiexrのインストールに失敗した場合は、こちらからOpenEXR-1.3.2-cp39-cp39-win_amd64.whlをダウンロードしてください。
ダウンロードしたフォルダはinstant-ngpのフォルダ内に移動してください。
移動したらpiexrをインストールするのでAnaconda Promptで以下のコマンドを実行してください。
instant-ngpの構築は以上です。
画像データセットの準備
自分で画像を用意する際の注意点ですが、画像の解像度は4Kより低い画像を使用してください。
高解像度の画像を使うとAIに読み込ませた際にクラッシュする可能性があります。
画像の枚数は、最低でも50枚程度は用意してください。少なすぎるとモデルの精度が悪くなります。私の場合はガンダムのプラモデルの画像を100枚使用し、撮影方法はモデルを中心に360℃撮りました。
また、フィギュア等を生成する場合正面からの撮影だけでなく真上や斜め上、下方向など様々な角度から撮影するとモデルの精度が良くなるのでおすすめです。
画像が用意できたら画像が入っているフォルダをinstant-ngpのdataフォルダに入れてください。
入れ終わったら以下のコマンドを実行してjsonファイルを生成します。
生成された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>には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:カメラのリセット
- マウス左クリック長押し+上下左右:カメラの回転
Instant-ngpで動画を出力する方法
動画を出力するにはffmpegが必要になりますのでこちらから「win64-gpl」をダウンロードして解凍してください。
解凍し終わりましたらPathを通すのでAnaconda Promptから仮想環境アクティベートして以下のコマンドを実行してください。
例:set PATH=%PATH%; C:\Program Files\ffmpeg\bin
ffmpeg -versionを実行して、ffmpegのversionが表示されたら問題ないです。
Pathを通しましたら、instant-ngpを起動してメニューの「Camera path」を開いてください。
開くと「Add from cam」がありますので、取りたい位置に移動したら、このボタンをクリックしてカメラの位置を追加してください。
この作業をしているときは、メニューからTrainingの中にあるStop trainingを押してトレーニングを中止してください。
トレーニング中だとGPUに負荷がかかり、フレームレートが下がって作業がしづらくなるので中止させるのをお勧めします。
カメラの設定が完了したら「Save」を押して保存して、メニューからSnapshotも保存してください。
保存されたファイルは「data/画像名」の中に入っています。
次に、動画を出力するので以下のコマンドを実行してください。
- 動画の時間を変更したい場合は「–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!をクリックするとメッシュ化します。
Mesh化にすることが出来ましたら、次にモデルを保存します。
Mesh render modeは「Vertex Colors」、Optimize meshにチェックマーク、Inflateは「0」に設定してその他の項目はお好みで設定してください。
設定し終わったらSave itを押して保存してください。
保存されたモデルは、instant-ngp→data→画像フォルダ名の中に保存されています。
保存されたのでBlenderでモデルを確認します。
このままだと色が反映されていないので、オブジェクトモードから頂点ペイントに変更して下さい。
頂点ペイントにするとモデルに色が付きます。
Instant-ngpの構築方法についてまとめ
この記事ではinstant-ngpの構築方法について解説しました。
Instant-ngpをビルドする箇所が一番大変ですが、そこさえ乗り切れば後は簡単ですのでNvidia製のグラフィックスカードをお持ちの方はこの記事を参考して是非お試しください。