NERF 训练自己数据集遇到的一些问题

GitHub - yenchenlin/nerf-pytorch: A PyTorch implementation of NeRF (Neural Radiance Fields) that reproduces the results.

pytorch 代码

NERF 自己数据集复现 完成步骤+遇到问题

本文主要用于记录自己复现NERF所遇到的一些问题,欢迎各位大佬对文中有误内容批评指正

完成步骤:

1 数据集跑colmap,生成相机位姿

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

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

接下来点击File右边的Processing,选择Feature extraction,出现如下界面,只需要配置第一个选项,然后点击下面Extract(一般用单目相机)

结束后点击Processing旁边的Reconstruction,选择Start Reconstruction,等待结束
结束后,点击File,选择Export model,这里一定注意不要直接保存,需要新建两个文件夹(sparse,0),请保持一致 nerf原代码中固定了sparse/0文件夹的名称

结束后检查文件夹中的东西:

2 将生成的bin文件通过llff数据集转化成.npz格式

  (生成的txt文件也可以转化,但需要修改下LLFF里面的代码)

    把llff数据中的pose_utils.py函数中的这种后缀是.bin的和_binary的都换成.txt和_text(read_points3D_text函数也有定义直接用)

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

下载完成后进入文件夹执行

python imgs2poses.py <自己跑的colmap数据路径>

结束后得到一个.npy文件

3制作自己数据集的configs.txt文件

创建自己的配置文件放在configs里面,其中的factor为下采样因子,原文是8(进行8倍的下采样)

完成后执行
python run_nerf.py --config configs/llfftest.txt
注意如果你是360度环拍的数据集   执行  ?这个地方存疑
python run_nerf.py --config configs/test.txt --spherify --no_ndc
否则无法得到正确的渲染的结果 (渲染的图像中会有黑色的线)
修改训练次数

找到run_nerf.py 中的train()函数 修改N_iters即可

如果训练渲染的效果很差,大部分情况是拍的数据的问题,网上有很多如何拍摄的教程,可以去搜一下,本人除了llff和合成数据集外,跑过DTU数据集,效果还可以,ETH3D的效果一般,可能是因为图片变化太大了。

问题:

1 out of the memory
修改txt文件中的N_rand N_samples N_importance

代表处理光束的数量,普通采样点数量(进入coarse网络的采样点个数),重要性采样点的数量(进入fine网络的采样点个数是sample+importance)

2subprocess.CalledProcessError: Command ‘mogrify -resize 12.5% -format png *.JPG‘ ret

如果直接把原图像拷进去,images_8文件夹直接存放原图,可以成功训练,但会导致训练效果极其模糊甚至神经元爆炸!

(自己创个images_8文件夹,用下面代码手动执行下采样)如果不执行下采样,训练出来的结果很差

下采样代码如下:  (要修改代码中的数据地址)

import cv2
 
import os.path
 

def countFile(dir):
 
   tmp = 0
   for item in os.listdir(dir):
       if os.path.isfile(os.path.join(dir, item)):
           tmp += 1
       else:
           tmp += countFile(os.path.join(dir, item))
   return tmp
 
filenum = countFile('/root/data/eth3d/office/office/images')  # 返回的是图片的张数
print(filenum)
 
 
 
 
n = 8 #这个是采样因子,下采样几倍把这个因子修改成几
index = 0  # 保存图片编号
num = 0  # 处理图片计数
for i in range(0, filenum):
    ########################################################
 
 
 
   filename = '/root/data/eth3d/office/office/images/' + str(i) + '.jpg'
   print(filename)
   original_image = cv2.imread(filename)
 
 
 
   if n == 2:
        img_1 = cv2.pyrDown(original_image)
 
   if n ==8:
 
        img_1=cv2.pyrDown(original_image)
 
        img_1=cv2.pyrDown(img_1)
 
        img_1=cv2.pyrDown(img_1)            #如果需要其他的采样倍数自己修改代码
 
   cv2.imwrite('/root/data/eth3d/office/office/images_8/' + str(index) + '.jpg', img_1)
 
   num = num + 1
   print("正在为第" + str(num) + "图片采样......")
   index = index + 1

参考:nerf训练自己的数据,过程记录十分详细-CSDN博客

           Windows下:nerf部署-CSDN博客           nerf训练自己的数据,过程记录十分详细_深度学习_qq_43575504-杭州城市开发者社区 (csdn.net)

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值