nope-nerf代码复现

2024-03-24 23:50
文章标签 代码 复现 nerf nope

本文主要是介绍nope-nerf代码复现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

代码地址

GitHub - ActiveVisionLab/nope-nerf: (CVPR 2023) NoPe-NeRF: Optimising Neural Radiance Field with No Pose Prior

进行环境配置(时间有点久,耐心等待)

git clone https://github.com/ActiveVisionLab/nope-nerf.git
cd nope-nerf
conda env create -f environment.yaml
conda activate nope-nerf

建议先更新一下conda

conda update -n base -c defaults conda

数据预处理

支持三种数据集

1.Tanks数据集

每个场景都包含图像、DPT 和 COLMAP 姿势的单眼深度估计。点击链接会下载压缩包,然后在nope-nerf项目新建data文件夹,把压缩包解压到里面。

2.NeRF LLFF 数据集

提供 NeRF LLFF 数据集的配置文件。可以点击链接下载数据集并将其解压缩到data目录中。

3.自定义数据集

想使用自己的图像序列和自定义相机内部函数,则需要将intrinsics.npz文件添加到场景目录中。配置文件的一个示例是configs/Test/images.yaml(将自己的数据添加到data/Test/images目录中)。

单目图像的深度图生成:

单目深度图生成:可以先从Vision Transformers for Dense Prediction提供的这个链接下载预训练的DPT模型到DPT目录。点击this link 跳转到链接下载。

生成深度图需要修改configs/preprocess.yaml文件里面的'path'和,‘scene',

然后运行指令:

python preprocess/dpt_depth.py configs/preprocess.yaml

报错:

VIDIA GeForce RTX 3090 with CUDA capability sm_86 is not compatible with the current PyTorch installation. The current PyTorch install supports CUDA capabilities sm_37 sm_50 sm_60 sm_61 sm_70 sm_75 compute_37. If you want to use the NVIDIA GeForce RTX 3090 GPU with PyTorch, please check the instructions at https://pytorch.org/get-started/locally/ warnings.warn(incompatible_device_warn.format(device_name, capability, " ".join(arch_list), device_name))

这属于幸福的烦恼:显卡算力太高而pytorch版本太低不支持

RTX 3090 使用的 CUDA 计算能力是 sm_86,而当前的 PyTorch 安装只支持 sm_37, sm_50, sm_60, sm_61, sm_70, sm_75, compute_37 这些计算能力。

解决这个问题的方法是升级 PyTorch 到一个支持 sm_86 计算能力的版本。

查看cuda版本和pytorch版本,cuda=11.3,pytorch=1.7

上pytorch官网查看(安装)最新版本的cuda以及对应的pytorch

直接pip安装:

pip install torch==1.10.0+cu111 torchvision==0.11.0+cu111 torchaudio==0.10.0 -f https://download.pytorch.org/whl/torch_stable.html

参考链接:幸福的烦恼:显卡算力太高而pytorch版本太低不支持

继续运行生成深度图指令,生成dpt文件夹里面有.npz的深度文件和深度图

可以看出生成深度图质量还不错:

 

训练

 从头开始训练新模型:

python train.py configs/Tanks/Francis.yaml

 可以在其中替换configs/Tanks/Francis.yaml其他配置文件。

报错:

Traceback (most recent call last): File "/media/root/f34190af-0449-4d32-87e3-0a55e032ed3b/LT/nope-nerf/train.py", line 12, in <module> from torch.utils.tensorboard import SummaryWriter File "/home/dy/anaconda3/envs/nope-nerf/lib/python3.9/site-packages/torch/utils/tensorboard/__init__.py", line 4, in <module> LooseVersion = distutils.version.LooseVersion AttributeError: module 'distutils' has no attribute 'version' 去报错目录打开__init__.py文件,注释以下代码:

 问题解决,开始训练

报错:CUDA out of memory.

RuntimeError: CUDA out of memory. Tried to allocate 2.91 GiB (GPU 0; 23.70 GiB total capacity; 1.45 GiB already allocated; 1.42 GiB free; 1.51 GiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation. See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF

自己去找一下多卡运行的代码修改一下train.py文件

 

 可以运行啦!

可以使用tensorboard在http://localhost:6006上监控训练过程:

进入out/Tanks/Francis/logs/目录,打开终端,进入虚拟环境,输入以下指令,打开生成的网址

tensorboard --logdir ./

可以进行可视化啦!

 

 评估

1.评估图像质量和深度:

python evaluation/eval.py configs/Tanks/Francis.yaml

评估深度:添加--depth. 请注意,需要自己添加地面真实深度图。

2.评估姿势:

python evaluation/eval_poses.py configs/Tanks/Francis.yaml

 要可视化估计和地面真实轨迹:添加--vis

可视化

1.新视图合成

python vis/render.py configs/Tanks/Francis.yaml

在out文件夹生成rendring的视角和深度图

img

depth

 2.位姿可视化(估计位姿)

python vis/vis_poses.py configs/Tanks/Francis.yaml

 

这篇关于nope-nerf代码复现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/843208

相关文章

Java集合之Iterator迭代器实现代码解析

《Java集合之Iterator迭代器实现代码解析》迭代器Iterator是Java集合框架中的一个核心接口,位于java.util包下,它定义了一种标准的元素访问机制,为各种集合类型提供了一种统一的... 目录一、什么是Iterator二、Iterator的核心方法三、基本使用示例四、Iterator的工

Java 线程池+分布式实现代码

《Java线程池+分布式实现代码》在Java开发中,池通过预先创建并管理一定数量的资源,避免频繁创建和销毁资源带来的性能开销,从而提高系统效率,:本文主要介绍Java线程池+分布式实现代码,需要... 目录1. 线程池1.1 自定义线程池实现1.1.1 线程池核心1.1.2 代码示例1.2 总结流程2. J

JS纯前端实现浏览器语音播报、朗读功能的完整代码

《JS纯前端实现浏览器语音播报、朗读功能的完整代码》在现代互联网的发展中,语音技术正逐渐成为改变用户体验的重要一环,下面:本文主要介绍JS纯前端实现浏览器语音播报、朗读功能的相关资料,文中通过代码... 目录一、朗读单条文本:① 语音自选参数,按钮控制语音:② 效果图:二、朗读多条文本:① 语音有默认值:②

Vue实现路由守卫的示例代码

《Vue实现路由守卫的示例代码》Vue路由守卫是控制页面导航的钩子函数,主要用于鉴权、数据预加载等场景,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录一、概念二、类型三、实战一、概念路由守卫(Navigation Guards)本质上就是 在路

uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)

《uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)》在uni-app开发中,文件上传和图片处理是很常见的需求,但也经常会遇到各种问题,下面:本文主要介绍uni-app小程序项目中实... 目录方式一:使用<canvas>实现图片压缩(推荐,兼容性好)示例代码(小程序平台):方式二:使用uni

JAVA实现Token自动续期机制的示例代码

《JAVA实现Token自动续期机制的示例代码》本文主要介绍了JAVA实现Token自动续期机制的示例代码,通过动态调整会话生命周期平衡安全性与用户体验,解决固定有效期Token带来的风险与不便,感兴... 目录1. 固定有效期Token的内在局限性2. 自动续期机制:兼顾安全与体验的解决方案3. 总结PS

C#中通过Response.Headers设置自定义参数的代码示例

《C#中通过Response.Headers设置自定义参数的代码示例》:本文主要介绍C#中通过Response.Headers设置自定义响应头的方法,涵盖基础添加、安全校验、生产实践及调试技巧,强... 目录一、基础设置方法1. 直接添加自定义头2. 批量设置模式二、高级配置技巧1. 安全校验机制2. 类型

Python屏幕抓取和录制的详细代码示例

《Python屏幕抓取和录制的详细代码示例》随着现代计算机性能的提高和网络速度的加快,越来越多的用户需要对他们的屏幕进行录制,:本文主要介绍Python屏幕抓取和录制的相关资料,需要的朋友可以参考... 目录一、常用 python 屏幕抓取库二、pyautogui 截屏示例三、mss 高性能截图四、Pill

使用MapStruct实现Java对象映射的示例代码

《使用MapStruct实现Java对象映射的示例代码》本文主要介绍了使用MapStruct实现Java对象映射的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、什么是 MapStruct?二、实战演练:三步集成 MapStruct第一步:添加 Mave

Java抽象类Abstract Class示例代码详解

《Java抽象类AbstractClass示例代码详解》Java中的抽象类(AbstractClass)是面向对象编程中的重要概念,它通过abstract关键字声明,用于定义一组相关类的公共行为和属... 目录一、抽象类的定义1. 语法格式2. 核心特征二、抽象类的核心用途1. 定义公共接口2. 提供默认实