Mega-NeRF代码复现全过程

Mega-NeRF相比于传统的NeRF算法,在现有数据集(Quad 6k 和 UrbanScene3D)以及的无人机镜头拍摄的大场景数据集上,将训练速度提高了 3 倍,PSNR 提高了 12%。我们还在 Mega-NeRF 之上评估了最新的 NeRF 快速渲染器,并引入了一种利用时间相干性的新方法。比传统 NeRF 渲染速度提高了 40 倍,同时 PSNR 质量保持在 0.8 db 以内,超出了现有快速渲染器的保真度。本篇博客主要描述了Mega-NeRF算法的复现过程,仅供大家参考和学习。

以下是Mega-NeRF算法的论文以及官方源代码

Mega-NeRF:Scalable Construction of Large-Scale NeRFs for Virtual Fly-Throughs
主页:https://meganerf.cmusatyalab.org/
论文:https://meganerf.cmusatyalab.org/resources/paper.pdf
代码:https://github.com/cmusatyalab/mega-nerf

1. 安装anaconda、cuda、以及cuda版本的切换

https://blog.youkuaiyun.com/m0_38068876/article/details/128364154?spm=1001.2014.3001.5506由于本人下载的是最新版本的Anaconda安装包,对应的Python版本为Python3.9,因此在这里讲一下如何创建其他版本的Python环境。查阅下表,根据Anaconda安装包名称和Python版本的映射关系,查找你想要的指定版本的安装包。,说明现在最新的版本是Python3.9,图形化的安装包有688MB,是64位的架构。,意思是说把你刚才的配置写入到pip的配置文件里了,如下图所示。下方显示的是清华镜像源的地址,说明配置成功(如下图所示)。,下载自己电脑系统的安装包即可,如下图所示。_anaconda老版本下载https://blog.youkuaiyun.com/m0_38068876/article/details/128364154?spm=1001.2014.3001.5506Linux安装CUDA-优快云博客Ubuntu20.04系统安装CUDA 前言一、CUDA 是什么二、步骤1.先查看有没有安装CUDA 在终端输入命令2.若没有,查看有没有安装显卡驱动3.查看Driver对应的CUDA version4.[到cuda-toolki-archive](https://developer.nvidia.com/cuda-toolkit-archive),下载对应的cuda5.修改环境变量总结前言笔者最近在做深度学习和感知方面的一个学习,需要用到CUDA 来加速,所以安装了CUDA ,在这里总结了一下。_linux安装cudahttps://blog.youkuaiyun.com/weixin_45811857/article/details/124457280?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522169612658016800180637609%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=169612658016800180637609&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-124457280-null-null.142%5Ev94%5Einsert_down28v1&utm_term=Linux%E5%AE%89%E8%A3%85cuda&spm=1018.2226.3001.4187CUDA在ubuntu多版本切换共存_cuda多版本共存-优快云博客一、参考资料CUDA Toolkit 官方文档ubuntu安装多个版本的CUDA并随时切换Ubuntu多版本CUDA,GCC切换CUDA多版本共存和实时切换二、系统环境系统:Ubuntu16.04显卡:GeForce GTX1650,4GB三、查看CUDA版本# 方法一nvcc -V# 方法二cat /usr/local/cuda/version.txt四、查看cuDNN版本[Ubuntu 18.4 查看CUDNN版本](https://blog.youkuaiyun.com/eaxy_cuda多版本共存https://blog.youkuaiyun.com/m0_37605642/article/details/120098215?spm=1001.2014.3001.5506

2. 下载源代码

git clone https://github.com/cmusatyalab/mega-nerf.git

 3. 使用anaconda创建虚拟环境

conda env create -f environment.yml
conda activate mega-nerf

 4. 数据集下载(以Quad为例)

①下载原始照片集

http://vision.soic.indiana.edu/disco_files/ArtsQuad_dataset.tar

②下载相机位姿

https://storage.cmusatyalab.org/mega-nerf-data/quad-pixsfm.tgz

③执行以下命令
python scripts/copy_images.py 
--image_path $RAW_PHOTO_PATH 
--dataset_path $CAMERA_POSE_PATH

5. 训练(以下所有命令的参数便于观看均进行了换行,训练时不需要换行)

①为每个子模块生成训练分区
python scripts/create_cluster_masks.py 
--config configs/mega-nerf/${DATASET_NAME}.yml 
--dataset_path $DATASET_PATH  
--output $MASK_PATH 
--grid_dim $GRID_X $GRID_Y

其中config是对应数据集的yml配置文件,dataset_path是相机位姿文件(quad-pixsfm)的路径,output是输出路径,grid_dim是分区比例例如(x=3,y=4)共分区12个子模块。

②训练每个子模块
python mega_nerf/train.py 
--config_file configs/mega-nerf/${DATASET_NAME}.yml 
--exp_name $EXP_PATH 
--dataset_path $DATASET_PATH 
--chunk_paths $SCRATCH_PATH 
--cluster_mask_path ${MASK_PATH}/${SUBMODULE_INDEX}

其中config_file是对应数据集的yml配置文件,exe_name是每个子模块训练后的输出路径,dataset_path是相机位姿文件(quad-pixsfm)的路径,chunk_paths是训练过程日志的输出路径,cluster_mask_path是分区后对应的子模块路径。

若有多个GPU,可以同时训练多个子模块

CONFIG_FILE=configs/mega-nerf/${DATASET_NAME}.yaml EXP_PREFIX=$EXP_PATH DATASET_PATH=$DATASET_PATH CHUNK_PREFIX=$SCRATCH_PATH MASK_PATH=$MASK_PATH python -m parscript.dispatcher parscripts/run_8.txt -g $NUM_GPUS
 ③将训练后的子模块合并到一个统一的Mega-NeRF模型中
python scripts/merge_submodules.py 
--config_file configs/mega-nerf/${DATASET_NAME}.yaml  
--ckpt_prefix ${EXP_PREFIX}- 
--centroid_path ${MASK_PATH}/params.pt 
--output $MERGED_OUTPUT

 其中config_file是对应数据集的yml配置文件,ckpt_prefix是训练每个子模块得到的quad文件,centroid_path是分区是得到的params.pt文件,output是合并后的模型文件。

6. 评估

①单GPU评估

python mega_nerf/eval.py 
--config_file configs/nerf/${DATASET_NAME}.yaml 
--exp_name $EXP_NAME 
--dataset_path $DATASET_PATH 
--container_path $MERGED_OUTPUT

 其中config_file是对应数据集的yml配置文件,exp_name是训练每个子模块得到的quad文件,dataset_path是相机位姿文件(quad-pixsfm)的路径,container_path是合并每个子模型后的统一模型。

②多GPU评估

python -m torch.distributed.run 
--standalone 
--nnodes=1 
--nproc_per_node $NUM_GPUS mega_nerf/eval.py 
--config_file configs/nerf/${DATASET_NAME}.yaml  
--exp_name $EXP_NAME 
--dataset_path $DATASET_PATH 
--container_path $MERGED_OUTPUT

③评估后的结果(我用的显卡是A5000 24G显存)

我训练出来的效果要比原论文要差一些,目前不知道什么原因,有可能是显卡算力太低。

PSNR:峰值信噪比, PSNR的值越高,表示图像的质量与原始图像的相似度越高。常见的PSNR范围通常在20到50之间。

SSIM:SSIM的值范围在0到1之间,数值越接近1表示重建图像与原始图像的相似度越高,图像质量越好。

LPIPS:LPIPS的值范围通常是0到1之间,数值越小表示图像的感知质量越高。与传统的图像质量评估指标(如PSNR和SSIM)相比,LPIPS更加注重于人眼感知的因素,能够更好地捕捉到图像之间的感知差异。

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值