[Reconstrução 3D] [Aprendizado profundo] Implementação Pytorch do código NeRF no Windows10
Dicas: Recentemente, comecei a realizar pesquisas sobre [reconstrução 3D], registrar os pontos de conhecimento relevantes e compartilhar as soluções para os problemas encontrados no estudo.
Diretório de artigos
prefácio
O NeRF é proposto por Mildenhall, Beni et al. da University of California, Berkeley no artigo "NeRF: Representing Scenes as
Neural Radiance Fields for View Synthesis [ECCV 2020]" [Endereço do artigo] Um campo de radiação neural 5D é proposto como um cena complexa A representação implícita de , cuja entrada são imagens multiangulares esparsas com poses, é treinada para obter um modelo de campo de radiação neural. Simplificando, inserindo imagens bidimensionais e poses de câmera sob diferentes perspectivas da mesma cena, a modelagem implícita tridimensional da cena é realizada e a imagem da cena sob qualquer nova perspectiva é sintetizada por meio da equação de renderização de voxel .
Antes de analisar a rede NeRF em detalhes, a primeira tarefa é construir o ambiente operacional exigido pelo NeRF [Pytorch-demo address] e concluir o treinamento e teste do modelo, e é significativo iniciar o trabalho de acompanhamento.
execução do modelo NeRF
Baixe o código-fonte e instale o ambiente
Instale o ambiente anaconda no ambiente win10 para facilitar a construção de um ambiente virtual dedicado ao modelo NeRF.
[tutorial de referência recomendado pelo código pytorch]
Instale a versão GPU do tutorial pytorch , a versão pytorch-gpu precisa instalar a versão correspondente de acordo com o computador pessoal.
# 创建虚拟环境
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
Instalação final de todos os pacotes.
Verifique a versão da tocha, a versão da tocha-gpu foi instalada
# 查看pytorch版本
import torch
print(torch.__version__)
# 查看cuda版本
print(torch.version.cuda)
# 查看cuda是否可用
print(torch.cuda.is_available())
# 查看可用cuda数量
print(torch.cuda.device_count())
Treinar NeRF
Baixando o conjunto de dados: Ainda é um pouco problemático no sistema win10, você precisa garantir que o host tenha instalado o seguinte ambiente! ! ! Porque você precisa executar o comando bash em win10,
win10 configura wget
win10 configura 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 ..
rede de treinamento
# 开始训练网络(lego数据集)
python run_nerf.py --config configs/lego.txt
conjunto de dados pessoais de treinamento
Para o processo de produção do conjunto de dados pessoais, você pode consultar outra postagem de blog do blogueiro [ Criar seu próprio conjunto de dados NeRF (formato LLFF) baseado em COLMAP ].
Visualize seus próprios conjuntos de dados de imagem e arquivos de pose no diretório /nerf-pytorch/data/nerf_llff_data/;
visualize os arquivos de configuração correspondentes no diretório /nerf-pytorch/configs/.
executar código nerf
# test_frame.txt:对应的数据集的配置文件
python run_nerf.py --config configs/test_frame.txt
comece a treinar
Possíveis problemas no Windows:
- subprocess.CalledProcessError: Comando 'cp ./data/nerf_llff_data/scene\images/* ./data/nerf_llff_data/XXXX\images_8' retornou status de saída diferente de zero 1.
- TypeError: não é possível descompactar o objeto NoneType não iterável
Causa: O arquivo de configuração XXX.Xtxt sob o arquivo config/ define fator=8, o que significa redução de resolução de 8 vezes por padrão, e as imagens reduzidas serão salvas na pasta image_8. Depois que esse processo for concluído, o nerf será iniciado a partir de image_8 Read imagens e usá-las para treinamento. O problema surge no processo de downsampling. Devido a problemas de compatibilidade do sistema, o sistema Windows não pode executar algumas instruções do sistema na função _minify, resultando no primeiro erro, e uma pasta vazia image_8 é gerada durante o processo. Se o código Execute novamente sem modificação. Depois de julgar que a pasta image_8 existe, pule o processo de downsampling e prossiga diretamente para o treinamento subsequente. Portanto, o segundo erro ocorre quando os dados são lidos na pasta image_8 vazia.
No arquivo nerf-pytorch/load_llff.py:
altere comentários: escreva um código de redução de resolução e salve-o em 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")
Resumir
Da forma mais simples possível, apresenta detalhadamente o processo de instalação do NeRF e resolve os problemas que possam existir durante o processo de instalação. A seguir, explicarei os princípios e códigos do NeRF com base no conhecimento que adquiri e no meu entendimento pessoal.