これは、instruct-nerf2nerfの公式実装です。

instruct-nerf2nerfはnerfstudioに構築されているため、同じ依存関係を持っています。特にPytorchとTinycudannが必要です。
このリンクの指示に従って、環境を作成し、依存関係をインストールします。 Tinycudannまでのコマンドのみに従ってください。依存関係がインストールされたら、ここに戻ります。
依存関係のインストールが完了したら、次のコマンドを使用してinstruct-nerf2nerfをインストールできます。
pip install git+https://github.com/ayaanzhaque/instruct-nerf2nerfオプション:コードを直接操作する場合は、クローンをクローンしてからレポをインストールします。
git clone https://github.com/ayaanzhaque/instruct-nerf2nerf.git
cd instruct-nerf2nerf
pip install --upgrade pip setuptools
pip install -e . 次のコマンドは、Optionsの1つとしてin2nを含める必要があります。
ns-train -h
nerfを編集するには、最初にデータを使用して通常のnerfactoシーンをトレーニングする必要があります。カスタムデータを処理するには、このドキュメントを参照してください。
カスタムデータを取得したら、次のコマンドで最初のnerfをトレーニングできます。
ns-train nerfacto --data {PROCESSED_DATA_DIR}NERFのトレーニングの詳細については、Nerfstudioのドキュメントを参照してください。
シーンを完全にトレーニングすると、チェックポイントはoutputsディレクトリに保存されます。 nerfstudio_modelsフォルダーへのパスをコピーします。
NERFの編集のためのトレーニングを開始するには、次のコマンドを実行します。
ns-train in2n --data {PROCESSED_DATA_DIR} --load-dir {outputs/.../nerfstudio_models} --pipeline.prompt { " prompt " } --pipeline.guidance-scale 7.5 --pipeline.image-guidance-scale 1.5 {PROCESSED_DATA_DIR}は、元のnerfのトレーニングで使用されるのと同じパスでなければなりません。 CLIコマンドを使用して、PROMPTSPIX2PIXに使用されるプロンプトとガイダンススケールを選択できます。
nerfが訓練された後、ここにある標準のnerfstudioワークフローを使用してnerfをレンダリングできます。
重要なのは、512を超える解像度の画像でNERFをトレーニングすると、instlumentPix2PixがOOMエラーをスローする可能性が高いことに注意してください。さらに、InstructPix2Pixは、高解像度で画像で著しく悪化しているようです。約512(最大寸法)の解像度でトレーニングをお勧めするため、次のタグをnerfactoおよびin2n ns-trainコマンドの両方の最後に追加します。NERFSTUDIO nerfstudio-data --downscale-factor {2,4,6,8} 。または、自分でデータセットをダウンスケールしてtransforms.jsonを更新することができます。JSONファイル(W、H、FL_X、FL_Y、CX、CY)、またはNerfstudioが提供する小さな画像スケールを使用することもできます。
より小さなデータセットが私たちの方法により良く、より速く動作するため、PolyCamの画像を使用してデータをキャプチャすることをお勧めします。
複数のGPUがある場合、InstantPix2Pixを別のGPUに配置することにより、トレーニングを盛り上げることができます。そのために、 --pipeline.ip2p-device cuda:{device-number}トレーニングコマンドに追加します。
私たちの方法では、〜16kの光線とLPIPSを使用しますが、すべてのGPUがこの構成を実行するのに十分なメモリを持っているわけではありません。その結果、メモリが少ない2つの代替構成を提供しましたが、これらの構成はパフォーマンスの低下につながることに注意してください。違いは、IntructPix2Pixに使用される精度とLPIPSが使用されるかどうかです(これには4倍の光線が必要です)。各構成の詳細は、以下の表に記載されています。
| 方法 | 説明 | メモリ | 品質 |
|---|---|---|---|
in2n | 紙で使用されるフルモデル | 〜15GB | 最高 |
in2n-small | 半精度モデル | 〜12GB | 良い |
in2n-tiny | LPIPSのない半精度 | 〜10GB | わかりました |
現在、 in2nトレーニングの最大数の反復を15K Iteratiosに設定しています。ほとんどの場合、編集は〜10kの反復後に見栄えがよくなります。より長くトレーニングしたい場合は、最後のin2nチェックポイントをリロードしてトレーニングを続けるか、 --max-num-iterations 30000変更してください。
編集が希望どおりに機能していない場合は、InstandPix2Pixが画像とプロンプトに苦労しているためです。トレーニングビューの1つを取り、最初に2Dで編集しようとすることをお勧めします。良い編集を取得するためのその他のヒントは、こちらをご覧ください。
instruct-gs2gsと呼ばれるガウスのスプラッティング用のinstruct-nerf2nerfの拡張機能を構築しました。それらのリポジトリは、Instruct-nerf2nerfに基づいて将来のプロジェクトを構築する方法の例として使用できます。
遭遇するインストール/使用の問題については、GitHubの問題を開いてください。可能な限り幅広いGPUをサポートしようとしましたが、さらに低いフットプリントバージョンを提供する必要があるかもしれません。メモリの使用量を改善するために、変更に貢献してください!
Instruct-nerf2nerfを構築するために、コアコードコンポーネントの説明を提供します。
in2n_datamanager.py :このファイルは、nerfstudioのbase_datamanager.pyとほぼ同じです。主な違いは、毎回next_trainメソッドでサンプリングされるのではなく、データセットテンソル全体がsetup_trainメソッドで事前に計算されていることです。
in2n_pipeline.py :このファイルは、nerfstudioのパイプラインモジュールに構築されます。 get_train_loss_dictメソッドは画像をサンプリングし、編集した画像をデータセットに戻します。
ip2p.py :このファイルには、instructpix2pixモデル( diffusers実装を使用)があります。 edit_imageメソッドは、拡散モデルを使用して画像が除去される場所であり、このファイルにもさまざまなヘルパーメソッドが含まれています。
in2n.pyメソッドget_loss_dict上書きして、LPIPS損失とL1LOSSを使用します。
あなたは私たちの論文をArxivで見つけることができます。
このコードを見つけたり、研究に役立つ論文を見つけた場合は、引用してください。
@inproceedings{instructnerf2023,
author = {Haque, Ayaan and Tancik, Matthew and Efros, Alexei and Holynski, Aleksander and Kanazawa, Angjoo},
title = {Instruct-NeRF2NeRF: Editing 3D Scenes with Instructions},
booktitle = {Proceedings of the IEEE/CVF International Conference on Computer Vision},
year = {2023},
}