[3D再構成] [ディープラーニング] Windows10でのNeRFコードのPytorch実装
ヒント: 最近、[3D 再構築] に関する研究を開始し、関連する知識ポイントを記録し、研究中に遭遇した問題の解決策を共有します。
記事ディレクトリ
序文
NeRF は、カリフォルニア大学バークレー校の Mildenhall、Beni らによって、論文「NeRF: Representing Scenes as
Neural Radiance Fields for View Synthesis [ECCV 2020]」で提案されています。 [論文アドレス] 5D 神経放射場は、複雑なシーン の暗黙的表現 (入力はポーズを含むまばらなマルチアングル イメージ) は、神経放射場モデルを取得するためにトレーニングされます。簡単に言うと、同じシーンの異なる視点からの 2 次元画像とカメラ ポーズを入力することによって、シーンの 3 次元暗黙的モデリングが実行され、ボクセル レンダリング方程式を通じて任意の新しい視点でのシーン画像が合成されます。 。
NeRF ネットワークを詳細に分析する前に、最初のタスクはNeRF [Pytorch-デモ アドレス]に必要な動作環境を構築し、モデルのトレーニングとテストを完了することであり、その後の作業を開始することが意味があります。
NeRF モデルの実行
ソースコードをダウンロードして環境をインストールする
win10環境にanaconda環境をインストールし、 NeRFモデル専用の仮想環境の構築を容易にします。
[pytorch コード推奨リファレンス チュートリアル]
GPU 版の pytorch チュートリアルをインストールします。pytorch-gpu 版はパソコンに応じて対応するバージョンをインストールする必要があります。
# 创建虚拟环境
conda create -n nerf_mvs python=3.7
# 查看新环境是否安装成功
conda env list
# 激活环境
conda activate nerf_mvs
# 下载githup源代码到合适文件夹,并cd到代码文件夹内(科学上网)
git clone https://github.com/yenchenlin/nerf-pytorch.git
cd nerf-pytorch
# 安装pytorch包
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu117
# 通过清华源,安装其他包(需要删除关于pytorch的部分)
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
# 查看所有安装的包
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())
NeRFを訓練する
データセットのダウンロード: win10 システムではまだ少し面倒です。ホストに次の環境がインストールされていることを確認する必要があります。!!win10ではbashコマンドを実行する必要があるため、
win10でwgetを設定
win10でgitbashを設定
# 进入nerf-pytorch目录下,需要用linux的目录格式
cd /E/deep-learning-for-image-processing-master/nerf-pytorch
bash download_example_data.sh
# download_example_data.sh内容
wget http://cseweb.ucsd.edu/~viscomp/projects/LF/papers/ECCV20/nerf/tiny_nerf_data.npz
mkdir -p data
cd data
wget http://cseweb.ucsd.edu/~viscomp/projects/LF/papers/ECCV20/nerf/nerf_example_data.zip
unzip nerf_example_data.zip
cd ..
トレーニングネットワーク
# 开始训练网络(lego数据集)
python run_nerf.py --config configs/lego.txt
トレーニング用個人データセット
個人データセットの作成プロセスについては、ブロガーによる別のブログ投稿「COLMAP に基づいて独自の NeRF (LLFF 形式) データセットを作成する」を参照してください。
/nerf-pytorch/data/nerf_llff_data/ ディレクトリにある独自の画像データセットとポーズ ファイルを表示し、
/nerf-pytorch/configs/ ディレクトリにある対応する設定ファイルを表示します。
ナーフコードを実行する
# test_frame.txt:对应的数据集的配置文件
python run_nerf.py --config configs/test_frame.txt
トレーニングを開始する
Windows で考えられる問題:
- subprocess.CalledProcessError: コマンド 'cp ./data/nerf_llff_data/scene\images/* ./data/nerf_llff_data/XXXX\images_8' がゼロ以外の終了ステータス 1 を返しました。
- TypeError: 反復不可能な NoneType オブジェクトを解凍できません
原因: config/ ファイルの下の構成ファイル XXX.Xtxt は、factor=8 を設定します。これは、デフォルトで 8 回のダウンサンプリングを意味し、ダウンサンプリングされた画像は image_8 フォルダーに保存されます。このプロセスが完了すると、nerf は image_8 から開始されます。画像を作成し、トレーニングに使用します。この問題はダウンサンプリングのプロセスで発生します。システムの互換性の問題により、Windows システムは _minify 関数の一部のシステム命令を実行できず、最初のエラーが発生し、プロセス中に空のフォルダー image_8 が生成されます。コードを再度実行すると、 image_8 フォルダが存在すると判断した後、ダウンサンプリング処理をスキップして次のトレーニングに直接進むため、空の image_8 フォルダにデータを読み込むと 2 番目のエラーが発生します。
nerf-pytorch/load_llff.py ファイル内:
コメントを変更:ダウンサンプリング コードを記述し、image_8 に保存します。
import cv2
import os
from PIL import Image
images_path = './data/nerf_llff_data/test_frame/images/' # 原图路径
output_dir = './data/nerf_llff_data/test_frame/images_8/' # resize后路径
factor = 8 # 降采样倍数
images_list = os.listdir(images_path)
img = Image.open(images_path + images_list[0])
(W,H) = (img.width,img.height) #[W,H]
print("image_size : ",(W ,H))
# 保存resize后的图片到新文件夹下
for image_name in images_list:
img = cv2.imread(images_path+image_name)
img_resize = cv2.resize(img, (int(W/factor), int(H/factor)))
cv2.imwrite(output_dir + image_name, img_resize)
print(image_name , " done")
print("all images done")
要約する
できるだけ簡単に、NeRF のインストール プロセスを詳細に紹介し、インストール プロセス中に発生する可能性のある問題を解決します。次回は、私が学んだ知識と個人的な理解に基づいて、NeRF の原則とコードを説明します。