また投稿まで時間がかかってしまいました。
最近AI関連の話題がすごくて、私も追いつかれないように必死にしがみついています。
前から画像から3Dモデルを再現する3次元復元に興味があって、SfMでよく聞くCOLMAPとかも調べてたんですが、これだけだといまいちポリゴン感が抜けなくて、もっときれいに復元できたらいいのになと思っておりました。
そんな中Nerfという機械学習を取り入れた3次元復元の技術を知りました。GoogleMapでも東京タワーとかをこのマウスでホバーするとNerfをつかったイマーシブビューってやつを確認できます。初めてこれを見たとき今までの3次元復元とリアルさが全然違ってすごってなりました。
自分でもこれやりたいなと思って色々やってみたので、その備忘録みたいなものです。
instant-ngp
Nerfを体験しようと思ったとき最初に出てきたのが、この「instant-ngp」ってやつです。僕みたいな一般市民は高性能なグラボを持っているわけでもなく、お金もないため、できるだけ安価でNerfをやってみたいと思っていましたが、このinstant-ngpは学習時間を短縮させたNerfらしいです。
ただ簡単にできるわけでもなく、セットアップやらビルドやら結構大変でした。こちらとかこちらとか色々参考にさせていただきました。こういうの初めにやられる人は本当にすごいですね。
でサンプルをやってみようと思いました。成功すると以下のようなきれいな3Dモデルができるみたいです。

しかし自分でできたのは、以下のようなもやもやしたもので、思うような結果が得られませんでした。

自分のPCのスペック不足か、使い方が間違っているのかわかりませんが、 Githubの質問欄?に拙い英語で質問しても、返信がなくげんなりしていました。
nerfstudio
そこで見つけたのは、「nerfstudio」といういろんなNerfのモデルが手軽に実施できるソフトでした。
こちらはインストールなども難しくなく、いろんなモデルも試せるということでこちらで遊んでみることにしました。
はじめはインストールが簡単なDockerを使ったインストール方法でやっていたのですが、GPUの制限?のせいなのか、あまり重たい計算ができなかったので、途中で自分のconda環境にインストールする方法に切り替えました。
Dockerのインストールではこちらのサイトが役に立ちました。
1 2 |
# docker のコンテナ起動コマンド(Dドライブにディレクトを作った場合) docker run --gpus all -v D:\nerfstudio:/workspace/ -v D:\nerfstudio\.cache:/home/user/.cache/ -p 7007:7007 --rm -it --shm-size=16gb dromni/nerfstudio:0.3.1 |
nerfstudioではいろんなモデルを試すことができました。ここではnerfstudioの基本的なモデルであるnerfactoを基準として、G-shockの時計を動画で撮影し、それを処理した結果を載せておきます。
- 撮影機器:iPad Pro 2022年モデル
- 使用した画像枚数(1分47秒の動画から抽出):3208枚
- 使用GPU:RTX3060Ti
- 使用OS:Windows11
iterationを変えた例
計算回数を変えたときの変化です。3万回ではまだ荒く、10万回では色が鮮明でない(G-SHOCKのロゴが白い(本当は水色))ようだったので、20万回、30万回くらい計算しないといい感じにはなりませんでした。計算時間は測っていないのですが、30万回で半日ほどだったと思います。
train-num-rays-per-batchを変えてみる
多分高画質になるはず!
Nerfacto-bigにしてみる
”nerfacto-big”はnerfactoの高品質版みたいです。さらに上位のnerfacto-hugeは僕のパソコンではGPUのメモリ不足で実行不可能でした。
結果はあまり変わらなかった記憶があります。そもそもnerfactoとbigで設定が違う可能性があり、比較できていないかも。
Nerfbusters
Nerfbustersはnerfで作成時にできる”もやもや”を除去することができるモデルみたいです。 もともとnerfactoでも”もやもや”が少なかったから、あまり意味はなかったかも。
導入時に苦労したので、僕なりの導入方法を載せておきます。
Nerfbusters導入手順
- CUDA11.7.1をインストール(こちらあたりを参照)
- conda環境をセットアップする
conda create --name nerfbusters -y python=3.8
conda activate nerfbusters
python -m pip install --upgrade pip - Nerfstudio と依存関係をインストール(nerfbusters-changesをクローン)
git clone -b nerfbusters-changes https://github.com/nerfstudio-project/nerfstudio.git
cd nerfstudio
pip install --upgrade pip setuptools
pip install -e .
pip install torch==1.13.1 torchvision functorch --extra-index-url https://download.pytorch.org/whl/cu117
pip install ninja git+https://github.com/NVlabs/tiny-cuda-nn/#subdirectory=bindings/torch
conda install -c "nvidia/label/cuda-11.7.1" cuda-toolkit - nerfbustersをインストール
cd ../
git clone https://github.com/ethanweber/nerfbusters
cd nerfbusters
pip install -e . - ns-train nerfbusters –helpが表示出来たら成功
ns-train nerfbusters --help
Nerfbustersの実行手順
Nerfbustersの実行にあったっての手順メモ
- nerfactoを実行する(nerfbustersディレクトリ内)
#COLMAP実行
ns-process-data video --data data/v-01/v-01.mp4 --output-dir data/v-01-output --num-frames-target 3000#nerfトレーニング実行
ns-train nerfacto --data data/v-01-output --max-num-iterations 20000 - 重みのダウンロード
python nerfbusters/download_nerfbusters_dataset.py diffusion-cube-weights
- nerfbustersの実行(日時のディレクトリと.ckptのファイル名は適宜さきほどトレーニングした結果に変更する)
ns-train nerfbusters --data data/v-01-output --pipeline.nerf-checkpoint-path outputs/v-01-output/nerfacto/2023-08-02_133854/nerfstudio_models/step-000029999.ckpt nerfstudio-data --eval-mode train-split-fraction
- レンダリング (日時のディレクトリは適宜変更、カメラパスはnerfstudioのviewerで作成する)
ns-render --load-config outputs/v-01-output/nerfbusters/2023-08-02_140153/config.yml --traj filename --camera-path-filename data/v-01-output/camera_paths/2023-08-02_133854.json --output-path renders/2023-08-02_140153.mp4
まとめ
Nerfを実際やってみたけどやっぱりすごいですね!面白いと思います。今後どんどん発展してく分野な気がします。
もっと色々試してみたいと思います。
その他メモコマンド
- GPU使用率確認(コマンドプロンプト)
nvidia-smi
- GPUのメモリ解放(コマンドプロンプト)
taskkill /im cmd.exe /f
- conda 仮想環境の削除(Anaconda Prompt root環境)
conda remove -n myenv --all
参考サイト
- NeRFとは?従来の技術との違いとユースケース、これからの課題について
- Google、東京でもGoogle マップで没入感のある3D表示「イマーシブビュー」が利用可能に
- Instant Neural Graphics Primitives
- Instant NeRF (instant-ngp) を試す環境を作る
- Instant NGP (NeRF) のセットアップ方法
- nerfstudioでNeRFから360°画像をレンダリングする
- nerfstudio
- NVIDIA ドライバ,NVIDIA CUDA ツールキット 11.7.1,NVIDIA cuDNN v8.5 のインストールと動作確認(Windows 上)
コメント