【三维重建】【深度学习】windows10下instant-nsr-pl代码Pytorch实现

【三维重建】【深度学习】windows10下instant-nsr-pl代码Pytorch实现

提示:基于 Instant-NGP 和 Pytorch-Lightning 框架的神经表面重建


文章目录

  • 【三维重建】【深度学习】windows10下instant-nsr-pl代码Pytorch实现
  • 前言
  • instant-nsr-pl模型运行
    • 下载源码并安装环境
    • 训练instant-NeuS
    • 可能出现的问题
  • 总结


前言

NeRF是由加利福尼亚大学伯克利分校的Mildenhall, Beni等人在《NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis【ECCV 2020】》【论文地址】一文中提出了一种5D的神经辐射场来作为复杂场景的隐式表示,其输⼊稀疏的多⻆度带pose的图像训练得到⼀个神经辐射场模型。简单来说就是通过输入同一场景不同视角下的二维图片和相机位姿,对场景进行三维隐式建模,并通过体素渲染方程实现了合成任意新视角下的场景图片。

NeuS是由香港大学的Wang, P等人在《NeuS: Learning Neural Implicit Surfaces by Volume Rendering for Multi-view Reconstruction【NeurIPS 2021】》【论文地址】一文中提出了一种新的神经表面重建方法,用于从2D图像输入中高保真地重建对象和场景。简单来说,提出了一种新的一阶近似无偏差的公式,从而即使没有掩模监督,也能进行更精确的表面重建。

在详细解析instant-nsr-pl网络之前,首要任务是明白原始NeRF【Pytorch-demo】和NeuS【Pytorch-demo】的原理和代码解析,并完成模型训练和测试工作,展开后续工作才有意义。


instant-nsr-pl模型运行

下载源码并安装环境

在win10环境下装anaconda环境,方便搭建专用于instant-nsr-pl模型的虚拟环境。
【pytorch代码原始参考教程】
【pytorch代码推荐参考教程(Windows下)】

安装GPU版本的pytorch教程,pytorch-gpu版本需要根据个人计算机去安装相应版本。

# 创建虚拟环境
conda create -n instant-nsr-pl python=3.8
# 查看新环境是否安装成功
conda env list
# 激活环境
activate instant-nsr-pl
# windows一定要通过网站直接下载
# 下载githup源代码到合适文件夹,并cd到代码文件夹内(科学上网)
git clone https://github.com/bennyguo/instant-nsr-pl.git
# 具体看个人下载的位置xxxxx/instant-nsr-pl
cd instant-nsr-pl
# 安装pytorch包(pytorch建议小于2.0)
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
# 通过清华源,安装其他包
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt

安装tiny-cuda-nn比较特殊,需要安装vs2019或者vs2022,注意:需要管理员方式打开"x64 Native Tools Command Prompt for VS 2019"执行指令,不要搞混成x86的,会报奇怪的错误!

# 个人将tiny-cuda-nn下载在xxxxx/instant-nsr-pl的目录下
cd instant-nsr-pl
git clone --recursive https://github.com/nvlabs/tiny-cuda-nn
cd tiny-cuda-nn/bindings/torch
# 同样需要激活环境
activate instant-nsr-pl
# 安装
python setup.py install

git下载总失败的话,可以尝试【tiny-cuda-nn详细教程】方法,成功安装tiny-cuda-nn。

注意安装tiny-cuda-nn时候,对应的cuda是物理机器上实际安装的cuda版本(环境变量里配置的cuda),不是虚拟环境中的cuda版本。因此假设物理和虚拟的俩个版本cuda不一致,即使tiny-cuda-nn安装成功,在后续执行训练指令时候也会报错。

# 查看所有安装的包
pip list
conda list

最终的安装的所有包。

检查torch版,已经安装torch-gpu版本。

# 查看pytorch版本
import torch
print(torch.__version__)
# 查看cuda版本
print(torch.version.cuda)
# 查看cuda是否可用
print(torch.cuda.is_available())
# 查看可用cuda数量
print(torch.cuda.device_count())

训练instant-NeuS

1.下载数据集:【谷歌云盘(下载地址)】根据配置文件中数据指定的存放路径,在instant-NeuS工程内创建load/文件夹,把下载的开源数据解压放到load/文件夹下。

2.训练NeRF:

# 训练bmvs_clock数据集
python launch.py --config configs/nerf-blender.yaml --gpu 0 --train dataset.scene=lego tag=example

训练完成后的结果保存在exp目录中的对应数据文件夹下。

博主将视频转为了GIF方便展示:

没有生成obj文件(文件大小为0)。
3.训练NeuS:

# 训练bmvs_clock数据集
# 带有mask
python launch.py --config configs/neus-blender.yaml --gpu 0 --train dataset.scene=lego tag=example
# 没有mask
python launch.py --config configs/neus-blender.yaml --gpu 0 --train dataset.scene=lego tag=example system.loss.lambda_mask=0.0

带有mask
视角展示(GIF文件也很大,超过博客文件所规定的大小):

用meshlab查看模型:

没有mask(感觉都差不多)
视角展示:

用meshlab查看模型:

可能出现的问题

  • "ImportError: cannot import name ‘_compare_version’ from ‘torchmetrics.utilities.imports’ ",需要降级一下torchmetrics包:

    pip install -i https://pypi.tuna.tsinghua.edu.cn/simple torchmetrics==0.11.1
    
  • "The provided lr scheduler MultiStepLR doesn’t follow PyTorch’s LRScheduler API. You should override the LightningModule.lr_scheduler_step hook with your own logic if you are using a custom LR scheduler. " ,这是torch 2.0会出现的错误,修改(依赖包源码)instant-neus\Lib\site-packages\pytorch_lightning\utilities\types.py内容:
    在这里插入图片描述

    LRSchedulerTypeTuple = (torch.optim.lr_scheduler._LRScheduler, torch.optim.lr_scheduler.ReduceLROnPlateau)
    修改为
    LRSchedulerTypeTuple = (torch.optim.lr_scheduler.LRScheduler, torch.optim.lr_scheduler.ReduceLROnPlateau)
    
  • "subprocess.CalledProcessError: Command ‘[‘where’, ‘cl’]’ returned non-zero exit status 1. ",设置cl.exe环境变量:

    根据自己的安装路径配置环境:

    # 在环境变量中Path添加路径(博主的):
    C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\bin\Hostx64\x64;
    C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\IDE
    # 在环境变量中新建INCLUDE变量,再添加(英文分号隔开):
    C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\IDE;
    C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\ucrt;
    C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\um;
    C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\shared
    # 在环境变量中新建LIB变量,再添加(英文分号隔开):
    C:\Windows Kits\10\Include\10.0.19041.0\shared
    C:\Program Files (x86)\Windows Kits\10\Lib\10.0.19041.0\ucrt\x64;
    C:\Program Files (x86)\Windows Kits\10\Lib\10.0.22000.0\um\x64
    


    在cmd上输入cl验证是否配置成功:

  • 前面是提示:"subprocess.CalledProcessError: Command ‘[‘ninja’, ‘-v’]’ returned non-zero exit status 1. “,后面出现"ninja: build stopped: subcommand failed.”,增大虚拟内存:

    在系统设置中修改虚拟内存的大小,然后重启主机激活:

  • 前面是提示:“OSError: [WinError 1455] 页面文件太小,无法完成操作”,同样是增大虚拟内存,或者之前增加的虚拟内存不够:


总结

尽可能简单、详细的介绍instant-nsr-pl的安装流程以及解决了安装过程中可能存在的问题。后续会根据自己学到的知识结合个人理解讲解instant-NeuS的原理和代码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/28818.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

那些没人教你的Jmeter 循环断言,百度不到的,收藏一下吧

前言 对于使用jmeter工具完成接口测试的测试工程师而言。在工作中,或者在面试中,都会遇到一个问题。 CSV文档做了一大笔测试数据后,怎么去校验这个结果呢? 现在大部分测试工程师可能都是通过人工的方法去查看结果,十几…

[国产MCU]-BL602开发实例-ADC数据采样

ADC数据采样 文章目录 ADC数据采样1、ADC介绍2、ADC驱动API3、ADC使用示例模数转换器(analog-to-digital converter,通常称为ADC)是一种模拟与数字转换器,支持12路外部模拟输入和若干内部模拟信号选择。 BL602的ADC支持以下四种模式:单次单通道转换、连续单通道转换、单次…

java中javamail发送带附件的邮件实现方法

java中javamail发送带附件的邮件实现方法 本文实例讲述了java中javamail发送带附件的邮件实现方法。分享给大家供大家参考。具体分析如下: JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口。它是Sun发布的用来处理email的API。它…

网络安全 Day27-运维安全项目-堡垒机部署

运维安全项目-堡垒机部署 1. 运维安全项目-架构概述2. 运维安全项目之堡垒机2.1 堡垒机概述2.2 堡垒机选型2.3 环境准备2.4 部署Teleport堡垒机2.4.1 下载与部署2.4.2 启动2.4.3 浏览器访问teleport2.4.4 进行配置2.4.5 安装teleport客户端 2.5 teleport连接服务器 1. 运维安全…

Elasticsearch官方测试数据导入

一、数据准备 百度网盘链接 链接:https://pan.baidu.com/s/1rPZBvH-J0367yQDg9qHiwQ?pwd7n5n 提取码:7n5n文档格式 {"index":{"_id":"1"}} {"account_number":1,"balance":39225,"firstnam…

【音视频】vms布署说明

目录 外场布署场景(99%) 研发实验场景(1%) 高级玩法 证书安装方法 外场布署场景(99%) 下面两种场景,为本产品主要应用场景,2023-08-08日后(统一所有证书)…

vue在线编辑表格导入导出

npm i file-saver npm i exceljs npm i luckyexcelindex.html &#xff08;方式一在html中引入&#xff09; <link relstylesheet hrefhttps://cdn.jsdelivr.net/npm/luckysheetlatest/dist/plugins/css/pluginsCss.css /><link relstylesheet hrefhttps://cdn.jsde…

C++ 函数模板与类模板

C最重要的特性之一就是代码重用&#xff0c;为了实现代码重用&#xff0c;代码必须具有通用性。通用代码应不受数据类型的影响&#xff0c;并且可以自动适应数据类型的变化。这种程序设计类型称为参数化程序设计。模板是C支持参数化程序设计的工具&#xff0c;通过它可以实现参…

前端进阶js02----null和undefined的区别

1.相同点 1)都是原始类型的值且保存在栈中。 2) 在布尔运算中都会被认为是false 2.不同点 1&#xff09;null是js的关键字&#xff0c;表示空值&#xff1b;undefined不是关键字&#xff0c;是一个全局变量。 2&#xff09;值相同&#xff0c;但类型不一样 值相同&#xff1a…

考研算法第40天:众数 【模拟,简单题】

题目 本题收获 又是一道比较简单的模拟题&#xff0c;就不说解题思路了&#xff0c;说一下中间遇到的问题吧&#xff0c;就是说cin输入它是碰到空格就停止输入的&#xff0c;详细的看下面这篇博客对于cin提取输入流遇到空格的问题_while(cin) 空格_就是那个党伟的博客-CSDN博…

JavaScript:模块化【导入和导出】

在现代软件开发中&#xff0c;代码的组织和管理是至关重要的&#xff0c;尤其是在大型项目中。模块化是一种解决方案&#xff0c;它允许我们将代码分割成独立的部分&#xff0c;使得代码结构更清晰、易于维护和重用。本文将深入探讨模块的导入和导出&#xff0c;帮助你全面理解…

为什么都劝年轻人不要频繁跳槽?

"为什么都劝年轻人不要频繁跳槽&#xff1f;"这句话绝对正确&#xff0c;没有任何漏洞&#xff0c;无论如何解释都是正确的&#xff0c;因为“频繁”这个词是非常主观的&#xff0c;有很大的弹性。 不同的人对于跳多少次才算频繁有不同的看法&#xff0c;有人认为一…

QT-QlineEdit 添加自动补全

要在 QLineEdit 上添加自动补全功能&#xff0c;你可以使用 QCompleter 类。QCompleter 提供了自动补全的功能&#xff0c;并且可以与 QLineEdit 一起使用。 下面是一个示例代码&#xff0c;演示了如何在 QLineEdit 上添加自动补全&#xff1a; #include <QApplication>…

大数据培训课程-《机器学习从入门到精通》上新啦

《机器学习从入门到精通》课程是一门专业课程&#xff0c;面向人工智能技术服务&#xff0c;课程系统地介绍了Python编程库、分类、回归、无监督学习和模型使用技巧以及算法和案例充分融合。 《机器学习从入门到精通》课程亮点&#xff1a; 课程以任务为导向&#xff0c;逐步学…

nux查看线程数量及优先级

linux查看线程数量及优先级 在Linux中&#xff0c;可以使用以下命令查看线程名称和PID&#xff1a; top -H ps -T这些命令将会列出当前系统中正在运行的所有进程及其创建的线程。 如果要查看线程的优先级&#xff0c;可以通过如下命令&#xff1a; /root # chrt -p 1091 pi…

Python自动化测试用例:如何优雅的完成Json格式数据断言

目录 前言 直接使用 优化 封装 小结 进阶 总结 资料获取方法 前言 记录Json断言在工作中的应用进阶。 直接使用 很早以前写过一篇博客&#xff0c;记录当时获取一个多级json中指定key的数据&#xff1a; #! /usr/bin/python # coding:utf-8 """ aut…

Shell编程基础(十一)使用 expect 脚本处理人机交互

使用 expect 脚本处理人机交互 安装expect适用场景编写expect实现人机交互自动确认删除文件登录远程服务器自动确认并输入密码 在shell中执行 expect 脚本程序 安装expect 先检测是否有安装 yum list installex expect或者 使用 rpm rpm -q expect如果没有安装&#xff0c;就…

访问者模式(Visitor)

访问者模式是一种行为设计模式&#xff0c;可封装一些作用于当前数据结构的各元素的操作&#xff0c;它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。 Visitor is a behavior design pattern that encapsulates some operations that act on the elements of t…

在前端中如何创建表单并提交数据到服务器?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 通过from表单⭐ 代码讲解⭐ 注意事项⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这个专栏是为那些对Web开发…

积累常见的有针对性的python面试题---python面试题001

1.考点列表的.remove方法的参数是传入的对应的元素的值,而不是下标 然后再看remove这里,注意这个是,删除写的那个值,比如这里写3,就是删除3, 而不是下标. remove不是下标删除,而是内容删除. 2.元组操作,元组不支持修改,某个下标的内容 可以问他如何修改元组的某个元素 3.…