Ubuntu20.04系统Mip-NeRF代码复现(pytorch)

2023-10-11 23:59

本文主要是介绍Ubuntu20.04系统Mip-NeRF代码复现(pytorch),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

仅仅复现出Mip-NeRF论文所提出的实验,不包含原理的介绍。

代码链接:

hjxwhy/mipnerf_pl(仅仅进行了训练,并没有渲染出视频,训练得到的质量不错,PSNR几乎都在35左右)

bebeal/mipnerf-pytorch(训练、渲染视频、导出mesh,比较顺利)本篇文章复现的是这个项目

给出一些关于Mip-NeRF原理讲解的博客:

mip-NeRF

Mip-NeRF论文笔记

Mip-NeRF阅读笔记


目录

 

一、系统环境安装

二、数据集的获取

三、训练

 四、渲染视频

错误一:

错误二:

五、导出mesh

报错:

解决方法:

 补充:


一、系统环境安装

操作系统:Ubuntu 20.04

显卡:RTX3090

使用miniconda搭建环境

注:本次复现的代码和配置环境的代码不一样,主要是我第一次在github上复现的那篇渲染不出视频,我也不晓得出现了啥子问题,有可能我没有训练完,训练了八个轮次就终止了(我看一篇综述论文上说mip-nerf训练只需要三个小时,我训练了十多个小时,感觉时间太长了),于是我另外找一个mip-nerf pytorch版的代码进行复现。

环境配置请参考:hjxwhy/mipnerf_p

​
# Clone the repo
git clone https://github.com/hjxwhy/mipnerf_pl.git; cd mipnerf_pl
# Create a conda environment
conda create --name mipnerf python=3.9.12; conda activate mipnerf
# Prepare pip
conda install pip; pip install --upgrade pip
# Install PyTorch
pip3 install torch torchvision --extra-index-url https://download.pytorch.org/whl/cu113
# Install requirements
pip install -r requirements.txt
​

 

二、数据集的获取

我采用的是nerf_synthetic数据集,在网上下载就可

下载链接:nerf_data(里面有很多其他的关于nerf的数据集,都可以使用建议下载到u盘备份)

如果网速卡,下载很慢的话可以评论区留言,我把数据集的百度网盘链接发给你。

下载万数据集后建议和代码放在一个文件夹中,并命名为data方便管理和输入数据地址。

 

三、训练

配置好上述环境和数据集后就可以进行训练了,在终端输入:

python train.py 

就开始进行长达十八个小时的训练了,这训t练时间和我看的论文描述的不一样啊,但是质量还是不错的,psnr也比较高,期间可以打开tensorboard进行观察变化,能看到损失和psnr的变化。

python -m tensorboard.main --logdir=log  #在终端输入,即可打开tensorboard

 

 四、渲染视频

渲染视频运用到visualize.py这个文件,只需要在终端中输入即可

python visualize.py  #以从经过训练的模型中渲染视频

但是我在渲染出视频的时候出现了几个错误

错误一:

TypeError: _open() got an unexpected keyword argument 'codecs'

解决方案:打开visualize.py文件,直接进行修改。只需要将代码中的codecs参数替换为codec,如下所示:

​imageio.mimwrite(path.join(config.log_dir, "video.mp4"), rgb_frames, fps=30, quality=10, codec="hvec")
if config.visualize_depth:imageio.mimwrite(path.join(config.log_dir, "depth.mp4"), depth_frames, fps=30, quality=10, codec="hvec")
if config.visualize_normals:imageio.mimwrite(path.join(config.log_dir, "normals.mp4"), normal_frames, fps=30, quality=10, codec="hvec")​

这个代码段中的imageio.mimwrite()函数被用来写入视频文件。错误消息中提到了一个不期望的关键字参数codecs,这是因为在最新版本的imageio库中,mimwrite()函数已经将codec参数更改为codec,因此使用旧的codecs参数会导致错误。

错误二:

Unknown encoder 'hvec'
Traceback (most recent call last):
File "/home/wxy/miniconda3/envs/mipnerf/lib/python3.9/site-packages/imageio_ffmpeg/_io.py", line 493, in write_frames
p.stdin.write(bb)
BrokenPipeError: [Errno 32] Broken pipeDuring handling of the above exception, another exception occurred:

这个错误消息表示在使用imageio.mimwrite()函数时,尝试使用未知的编码器hvec,因此无法写入视频文件。此外,还发生了BrokenPipeError异常,这可能是由于进程在写入数据时被意外中断或终止导致的。

为了解决这个问题,可以尝试使用另一个编码器,或者安装支持hvec编码器的库/插件。hvec编码器通常需要特殊的硬件支持,因此可能需要检查你的计算机是否支持该编码器。

另外,也可以尝试减少视频的质量和帧率,以减轻编码器的负担,从而避免BrokenPipeError异常的发生。例如,可以将代码中的quality参数设置为更低的值,如52

解决方案:

imageio.mimwrite(path.join(config.log_dir, "video.mp4"), rgb_frames, fps=30, quality=5, codec="h264")
if config.visualize_depth:imageio.mimwrite(path.join(config.log_dir, "depth.mp4"), depth_frames, fps=30, quality=5, codec="h264")
if config.visualize_normals:imageio.mimwrite(path.join(config.log_dir, "normals.mp4"), normal_frames, fps=30, quality=5, codec="h264")

我是将"hvec"修改成"h264"并且quality由10降到5,最后渲染出来的视频效果不好。

video

 

五、导出mesh

导出mesh需要用到extract_mesh.py这个文件

python extract_mesh.py   #render a mesh from the trained model

报错:

缺少mcubes这个包,如果直接使用 pip install mcubes来安装这个包会出现以下错误

ERROR: Could not find a version that satisfies the requirement mcubes (from versions: none)
ERROR: No matching distribution found for mcubes

解决方法:

pip install pymcubes
#有可能还会缺少一些包,直接安装就好
pip install PlyData

接下来就可以提取mesh了,大概十分钟后就结束,会生成一个mesh.ply文件,之后直接导入到meshlab中就可以打开mesh

可以看出这个mesh效果还是非常不错的,mip-nerf是继基线nerf后提出比较有意义的一次创新,使用锥跟踪代替标准NERF体绘制的光线跟踪。通过引入集成位置编码实现了这一点。 为了生成一个单独的像素,从摄像机的中心沿观察方向投射一个圆锥,穿过像素的中心。

 =========================================================================

 补充:

关于hjxwhy / mipnerf_pl 

 我又尝试了一下,在训练的时候打开tensorboard观察,可以看到图像和深度图,效果还是不错的,我也只训练了五个轮次,在训练的时候可以打开tensorboard模型的查看。

这篇关于Ubuntu20.04系统Mip-NeRF代码复现(pytorch)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:https://blog.csdn.net/weixin_59961223/article/details/130507215
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/191771

相关文章

Pytorch介绍与安装过程

《Pytorch介绍与安装过程》PyTorch因其直观的设计、卓越的灵活性以及强大的动态计算图功能,迅速在学术界和工业界获得了广泛认可,成为当前深度学习研究和开发的主流工具之一,本文给大家介绍Pyto... 目录1、Pytorch介绍1.1、核心理念1.2、核心组件与功能1.3、适用场景与优势总结1.4、优

conda安装GPU版pytorch默认却是cpu版本

《conda安装GPU版pytorch默认却是cpu版本》本文主要介绍了遇到Conda安装PyTorchGPU版本却默认安装CPU的问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的... 目录一、问题描述二、网上解决方案罗列【此节为反面方案罗列!!!】三、发现的根本原因[独家]3.1 p

Windows 系统下 Nginx 的配置步骤详解

《Windows系统下Nginx的配置步骤详解》Nginx是一款功能强大的软件,在互联网领域有广泛应用,简单来说,它就像一个聪明的交通指挥员,能让网站运行得更高效、更稳定,:本文主要介绍W... 目录一、为什么要用 Nginx二、Windows 系统下 Nginx 的配置步骤1. 下载 Nginx2. 解压

如何确定哪些软件是Mac系统自带的? Mac系统内置应用查看技巧

《如何确定哪些软件是Mac系统自带的?Mac系统内置应用查看技巧》如何确定哪些软件是Mac系统自带的?mac系统中有很多自带的应用,想要看看哪些是系统自带,该怎么查看呢?下面我们就来看看Mac系统内... 在MAC电脑上,可以使用以下方法来确定哪些软件是系统自带的:1.应用程序文件夹打开应用程序文件夹

windows系统上如何进行maven安装和配置方式

《windows系统上如何进行maven安装和配置方式》:本文主要介绍windows系统上如何进行maven安装和配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录1. Maven 简介2. maven的下载与安装2.1 下载 Maven2.2 Maven安装2.

IIS 7.0 及更高版本中的 FTP 状态代码

《IIS7.0及更高版本中的FTP状态代码》本文介绍IIS7.0中的FTP状态代码,方便大家在使用iis中发现ftp的问题... 简介尝试使用 FTP 访问运行 Internet Information Services (IIS) 7.0 或更高版本的服务器上的内容时,IIS 将返回指示响应状态的数字代

使用Python实现Windows系统垃圾清理

《使用Python实现Windows系统垃圾清理》Windows自带的磁盘清理工具功能有限,无法深度清理各类垃圾文件,所以本文为大家介绍了如何使用Python+PyQt5开发一个Windows系统垃圾... 目录一、开发背景与工具概述1.1 为什么需要专业清理工具1.2 工具设计理念二、工具核心功能解析2.

MySQL 添加索引5种方式示例详解(实用sql代码)

《MySQL添加索引5种方式示例详解(实用sql代码)》在MySQL数据库中添加索引可以帮助提高查询性能,尤其是在数据量大的表中,下面给大家分享MySQL添加索引5种方式示例详解(实用sql代码),... 在mysql数据库中添加索引可以帮助提高查询性能,尤其是在数据量大的表中。索引可以在创建表时定义,也可

Linux系统之stress-ng测压工具的使用

《Linux系统之stress-ng测压工具的使用》:本文主要介绍Linux系统之stress-ng测压工具的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、理论1.stress工具简介与安装2.语法及参数3.具体安装二、实验1.运行8 cpu, 4 fo

使用C#删除Excel表格中的重复行数据的代码详解

《使用C#删除Excel表格中的重复行数据的代码详解》重复行是指在Excel表格中完全相同的多行数据,删除这些重复行至关重要,因为它们不仅会干扰数据分析,还可能导致错误的决策和结论,所以本文给大家介绍... 目录简介使用工具C# 删除Excel工作表中的重复行语法工作原理实现代码C# 删除指定Excel单元