nerf训练自己的数据,过程记录十分详细

2023-10-26

       之前跑很多项目没有记录,后来再弄就不行了。这次特别记录一下,在梳理流程的同时希望给大家带来小小的帮助!我自己是在cuda11.2,windows环境下成功的,过程十分详细,有需要的朋友耐心看完。有问题可以评论区交流

        首先,本文nerf是基于pytorch训练的,代码来源于yenchenlin大佬,GitHub地址:GitHub - yenchenlin/nerf-pytorch: A PyTorch implementation of NeRF (Neural Radiance Fields) that reproduces the results.

 一、配置nerf环境      

         在每弄一个新项目之前,建议创建一个新的环境,本文利用conda命令创建名为nerf的环境,指令如下:


   
   
  1. conda create --name nerf -y python= 3.8 #创建名为nerf的环境
  2. conda activate nerf #切换到nerf环境

        然后安装需要的库,都在nerf代码文件的requirements.txt里


   
   
  1. cd nerf-pytorch #进入到你nerf的文件夹,根据自己的文件位置调整
  2. python -m pip install --upgrade pip #升级一下pip,防止莫名其妙的错误
  3. pip install -r requirements.txt #安装需要的库

        结束之后建议测试一下pytorch是否为GPU版本,有时候默认安装会装成CPU版本,用以下代码测试,输出版本号和True则没有问题。否则卸载安装的torch版本,用wheel离线安装。


   
   
  1. import torch
  2. print(torch.__version__)
  3. print(torch.cuda.is_available())

        然后先用作者提供的数据跑一下nerf,保证环境没有问题。这里如果用的是windows系统,需要下载Gitbash来使用linux的命令,先在代码文件夹下下载数据:

bash download_example_data.sh #下载作者提供的数据
   
   

        结束后在data文件夹下有个名为nerf_example_data的压缩包,解压后在nerf代码文件夹下使用如下命令开始训练:

python run_nerf.py --config configs/fern.txt
   
   

二、创建llff格式的数据集                           

       接下来的步骤请务必注意文件夹的命名,未打括号说明则最好按照我的名字命名,然后注意是在哪个文件夹下操作的,否则后面训练可能找不到对应文件而报错!  

        先在nerf_llff_data文件夹下创建一个自己的数据文件夹,我命名为llfftest(这个名字可以自取),接着在llfftest文件夹下创建名为images的文件夹,将拍摄的图片放置到此文件夹,下面给出我的示例:

        接着需要下载COLMAP软件,(地址:Release 3.8 · colmap/colmap · GitHub),拉到最下面选择cuda版本:

下载解压后打开COLMAP.bat文件得到以下界面:

然后点击File,选择New Project,继续点击new,在llfftest文件夹下手动输入文件名database.db后,点击保存:

 接着点击Select,选择保存图片的那个images文件夹,点击Save:

接下来点击File右边的Processing,选择Feature extraction,出现如下界面,只需要配置第一个选项,然后点击下面Extract。

结束后点击关闭,接着点击Processing下的Feature matching,直接run即可,然后等待匹配结束。

结束后点击Processing旁边的Reconstruction,选择Start Reconstruction,等待结束。。。

结束后,点击File,选择Export model,这里一定注意不要直接保存,需要新建两个文件夹,名字很重要,请跟我保持一致! 

完成后检查一下文件下的东西:

接下来,将获取的位姿等数据转化为llff格式,需要下载llff脚本,(地址:GitHub - Fyusion/LLFF: Code release for Local Light Field Fusion at SIGGRAPH 2019

为了防止库冲突和报错,我又创建了名为llff的环境,将此项目需要的库进行安装,方法跟创建nerf环境是一样的


   
   
  1. conda create --name llff -y python= 3.8 
  2. conda activate llff 
  3. pip install -r requirements.txt  #在llff代码文件夹下运行

然后在此环境和llff代码文件夹下运行python imgs2poses.py (红框部分改为自己的文件路径):  

结束后就能在llfftest下得到一个.npy文件:

三、训练自己的nerf

        首先在nerf代码中,我们要在config文件夹下创建我们自己的配置文件,只需要将config文件夹下的fern复制一份,名字改为llftest,datadir后面也改成llftest即可

然后就可以在nerf环境和nerf代码下开始训练啦,(建议用Gitbash运行):

python run_nerf.py --config configs/llfftest.txt
   
   

效果如下: 

最后,如果你在训练时遇到

Mismatch between imgs 0 and poses 55 !!!!
Traceback (most recent call last):
File "run_nerf.py", line 878, in <module>
train()
File "run_nerf.py", line 544, in train
spherify=args.spherify)
File "C:\Users\HP\Desktop\nerf-pytorch-master\load_llff.py", line 246, in load_llff_data
poses, bds, imgs = _load_data(basedir, factor=factor) # factor=8 downsamples original imgs by 8x
TypeError: cannot unpack non-iterable NoneType object

可能是因为函数不兼容,解决方法是,在llfftest文件夹下新建一个images_8的文件夹,将八倍下采样的图片放到这。

下采样代码我也放出来,注意更改自己的路径:


   
   
  1. import cv2
  2. # import def_Gaussian as dg
  3. # import time
  4. import os.path
  5. # import glob
  6. #####################################################################################################################
  7. # 读取文件夹里面的图像数量 并返回filenum
  8. def countFile( dir):
  9. # 输入文件夹
  10. tmp = 0
  11. for item in os.listdir( dir):
  12. if os.path.isfile(os.path.join( dir, item)):
  13. tmp += 1
  14. else:
  15. tmp += countFile(os.path.join( dir, item))
  16. return tmp
  17. filenum = countFile( "C:\\Users\\HP\\Desktop\\nerf-pytorch-master\\data\\nerf_llff_data\\llfftest\\images") # 返回的是图片的张数
  18. print(filenum)
  19. # filenum
  20. n = 8
  21. index = 1 # 保存图片编号
  22. num = 0 # 处理图片计数
  23. for i in range( 1, filenum + 1):
  24. ########################################################
  25. # 1.读取原始图片
  26. if index < 10:
  27. filename = "C:\\Users\\HP\\Desktop\\nerf-pytorch-master\\data\\nerf_llff_data\\llfftest\\images\\" + str(i) + ".jpg"
  28. elif index < 100:
  29. filename = "C:\\Users\\HP\\Desktop\\nerf-pytorch-master\\data\\nerf_llff_data\\llfftest\\images\\" + str(i) + ".jpg"
  30. else:
  31. filename = "C:\\Users\\HP\\Desktop\\nerf-pytorch-master\\data\\nerf_llff_data\\llfftest\\images\\" + str(i) + ".jpg"
  32. print(filename)
  33. original_image = cv2.imread(filename)
  34. # 2.下采样
  35. if n == 4:
  36. img_1 = cv2.pyrDown(original_image)
  37. img_1 = cv2.pyrDown(img_1)
  38. if n == 8:
  39. img_1 = cv2.pyrDown(original_image)
  40. img_1 = cv2.pyrDown(img_1)
  41. img_1 = cv2.pyrDown(img_1)
  42. # 3.将下采样图片保存到指定路径当中
  43. if index < 10:
  44. cv2.imwrite( "C:\\Users\\HP\\Desktop\\nerf-pytorch-master\\data\\nerf_llff_data\\llfftest\\images_8\\" + str(index) + ".jpg", img_1)
  45. elif index < 100:
  46. cv2.imwrite( "C:\\Users\\HP\\Desktop\\nerf-pytorch-master\\data\\nerf_llff_data\\llfftest\\images_8\\" + str(index) + ".jpg", img_1)
  47. else:
  48. cv2.imwrite( "C:\\Users\\HP\\Desktop\\nerf-pytorch-master\\data\\nerf_llff_data\\llfftest\\images_8\\" + str(index) + ".jpg", img_1)
  49. num = num + 1
  50. print( "正在为第" + str(num) + "图片采样......")
  51. index = index + 1

最后的最后,本来是准备让大家看看我的结果的,但视频插入不了,那就祝各位小伙伴顺利吧。遇到什么奇奇怪怪的问题欢迎评论区讨论交流!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

nerf训练自己的数据,过程记录十分详细 的相关文章

随机推荐

  • airpodspro窃听模式_AirPods Pro实时收听怎么关闭? AirPods Pro实时收听的使用方法

    苹果全新AirPods Pro增加了许多新功能 首先 是控制播放 苹果在AirPods Pro中放弃了敲击手势 并用杆上的力传感器取代了它 控制音乐或视频只需要简单的短按即可 一次按压即可播放或暂停当前播放 两次按压将跳至下一曲目 而三次挤
  • 2019-07-11T09:15:41.000+0000类似时间转换

    let a 2019 07 11T09 15 41 000 0000 new Date a
  • (个人)AR电子书系统创新实训第一周(2)

    了解ZXing Net 想要在unity上实现下载资源的功能 我首先需要确认二维码扫描系统在unity上的可行性 如果要自行开发一套二维码扫描系统 不仅需要知道二维码生成和解码的原理 而且应该还需要用到一些图形学相关的代码库 如opencv
  • Android中为layout创建子文件夹

    在开发Android项目的时候 往往都有一大批java文件和layout文件 java文件分类比较简单 直接方法创建文件夹就行 但layout还需要多一步配置 看最后的文件结构图 实现步骤 1 创建相应的文件夹结构 需要注意的是 无论如何
  • ‘float‘ object has no attribute ‘decode‘

    错误代码 weibo df pd read csv Users dl Desktop 情感分析论文 词云图 微博文本数据 原始数据 原数据 表格 微博文本内容 csv print weibo df head 在读取csv或者excel文件时
  • Python基础—文件操作

    Python基础 文件操作 文件操作 文件是指为了重复使用或长期使用的目的 以文本或二进制形式存放于外部存储器 硬盘 U盘 光盘等 中的数据保存形式 文件是信息交换的重要途径 也是利用程序解决实际问题的重要媒介 程序对数据读取和处理都是在内
  • 单片机裸机环境下编写AT指令程序

    1 写在前面 AT指令在各种WIFI模块 2G 4G模块以及一些无线通讯模块中应用广泛 但是用过的朋友都知道 这种方式对于单片机编程来说 并不友好 本篇文章将以ESP8266 WIFI模块为例介绍在单片机裸机环境下编写AT指令程序的一种方式
  • 高精地图在无人驾驶中的应用

    转自 http 36kr com p 5060994 html 编者按 本文来自 程序员 作者 陈辰 刘少山 36氪经授权发布 高精地图是无人驾驶核心技术之一 精准的地图对无人车定位 导航与控制 以及安全至关重要 本文是 无人驾驶技术系列
  • PHP操作Redis LIST ,SET, HASH 的相关命令 (一)

    博客搬家 请访问 PHP操作Redis LIST SET HASH 的相关命令 一 PHP操作Redis KEY String 的相关命令 二 PHP操作Redis 有序集 Sorted Set 的相关命令 三
  • HttpServletRequest.getServletContext()一直提示找不到,而引出的问题

    开发j2ee项目的时候 需要用到servlet api 如果使用了maven web项目可以在pom xml中手动加入所需jar包 达到与依赖j2ee libarary同样的功能 可问题来了 1 问题描述 最近使用myeclipse10 7
  • 2023华为OD机试真题【打印机队列/排序】

    题目内容 有5台打印机打印文件 每台打印机有自己的待打印队列 因为打印的文件内容有轻重缓急之分 所以队列中的文件有1 10不同的代先级 其中数字越大优先级越高 打印机会从自己的待打印队列中选择优先级最高的文件来打印 如果存在两个优先级一样的
  • Struts框架(一)——简介

    引言 Struts 一个web应框架 概述 Struts基于MVC的一个web开源框架 也是一个表示层的框架 只能用于Web项目 内容 一 优缺点 1 优点 1 这是一个开源框架 能让开发人员更深入的了解其内部实现机制和原理 2 框架自带的
  • Spring之AOP的实现

    文章目录 什么是AOP jdk动态代理实现AOP spring实现AOP 什么是AOP AOP Aspect Oriented Programming 意为面向切面编程 我们所熟悉的是面向对象编程 OOP 将程序中所有参与模块都抽象成对象
  • vue2、3复习02-组件的生命周期,父子组件、兄弟组件、后代之间组件的数据共享,vuex,全局配置axious,使用ref引用dom元素,使用ref引用组件的方法,this.$nextTick

    1 组件的运行过程 声明周期函数 略 2 父子组件中的数据共享 父向子共享数据 子向父共享数据 父子之间双向数据同步 1 父组件向子组件共享数据 父组件通过v bind属性想子组件共享数据 子组件使用props接收数据 2 子组件向父组件共
  • 【C++】字体文件解析(FreeType)

    目录 字体文件解析 一 前言 二 基本排版概念 1 字体文件 2 字符图像和字符表 3 字符和字体指标 三 字形轮廓 四 字形指标 1 基线 笔和布局 2 排版指标和边界框 3 方位与步进 4 网格拟合的效果 5 文本宽度与边界框 五 代码
  • ipad怎么修改服务器,ipad怎么设置ipv6网络

    ipad怎么设置ipv6网络 内容精选 换一换 本文将为您介绍如何快速搭建IPv4网段或IPv6网段的VPC 以及搭建前的准备工作 IPv4 创建VPC及子网时 默认创建的网段为IPv4类型 IPv4网络无法访问Internet上的IPv6
  • 计算机组成原理实验四 微程序控制器实验报告

    我班算是几乎最后一个做实验的班级了 报告参考了一些朋友提供的数据加上一些自己的主观拙见 本人水平有限加之制作仓促难免有错误 望大家批评指正 4 1 微程序控制器实验 一 实验目的 1 掌握微程序控制器的组成原理 2 掌握微程序的编制 写入
  • 关于安装MinGw的问题

    前段时间电脑很卡 重装了系统 换了两条内存 电脑瞬间满血复活 不过重装各种东西就很麻烦了 安装个MinGW搞了我半天 所以今天记录一下怎么安装MinGW 1 哪下 MinGW w64GCC for Windows 64 32 bitshtt
  • Linux下配置java环境版本opencv

    安装gcc等编译环境 yum install gcc yum install python3 8 yum install cmake yum groupinstall Development Tools 去官方网站下载使用的压缩包4 5 0
  • nerf训练自己的数据,过程记录十分详细

    之前跑很多项目没有记录 后来再弄就不行了 这次特别记录一下 在梳理流程的同时希望给大家带来小小的帮助 我自己是在cuda11 2 windows环境下成功的 过程十分详细 有需要的朋友耐心看完 有问题可以评论区交流 首先 本文nerf是基于