[3D 再構成] [ディープラーニング] Instant-nsr-pl 公式コード Windows 10 での Pytorch 実装
ヒント: Instant-NGP および Pytorch-Lightning フレームワークに基づくニューラル サーフェスの再構築
記事ディレクトリ
序文
NeRF は、記事「NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis [ECCV 2020]」の中で、カリフォルニア大学バークレー校のミルデンホール、ベニらによって提案された 5D 神経放射場です。ポーズを含むまばらなマルチアングル画像を入力する の暗黙的表現は、神経放射場モデルを取得するためにトレーニングされます。簡単に言うと、同じシーンの異なる視点からの2次元画像とカメラポーズを入力することでシーンの3次元暗黙的モデリングを実行し、ボクセルレンダリング方程式を通じて任意の新しい視点からのシーン画像の合成を実現します。
NeuS は、香港大学の Wang、P らによって論文「NeuS: Learning Neural Implicit Surfaces by Volume Rendering for Multi-view Reconstruction [NeurIPS 2021]」[論文アドレス] で提案された新しい神経表面再構成手法です。 2D 画像入力からオブジェクトとシーンを高忠実度に再構築します。簡単に言えば、新しい一次のほぼ不偏な定式化が提案され、マスク監視なしでもより正確な表面再構成が可能になります。
Instant-nsr-pl ネットワークを詳細に分析する前に、最初のタスクは、元のNeRFおよびNeuSの原理とコード分析を理解し、モデルのトレーニングとテスト作業を完了することです。仕事を始めてください。
[独自のデータセットをトレーニングする]
instant-nsr-pl モデルの実行
ソースコードをダウンロードして環境をインストールする
win10環境にanaconda環境をインストールすることで、 Instant-nsr-plモデル専用の仮想環境を簡単に構築できます。
[ pytorch コードのオリジナルのリファレンス チュートリアル]
[ pytorch コードの推奨リファレンス チュートリアル (Windows 環境) ]
pytorch の GPU バージョンのインストールに関するチュートリアル. pytorch-gpu バージョンについては、お使いのコンピューターに応じて、対応するバージョンをインストールする必要があります。
# 创建虚拟环境
conda create -n instant-nsr-pl python=3.8
# 查看新环境是否安装成功
conda env list
# 激活环境
activate instant-nsr-pl
# windows一定要通过网站直接下载
# 下载githup源代码到合适文件夹,并cd到代码文件夹内(科学上网)
git clone https://github.com/bennyguo/instant-nsr-pl.git
# 具体看个人下载的位置xxxxx/instant-nsr-pl
cd instant-nsr-pl
# 安装pytorch包
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
# 通过清华源,安装其他包
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
tiny-cuda-nn のインストールは特殊です。vs2019 または vs2022 をインストールする必要があります。注意: 手順を実行するには、「x64 Native Tools Command Prompt for VS 2019」を管理者モードで開く必要があります。x86 と混同しないでください。エラーは報告されます!
# 个人将tiny-cuda-nn下载在xxxxx/instant-nsr-pl的目录下
cd instant-nsr-pl
git clone --recursive https://github.com/nvlabs/tiny-cuda-nn
cd tiny-cuda-nn/bindings/torch
# 同样需要激活环境
activate instant-nsr-pl
# 安装
python setup.py install
git のダウンロードが常に失敗する場合は、[ tiny-cuda-nn 詳細チュートリアル] の方法を試して tiny-cuda-nn を正常にインストールできます。
tiny-cuda-nn をインストールする場合、対応する cuda は、仮想環境の cuda バージョンではなく、物理マシンに実際にインストールされている cuda バージョン (環境変数に設定された cuda) であることに注意してください。したがって、cuda の物理バージョンと仮想バージョンが一致しないと仮定すると、tiny-cuda-nn が正常にインストールされたとしても、その後トレーニング命令を実行するとエラーが報告されます。
# 查看所有安装的包
pip list
conda list
すべてのパッケージの最終インストール。
torch のバージョンを確認し、torch-gpu のバージョンがインストールされていることを確認します。
# 查看pytorch版本
import torch
print(torch.__version__)
# 查看cuda版本
print(torch.version.cuda)
# 查看cuda是否可用
print(torch.cuda.is_available())
# 查看可用cuda数量
print(torch.cuda.device_count())
トレインインスタント NSR-PL
1. データセットをダウンロードします: [ Google Cloud Disk (ダウンロード アドレス) ] 構成ファイル内のデータに指定されたストレージ パスに従って、Instant-NeuS プロジェクトにロード/フォルダーを作成し、ダウンロードしたオープン ソース データを次の形式に解凍します。ロード/フォルダー。
2. NeRF のトレーニング:
# 训练bmvs_clock数据集
python launch.py --config configs/nerf-blender.yaml --gpu 0 --train dataset.scene=lego tag=lego
トレーニング後の結果は、exp ディレクトリ内の対応するデータ フォルダーに保存されます。
ブロガーは、簡単に表示できるようにビデオを GIF に変換しました。
Meshlab を使用してモデルを表示します。
nerf-blender.yaml を開き、model->mlp_network_config->otype の下の FullyFusedMLP を VanillaMLP に変更して、プライ モデルを作成します。それ以外の場合、プライ ファイルは空の 0 ビット ファイルになります。
3. NeuS のトレーニング:
# 带有mask
python launch.py --config configs/neus-blender.yaml --gpu 0 --train dataset.scene=lego tag=lego
# 没有mask
python launch.py --config configs/neus-blender.yaml --gpu 0 --train dataset.scene=lego tag=lego system.loss.lambda_mask=0.0
マスク
パースペクティブを使用した表示 (GIF ファイルも非常に大きく、ブログ ファイルで指定されたサイズを超えています):
メッシュラボを使用してモデルを表示:
マスクなし(感覚は同じ)
パース表示:
メッシュラボを使用してモデルを表示:
発生する可能性のある問題
-
「ImportError: 'torchmetrics.utilities.imports' から名前 '_compare_version' をインポートできません」。torchmetrics パッケージをダウングレードする必要があります。
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple torchmetrics==0.11.1
-
「提供された lr スケジューラは
MultiStepLR
PyTorch の LRScheduler API に従っていません。LightningModule.lr_scheduler_step
カスタム LR スケジューラを使用している場合は、独自のロジックでフックをオーバーライドする必要があります。」、これは torch 2.0 で発生するエラーです。(依存関係パッケージのソース コードを変更してください) ) instant-neus\Lib\site-packages\pytorch_lightning\utilities\types.py コンテンツ:
LRSchedulerTypeTuple = (torch.optim.lr_scheduler._LRScheduler, torch.optim.lr_scheduler.ReduceLROnPlateau) 修改为 LRSchedulerTypeTuple = (torch.optim.lr_scheduler.LRScheduler, torch.optim.lr_scheduler.ReduceLROnPlateau)
-
"subprocess.CalledProcessError: Command '['where', 'cl']' returns non-zero exit status 1. "、cl.exe 環境変数を設定します。
独自のインストール パスに従って環境を構成します。# 在环境变量中Path添加路径(博主的): C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\bin\Hostx64\x64; C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\IDE # 在环境变量中新建INCLUDE变量,再添加(英文分号隔开): C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\IDE; C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\ucrt; C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\um; C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\shared # 在环境变量中新建LIB变量,再添加(英文分号隔开): C:\Windows Kits\10\Include\10.0.19041.0\shared C:\Program Files (x86)\Windows Kits\10\Lib\10.0.19041.0\ucrt\x64; C:\Program Files (x86)\Windows Kits\10\Lib\10.0.22000.0\um\x64
cl on cmd と入力して、構成が成功したかどうかを確認します。
-
最初のプロンプトは「subprocess.CalledProcessError: Command '['ninja', '-v']' returns non-zero exit status 1.」で、その後に「ninja: build stop: subcommand failed.」が続き、仮想メモリを増やします。 :
システム設定で仮想メモリ サイズを変更し、ホストを再起動して有効にします。
-
前のプロンプトは「OSError: [WinError 1455] ページ ファイルが小さすぎるため操作を完了できません。」同様に、仮想メモリを増やすか、以前に追加した仮想メモリでは不十分です。
-
「include/tiny-cuda-nn/cutlass_matmul.h:332 status failed with error Error Internal」。ブロガーの状況はホストごとに異なるため、構成 yaml ファイル内の FullyFusedMLP のすべて (または一部) を VanillaMLP に置き換えるだけです。 、 奇妙な。
要約する
instant-nsr-pl のインストール プロセスをできるだけ簡単かつ詳細に紹介し、インストール プロセス中に発生する可能性のある問題を解決します。後で、私が学んだ知識と個人的な理解に基づいて、Instant-nsr-pl の原理とコードを説明します。