【三维重建】【深度学习】windows10下NeRF代码Pytorch实现

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


文章目录

  • 【三维重建】【深度学习】windows10下NeRF代码Pytorch实现
  • 前言
  • NeRF模型运行
    • 下载源码并安装环境
    • 训练NeRF
    • 训练个人数据集
  • 总结

前言

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


NeRF模型运行

下载源码并安装环境

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

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

# 创建虚拟环境
conda create -n nerf_mvs python=3.7
# 查看新环境是否安装成功
conda env list
# 激活环境
conda activate nerf_mvs
# 下载githup源代码到合适文件夹,并cd到代码文件夹内(科学上网)
git clone https://github.com/yenchenlin/nerf-pytorch.git
cd nerf-pytorch
# 安装pytorch包
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu117
# 通过清华源,安装其他包(需要删除关于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())

训练NeRF

1.下载数据集:win10系统下还是有点麻烦,需要保证主机安装了以下环境!!!因为需要在win10下执行bash命令
win10配置wget
win10配置gitbash

# 进入nerf-pytorch目录下,需要用linux的目录格式
cd /E/deep-learning-for-image-processing-master/nerf-pytorch
bash download_example_data.sh

# download_example_data.sh内容
wget http://cseweb.ucsd.edu/~viscomp/projects/LF/papers/ECCV20/nerf/tiny_nerf_data.npz
mkdir -p data
cd data
wget http://cseweb.ucsd.edu/~viscomp/projects/LF/papers/ECCV20/nerf/nerf_example_data.zip
unzip nerf_example_data.zip
cd ..

根据configs目录下的配置文件(XXX.txt)中指定的数据存放路径,把下载的开源数据解压放到NeRF工程内的data文件夹下。


2.训练网络: 在执行指令时,选择指定的配置文件(configs/XXX.txt)训练对应的数据集。

# 开始训练网络(lego数据集)
python run_nerf.py --config configs/lego.txt


训练生成的结果保存在NeRF工程目录下的logs文件夹下:

logs\XXXX目录下保存了训练过程中生成的网络权重:

查看效果(mp4转了GIF):

训练个人数据集

个人数据集的制作流程,可以参考博主的另一篇博文【基于COLMAP制作自己的NeRF(LLFF格式)数据集】,制作数据集所需要的图片是用手机拍摄视频后抽帧获取的。
在/nerf-pytorch/data/nerf_llff_data/目录下查看自己的图片数据集和位姿文件;
在/nerf-pytorch/configs/目录下查看对应的配置文件。

执行nerf代码,开始训练。

# test_frame.txt:对应的数据集的配置文件
python run_nerf.py --config configs/test_frame.txt


查看效果(mp4转了GIF):

生成的视频(GIF)要想包括目标物体,需要在demo中手动调整位姿,因为数据集各有不同,所以位姿也是因人而异。

windows下可能出现的问题:

  1. subprocess.CalledProcessError: Command ‘cp ./data/nerf_llff_data/scene\images/* ./data/nerf_llff_data/XXXX\images_8’ returned non-zero exit status 1.
  2. TypeError: cannot unpack non-iterable NoneType object

产生原因: config/文件下的配置文件XXX.Xtxt设置了factor=8,默认即是8倍下采样,下采样后的图片会被保存在image_8文件夹下,完成这一过程后nerf会从image_8读取图片并用于训练。问题就出现在下采样的过程,由于系统兼容性问题,windows系统无法执行_minify函数中的部分系统指令,导致了第一个错误,并在此过程中产生了一个的空文件夹image_8,假如代码不经过修改再次执行,判断存在文件夹image_8后跳过下采样过程直接进行后续的训练,因此在空的image_8文件夹中进行数据读取,就产生了第二个错误。
在nerf-pytorch/load_llff.py文件中:

更改意见: 添加一个下采样的demo,将处理过的图片保存到image_8中。

import cv2
import os
from PIL import Imageimages_path = './data/nerf_llff_data/test_frame/images/' # 原图路径
output_dir = './data/nerf_llff_data/test_frame/images_8/' # resize后路径
factor = 8 # 降采样倍数
images_list = os.listdir(images_path)
img = Image.open(images_path + images_list[0])
(W,H) = (img.width,img.height) #[W,H]
print("image_size : ",(W ,H))
# 保存resize后的图片到新文件夹下
for image_name in images_list:img = cv2.imread(images_path+image_name)img_resize = cv2.resize(img, (int(W/factor), int(H/factor)))cv2.imwrite(output_dir + image_name, img_resize)print(image_name , " done")
print("all images done")

总结

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

【三维重建】【深度学习】windows10下NeRF代码Pytorch实现相关推荐

  1. 常用深度学习框——Caffe/TensorFlow / Keras/ PyTorch/MXNet

    常用深度学习框--Caffe/TensorFlow / Keras/ PyTorch/MXNet 一.概述 近几年来,深度学习的研究和应用的热潮持续高涨,各种开源深度学习框架层出不穷,包括Tensor ...

  2. pytorch | 深度学习分割网络U-net的pytorch模型实现

    原文:https://blog.csdn.net/u014722627/article/details/60883185 pytorch | 深度学习分割网络U-net的pytorch模型实现 这个是 ...

  3. 10 年深度学习顶级论文和代码精选,请务必收藏!

    点击上方"AI有道",选择"星标"公众号 重磅干货,第一时间送达 你是否经常花费时间或苦于寻找深度学习相关的顶会优秀论文极其相对应的代码?今天给大家介绍一个超赞 ...

  4. 深度学习导论(3)PyTorch基础

    深度学习导论(3)PyTorch基础 一. Tensor-Pytorch基础数据结构 二. Tensor索引及操作 1. Tensor索引类型 2. Tensor基础操作 3. 数值类型 4. 数值类 ...

  5. 深度学习、生成对抗、Pytorch优秀教材推荐

    推荐一批深度学习.生成对抗.Pytorch优秀教材推荐,绝对不容错过. <GANs in Action> Jakub Langr and Vladimir Bok 本书简介: <GA ...

  6. 深度学习入门笔记(十五):深度学习框架(TensorFlow和Pytorch之争)

    欢迎关注WX公众号:[程序员管小亮] 专栏--深度学习入门笔记 声明 1)该文章整理自网上的大牛和机器学习专家无私奉献的资料,具体引用的资料请看参考文献. 2)本文仅供学术交流,非商用.所以每一部分具 ...

  7. 深度学习工程实践 6. 使用pytorch训练自己的眼球分割模型

    深度学习工程实践 6. 使用pytorch训练自己的眼球分割模型 1. 概述 2. 目标 3. 工程实践 3.1 数据寻找,数据标注 3.2 训练 3.3 部署应用到桌面程序 4. 总结 1. 概述 ...

  8. 实现Linux服务器配置深度学习环境并跑代码完整步骤

    实现Linux服务器配置深度学习环境并跑代码完整步骤 目录 实现Linux服务器配置深度学习环境并跑代码完整步骤 安装pytorch 第一步 安装anaconda创建虚拟环境 1.下载安装包 2.安装 ...

  9. 深度学习实战6-卷积神经网络(Pytorch)+聚类分析实现空气质量与天气预测

    文章目录 一.前期工作 导入库包 导入数据 主成分分析(PCA) 聚类分析(K-means) 二.神经网络模型建立 三.检验模型 大家好,我是微学AI,今天给大家带来一个利用卷积神经网络(pytorc ...

最新文章

  1. Linux之rpm包管理
  2. TWebBrowser 与 MSHTML(2): 获取 window 对象的时机
  3. 基于IPSec的×××配置实验
  4. boost::mp11::mp_pairwise_fold相关用法的测试程序
  5. leetcode435. 无重叠区间
  6. php与python缺点_php和python的比较
  7. STM32H743+CubeMX-ADC(16bit分辨率)+DMA采样三路模拟量(并行),没过采样。
  8. Linux下修改时区
  9. Java网络编程之Socket和ServerSocket详解
  10. 三星Galaxy A90 5G版通过认证:有望成为最便宜的5G手机
  11. Python类对象的运算符add重载
  12. 自定义snippet(代码段)就可以极大的提高你的开发效率 VScode快速一键生成html、vue、jsx、ajax、sass、docker等代码片段
  13. 零基础入门语义分割——Task2 数据扩增
  14. jedis操作set_使用 JedisAPI 操作 Redis
  15. Riverbed实现云内外的端到端可视化
  16. 基于JavaWeb实现网上图书商城系统
  17. 硬核桌面美化,让Windows电脑像Mac一样充满高级感!
  18. 局域网远程桌面无法连接到远程计算机,局域网无法远程连接桌面怎么解决
  19. 实现音乐播放器歌词显示效果
  20. android 添加日历事件,android 本地日历插入事件

热门文章

  1. SQL实现FIFO算法:库龄继承、配额分析
  2. 在java中保留六位小数_java中保留指定小数位的方法
  3. 自动控制原理06--控制系统设计与校正
  4. IntelliJ IDEA添加JavaScript注释
  5. Context Capture/Smart3D集群配置步骤
  6. 斐波那契堆为何称为斐波那契
  7. 用Fildder抓取Android的HTTP包
  8. 新兵入坑 ——回顾NOIP2018
  9. Android: 适配器中的 viewholder 的作用
  10. NSM和入侵检测掌握IDS规则和警报的指南