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

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

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


文章目录

  • 【三维重建】【深度学习】Windows11下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

最终的安装的所有包。
【三维重建】【深度学习】Windows11下NeRS官方代码Pytorch实现_第1张图片
检查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())

【三维重建】【深度学习】Windows11下NeRS官方代码Pytorch实现_第2张图片

安装 Pytorch3d

1.安装必要依赖库

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

2.cub安装配置: 查询对照表。
【三维重建】【深度学习】Windows11下NeRS官方代码Pytorch实现_第3张图片
根据自己的cuda 版本选择对应的cub realase版本下载。

这里的cuda是物理机器上实际安装的cuda版本(环境变量里配置的cuda),不是虚拟环境中的cuda版本。
【三维重建】【深度学习】Windows11下NeRS官方代码Pytorch实现_第4张图片否则即使pytorch3d安装成功,也不能使用gpu。

【三维重建】【深度学习】Windows11下NeRS官方代码Pytorch实现_第5张图片
下载解压后,在环境变量中添加cub的文件的路径(CUB_HOME)。
【三维重建】【深度学习】Windows11下NeRS官方代码Pytorch实现_第6张图片
3.安装pytorch3D: 下载解压pytorch3D源码,注意版本要与pytorch对应,每个版本下有注明其适用的pytorch版本。

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

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

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

解决方法:安装 Visual Studio 2019
【三维重建】【深度学习】Windows11下NeRS官方代码Pytorch实现_第7张图片
修改extra_compile_args = {“cxx”: [“-std=c++14”]}为extra_compile_args = {“cxx”: [“”]}:
【三维重建】【深度学习】Windows11下NeRS官方代码Pytorch实现_第8张图片
管理员身份打开 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

【三维重建】【深度学习】Windows11下NeRS官方代码Pytorch实现_第9张图片
查看pytorch3d版本:

import pytorch3d
print(pytorch3d.__version__)

【三维重建】【深度学习】Windows11下NeRS官方代码Pytorch实现_第10张图片

训练NeRS

1.下载数据集
下载MVMC数据集(576 个实例),并解压到工程目录下。
【三维重建】【深度学习】Windows11下NeRS官方代码Pytorch实现_第11张图片
下其MISC数据集(8个实例),,并解压到工程目录下。
【三维重建】【深度学习】Windows11下NeRS官方代码Pytorch实现_第12张图片
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目录中的对应数据文件夹下。
【三维重建】【深度学习】Windows11下NeRS官方代码Pytorch实现_第13张图片
博主将视频转为了GIF方便展示:

用meshlab查看模型:
【三维重建】【深度学习】Windows11下NeRS官方代码Pytorch实现_第14张图片
在MISC上运行

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

渲染的视频:

用meshlab查看模型:
【三维重建】【深度学习】Windows11下NeRS官方代码Pytorch实现_第15张图片

训练个人数据集

制作数据集所需要的图片是用手机拍摄视频后抽帧获取的,完成的数据集放置在data\our\目录下。数据格式是参照MISC数据集格式。
【三维重建】【深度学习】Windows11下NeRS官方代码Pytorch实现_第16张图片
这里mask的获取推荐查看博主的之前的博文【Windows10下MiVOS官方代码Pytorch实现与源码解析】,它能批量为一组数据集生成对应的mask。
【三维重建】【深度学习】Windows11下NeRS官方代码Pytorch实现_第17张图片
目前这一步为止,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 )

【三维重建】【深度学习】Windows11下NeRS官方代码Pytorch实现_第18张图片

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

metadata.json中的数据分别表示方位角(左右偏转角度)、俯仰角(上下偏转角度)和长方体体积,复制MISC数据集中的一个JSON文件,注意数据集中每张图片都分别对应一个方位角和俯仰角。
【三维重建】【深度学习】Windows11下NeRS官方代码Pytorch实现_第19张图片
博主这里是自己估算的,没什么特殊方法,有知道的朋友可以在评论区告知一身!!!

开始训练

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

渲染的视频:

用meshlab查看模型:
【三维重建】【深度学习】Windows11下NeRS官方代码Pytorch实现_第20张图片

总结

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

你可能感兴趣的:(深度学习,三维重建,深度学习,pytorch,人工智能)