本机环境: python 3.6.3,torch 1.8.1+cu102,pytorch-lightning 1.1.5
一 代码复现
第一步:搭建环境
conda create -n HaNeRF python=3.6
conda activate HaNeRF
pip install -r requirements.txt
第二步:准备数据集
Ha_NeRF所用数据集与NeRF_W 所用数据集一致。
可从以下链接下载原始scenen 数据集IMC-PT 2020 dataset | Kwang Moo Yi @ UBCKwang Moo Yi @ UBC: Image Matching Challenge PhotoTourism (IMC-PT) 2020 dataset project pagehttps://www.cs.ubc.ca/~kmyi/imw2020/data.html
如下:
并从以下链接下载用于训练测试的文件名的tsv文件。NeRF in the Wildhttps://nerf-w.github.io/
文件下载后存放在,data文件夹下的ICM-PT中,如下。
接着运行如下代码,生成文件存放在cache中,后续训练使用。
python prepare_phototourism.py --root_dir D:\NeRF\nerf_pl-nerfw\data\IMC-PT\brandenburg_gate\ --img_downscale 2
可能会出现error如下:
OMP: Error #15: Initializing libiomp5md.dll, but found libiomp5md.dll already initialized.
解决方案:
程序前添加以下两个语句解决:
import os
os.environ["KMP_DUPLICATE_LIB_OK"]="TRUE"
第三步: 训练网络
python train_mask_grid_sample.py --root_dir ./data/IMC-PT/brandenburg_gate --dataset_name phototourism --save_dir save --img_downscale 2 --use_cache --N_importanc
e 64 --N_samples 64 --num_epochs 20 --batch_size 1024 --optimizer adam --lr 5e-4 --lr_scheduler cosine --exp_name exp_HaNeRF_Brandenburg_Gate --N_emb_xyz 15 --N_vocab 1500 --use_mask --maskrs_max 5e-2 --maskrs_min 6e-3 --maskrs_
k 1e-3 --maskrd 0 --encode_a --N_a 48 --weightKL 1e-5 --encode_random --weightRecA 1e-3 --weightMS 1e-6 --num_gpus 1
第四步:测试+渲染图片
python eval.py --root_dir ./data/IMC-PT/brandenburg_gate/ --save_dir save --dataset_name phototourism --scene_name HaNeRF_Trevi_Fountain --split test_test --img_downscale 2 --N_samples 256 --N_importance 256 --N_emb_xyz 15 --N_vocab 1500 --encode_a --ckpt_path save/ckpts/HaNeRF_Brandenburg_Gate/epoch=19.ckpt --chunk 16384 --img_wh 320 240
该步骤可创建文件夹 {save_dir}/results/{dataset_name}/{scene_name},保存渲染的图片。
第五步: 指标测试
python eval_metric.py --root_dir ./data/IMC-PT/brandenburg_gate/ --save_dir save --dataset_name phototourism --scene_name HaNeRF_Brandenburg_Gate --split test_test --img_downscale 2 --img_wh 320 240
eval_metric.py是基于eval.py 渲染出的图片来计算相关指标。该步将创建{save_dir}/results/{dataset_name}/{scene_name}
文件夹,并存放指标度量结果。
第六步:生成重建视频
使用hallucinate.py来play Ha-NeRF,在不同的视图中从不同的场景{example_image}中进行重构!它将创建文件夹{save_dir}/hallucination/{scene_name}并渲染幻觉,最后创建一个gif。
python hallucinate.py --save_dir save --ckpt_path save/ckpts/HaNeRF_Trevi_Fountain/epoch=19.ckpt --chunk 16384 --example_image artworks --scene_name artworks_2_fountain