【三维重建】【深度学习】Windows10下NeRS官方代码Pytorch实现

news2024/12/24 20:35:48

【三维重建】【深度学习】Windows10下NeRS官方代码Pytorch实现

提示:最近开始在【三维重建】方面进行研究,记录相关知识点,分享学习中遇到的问题已经解决的方法。


文章目录

  • 【三维重建】【深度学习】Windows10下NeRS官方代码Pytorch实现
  • 前言
  • NeRS模型运行
    • 下载源码并安装环境
    • 安装 Pytorch3d
    • 训练NeRS
    • 训练个人数据集
    • 渲染的视频: ![在这里插入图片描述](https://img-blog.csdnimg.cn/1f8b540c1a894d8aa90cb2101a2884a1.gif) 用meshlab查看模型: ![](https://img-blog.csdnimg.cn/d2d5b1c558794ceab0c3509dfe2e345d.png)
  • 总结


前言

NeRS是由卡内基梅隆大学机器人研究所的Zhang, Jason等人在《NeRS: Neural Reflectance Surfaces for Sparse-view 3D Reconstruction in the Wild【NeurIPS 2021】》【论文地址】一文中提出了学习与球体不同的闭合表面的神经形状表示,从而确保重建结果完全密闭。表面参数化允许NeRS 学习(神经)双向表面反射函数(BRDF),将依赖于视图的外观分解为环境照明、漫反射颜色(反照率)和镜面“光泽度”。NeRS可以根据稀疏的图片推测出物体的3D形状,可利用日常手机相机采集数据对物体进行3D重建。
在详细解析NeRF网络之前,首要任务是搭建NeRS【Pytorch-demo地址】所需的运行环境,并完成模型训练和测试工作,展开后续工作才有意义。


NeRS模型运行

下载源码并安装环境

在win10环境下装anaconda环境,方便搭建专用于NeRF模型的虚拟环境。
【pytorch代码推荐参考教程】

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

# 创建虚拟环境
conda create -n ners python=3.8
# 查看新环境是否安装成功
conda env list
# 激活环境
activate ners 
# 下载githup源代码到合适文件夹,并cd到代码文件夹内(科学上网)
git clone https://github.com/jasonyzhang/ners.git
cd ners
# 安装pytorch包(这里的版本安装需要对照cub版本,在安装pytorch3D小节部分)
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu115
# 通过清华源,安装其他包(需要删除关于pytorch的部分)
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
# 查看所有安装的包
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())

安装 Pytorch3d

1.安装必要依赖库

# 这里可能需要anaconda的默认源安装
conda install -c conda-forge -c fvcore -c iopath -c bottler fvcore iopath

2.cub安装配置: 查询对照表。

根据自己的cuda 版本选择对应的cub realase版本下载。

这里的cuda是物理机器上实际安装的cuda版本(环境变量里配置的cuda),不是虚拟环境中的cuda版本。
否则即使pytorch3d安装成功,也不能使用gpu。


下载解压后,在环境变量中添加cub的文件的路径(CUB_HOME)。

3.安装pytorch3D: 下载解压pytorch3D源码,注意版本要与pytorch对应,每个版本下有注明其适用的pytorch版本。

# 创建文件夹,将下载好的pytorch3D放到该目录下(重命名)
mkdir -p external

在Windows系统下,不建议使用git clone方式下载源码。

下载0.7.1版本的pytorch3D版本,并解压到NeRS工程的external/目录下。
在这里插入图片描述
安装过程中可能出现如下错误:

解决方法:安装 Visual Studio 2019

修改extra_compile_args = {“cxx”: [“-std=c++14”]}为extra_compile_args = {“cxx”: [“”]}:

管理员身份打开 x64 Native Tools Command Prompt for VS 2019,依次输入:

activate ners 
# 进入到pytorch3D目录下
cd external/pytorch3d
set DISTUTILS_USE_SDK=1
set PYTORCH3D_NO_NINJA=1
# 开始安装
python setup.py install


查看pytorch3d版本:

import pytorch3d
print(pytorch3d.__version__)

训练NeRS

1.下载数据集
下载MVMC数据集(576 个实例),并解压到工程目录下。

下其MISC数据集(8个实例),,并解压到工程目录下。

2.训练网络
执行命令过程中,可能出现如下错误:

解决方法,卸载当前版本,推荐安装9.0.1版本:

pip uninstall pillow
pip install pillow==9.0.1 -i https://pypi.tuna.tsinghua.edu.cn/simple/

在MVMC上运行

# --mvmc标志来使用MVMC数据 --instance-dir指定具体汽车数据集
python main.py --instance-dir data/mvmc/7246694387 --mvmc --export-mesh --symmetrize
# 整个MVMC所有汽车的数据集
python scripts/mvmc_driver.py

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

博主将视频转为了GIF方便展示:
在这里插入图片描述
用meshlab查看模型:

在MISC上运行

# --predict-illumination 照明预测
python main.py --instance-dir data/misc_objects/espresso --symmetrize --export-mesh --predict-illumination

渲染的视频:

用meshlab查看模型:

训练个人数据集

制作数据集所需要的图片是用手机拍摄视频后抽帧获取的,完成的数据集放置在data\our\目录下。数据格式是参照MISC数据集格式。

这里mask的获取推荐查看博主的之前的博文【Windows10下MiVOS官方代码Pytorch实现与源码解析】,它能批量为一组数据集生成对应的mask。

目前这一步为止,mask文件中图像的尺寸和文件名与image中图像不一致,因此需要进一步处理使其保持一致,并且需要将mask从三通道彩色图变为单通道的黑白图。

import cv2
import os
from PIL import Image
import numpy as np
# 个人数据所在目录
dir_data = r'D:\deeplean_demo\ners\data\statue'
# mask的目录
dir_mask = os.path.join(dir_data, 'masks')
# image的目录
dir_img = os.path.join(dir_data, 'images')
# 所有mask文件名
mask_list = os.listdir(dir_mask)
# 所有image文件名
img_list = os.listdir(dir_img)
for mask_file, img_file in zip(mask_list, img_list):
    # 获得图片的文件名
    (img_filename, img_extension) = os.path.splitext(img_file)
    # 读取图片
    img = cv2.imread(os.path.join(dir_img, img_file))
    # 获取图片的尺寸,使mask的尺寸与原图保持一致
    h, w = img.shape[0], img.shape[1]
    # 读取mask,并将其转为黑白的mask,只有0和255
    # mask = cv2.imread(os.path.join(dir_mask, mask_file), 0) == 0
    mask = cv2.imread(os.path.join(dir_mask, mask_file), 0) > 0
    mask = mask*255
    # resize mask的尺寸
    image_mask = cv2.resize(mask.astype("uint8"), (w, h), interpolation=cv2.INTER_AREA)
    # 使mask的文件名与原图保持一致
    img_file_mask = img_filename + '.png'
    img_file_mask = os.path.join(dir_mask, img_file_mask)
    #删除旧的mask
    os.remove(os.path.join(dir_mask, mask_file))
    # 保持新的mask
    cv2.imwrite(img_file_mask, image_mask )
    # cv2.imwrite(img_file_mask, mask )

官方数据集的mask位深度是32(即channel通道数是4),但是博主在读了源码发现只需要保留位深度是8的mask也是可以的。

metadata.json中的数据分别表示方位角(左右偏转角度)、俯仰角(上下偏转角度)和长方体体积,复制MISC数据集中的一个JSON文件,注意数据集中每张图片都分别对应一个方位角和俯仰角。

博主这里是自己估算的,没什么特殊方法,有知道的朋友可以在评论区告知一身!!!

开始训练

python main.py --instance-dir data/our/mouse --symmetrize --export-mesh --predict-illumination

渲染的视频:
在这里插入图片描述
用meshlab查看模型:

总结

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

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

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

相关文章

体制内裸辞,她用云端地球实现了自己的乡村梦

追逐田园的“诗与远方” “我最初的梦想,就是有一个亲手打造的、能装进个人喜好的小院子。”为完成自己的梦想,吕春萍毅然放弃了体制内的工作,来到秦岭脚下的桥南镇曹峪村,践行自己的“乡村梦”。 起初,吕春萍做了五…

「开源项目」开源企业级问答系统-Danswer

danswer 基本介绍 开源企业级问答系统,可以对内部文档进行自然语言提问,并返回可靠的答案、引用和参考资料,可以连接到多种常见工具,如Slack、GitHub和Confluence。 在线预览 暂无在线预览地址,不过可以自行部署使用…

【error】svn 清理以下路径失败 原始内容不存在

前言 目前我们这边的内网代码是通过 TortoiseSVN 进行版本管理的,平时用着也挺好的,没碰到什么大问题。 但是,今天碰到了一个比较棘手的问题,在这里做一下记录,以方便自己和有需要的朋友在之后碰到该类问题时有个参考…

[php-cos]ThinkPHP项目集成腾讯云储存对象COS

Cos技术文档 1、安装phpSdk 通过composer的方式安装。 1.1 在composer.json中添加 qcloud/cos-sdk-v5: >2.0 "require": {"php": ">7.2.5","topthink/framework": "^6.1.0","topthink/think-orm": "…

为什么中小企业数字化转型这么难?_光点科技

随着科技的飞速发展和数字化时代的到来,数字化转型已成为现代企业发展的必然趋势。大型企业普遍拥有雄厚的资源和资金,能够较为顺利地进行数字化转型。然而,对于中小企业来说,数字化转型却面临着诸多挑战和困难。 资金限制&#x…

5个步骤完成Linux 搭建Jdk1.8环境

1:首先,在Linux系统中创建一个目录,用于存放JDK文件。可以选择在/opt目录下创建一个新的文件夹,例如/opt/jdk。 sudo mkdir /opt/jdk 2:将下载的jdk-8u381-linux-x64.tar.gz文件复制到新创建的目录中。 sudo cp jdk…

如何理解token?

token在项目中的大概流程: 1.客户端使用用户名和密码请求登录 2.服务端收到请求,验证用户名和密码 3.验证成功后,服务端会生成一个token,然后把这个token发送给客户端 4.客户端收到token后把它存储起来,可以放在cookie…

汇编调用C语言定义的全局变量

在threadx移植中,系统的systick通过了宏定义的方式定义,很难对接库函数的时钟频率,不太利于进行维护 所以在C文件中自己定义了一个systick_Div的变量,通过宏定义方式设定systick的时钟频率 在汇编下要加载这个systick分频系数 …

扬州市 自动挡C2 道路驾驶技能考试 电子路要点

先上车把身份证给安全员,验证身份,然后下车逆时针绕车一周,在车头前站立三秒拍照,然后上车 科三基本注意事项 起步不管要不要变道,都必须先打左转向灯,但是也要记得关灯 操作顺序:打左转向灯、…

flutter:BottomNavigationBar和TabBar

区别 BottomNavigationBarr和TabBar都是用于创建导航栏的组件,但它们有一些区别。 位置不同:BottomNavigationBar通常位于屏幕底部,用于主要导航;而TabBar通常位于屏幕顶部或底部,用于切换不同的视图或页面。 样式不…

【2023】java数据结构-时间、空间复杂度分析

1、算法效率 算法效率分析分为两种:第一种是时间效率,第二种是空间效率。时间效率被称为时间复杂度,而空间效率被称作空间复杂度。 时间复杂度主要衡量的是一个算法的运行速度,而空间复杂度主要衡量一个算法所需要的额外空间 2、…

基于Flask+Mongodb的网络文章系统

在这个软件,你可以编辑文章,管理数据。 注册登录

使用dockerfile来配置lnmp并运行wordpress以及镜像缩小体积

docker dockerfile创建镜像1.创建工作目录2.将各项安装包放入到对应的目录中3.在centos目录中用dockerfile创建centos:jiang镜像用来准备依赖包4.创建依赖包镜像5.创建docker1网段6.在centos:jiang依赖包镜像的前提下创建lnmp各个镜像进入各个目录编辑Do…

python+monkey+ 监控 crash,性能统计

目录 前言: monkey 压力测试 android monkey.ini 配置文件 代码分析 前言: 在软件开发中,测试和监控是非常重要的一个环节,它可以帮助我们更加全面地检测软件中的安全漏洞和风险。Python 是一种常用的脚本语言,可以…

软考高项(五)信息系统工程 ★重点集萃★

👑 个人主页 👑 :😜😜😜Fish_Vast😜😜😜 🐝 个人格言 🐝 :🧐🧐🧐说到做到,言出必行&am…

【Python学习笔记】:whl安装地址教程链接存档

装Sklearn包的时候遇到了莫名其妙的问题,最后发现是少了whl文件,经过多方搜索找到一些比较靠谱的教程帖子: whl文件下载网站:https://www.lfd.uci.edu/~gohlke/pythonlibs/ 无需翻墙 知乎上很全面的安装教程:https://z…

接口用例如何写?接口测试用例设计方法(详解)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、接口常遇见的b…

【TiDB理论知识 07】SQL执行流程

一 DML语句读写流程 1 DML语句读流程概要 用户发出SQL 被协议层接收 Protocal Layer 通过PD获取时间戳 parse模块 解析SQL,通过词法解析 与 语法解析 生成AST语法树 编译SQL Compile模块 ,区分点查 与 非点查,生成执行计划 发送给Executor,从TIKV获…

【尚硅谷】索引优化分析

目录 1. 常用指令查使用引擎的指令 sql 优化合并去重分页显示模糊查询 索引优化单表优化两表优化 1. 常用指令 常用指令: 查询日志:默认关闭,记录查询的sql语句(比如慢查询,大于多少秒的都记录)&#xff0…

Linux共享库库+例子

1.什么是共享库?有什么优点?和静态库有什么区别? Linux动态库(Dynamic Link Library,缩写为DLL)是一种在Linux系统中使用的共享库(Shared Library)。与静态库不同,动态库…