训练笔记Ubuntu——NeRF训练

NeRF训练

  • 准备数据集
    • 制作LLFF数据集
    • blender数据(本文重点关注制作自己数据集)
      • 一、下载官方数据
      • 二、制作自己的数据集
        • 一些准备工作
        • 打开Blender
        • 1、导入模型:.obj文件
        • 2、开始渲染
        • 格式转换
  • 报错记录
    • 一、sudo apt-get update报错
      • 出现问题
      • 解决方案
    • 二、dpkg: 警告: 无法找到软件包,E: Sub-process /usr/bin/dpkg returned an error code (1)
    • 三、sudo add-apt-repository 'XXX'报错
      • 出现问题

准备数据集

制作LLFF数据集

https://github.com/fyusion/llff
1、安装docker和nvidia-docker

注意:
测试docker安装成功:sudo docker run hello-world,不要漏sudo,否则会报错。

docker: Got permission denied while trying to connect to the Docker daemon socket 
at unix:///var/run/docker.sock: Post "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/create": dial 
unix /var/run/docker.sock: connect: permission denied.
See 'docker run --help'.

测试安装nvidia-docker成功同理,sudo docker run --runtime=nvidia --rm nvidia/cuda:10.1-base nvidia-smi。上面给的参考链接,在这一步没有写出sudo

2、下载模型和官方图片

bash download_data.sh
# 下载完成之后,会生成一个 data/testscene/images文件夹,这里保存了图片
sudo docker pull bmild/tf_colmap
sudo docker tag bmild/tf_colmap tf_colmap

# 生成llff数据集
sudo nvidia-docker run --rm --volume /:/host --workdir /host$PWD tf_colmap bash demo.sh

demo.sh中是需要运行的代码,可根据自己的需求修改

3、为自己的图片生成llff数据集格式
1)data/testscene/images内更换为自己的图片
2)对demo.sh文件进行修改:对于nerf来说,我们只需要运行imgs2poses.py,就能生成满足训练格式的图片。此时demo.sh内可以修改为:

# Use COLMAP to compute 6DoF camera poses
python imgs2poses.py data/testscene/

3)执行命令

sudo nvidia-docker run --rm --volume /:/host --workdir /host$PWD tf_colmap bash demo.sh

4、其他
修改imgs2mpis.py参数 ,实现在不同采样因子下的采样率

blender数据(本文重点关注制作自己数据集)

一、下载官方数据

二、制作自己的数据集

目的:渲染3D模型在不同视角下的图片,并为之生成对应的pose,相机内参。根据以上rgb文件、pose文件、相机内参生成blender输入格式。

一些准备工作

1、下载blender
这里我们只需下载软件即可,不需要配置python依赖库
建议版本:2.79(原因:现有的一些代码不支持新版本,会出现报错,所以下载2.79版就行)
2、下载3d模型,在这里我使用了shapenet。根据自己需求在在其他3D模型可是可以的

打开Blender

1、导入模型:.obj文件

(非常重要)
如果在Blender中导入单独.obj文件,是不会有颜色信息的。因此,在.obj文件的同目录下,需要存在一个.mtl文件,这样导入的模型才会有颜色信息,Blener会自动识别.mtl
.obj文件保存的是模型的几何信息,.mtl保存的是模型的颜色信息,这两个文件shapnet数据集里都有。
如果不想要颜色,可以只单独导入.obj,同目录下不要放.mtl。


训练笔记Ubuntu——NeRF训练_第1张图片


训练笔记Ubuntu——NeRF训练_第2张图片

导入效果如下图所示
训练笔记Ubuntu——NeRF训练_第3张图片

2、开始渲染

打开文本编辑器
训练笔记Ubuntu——NeRF训练_第4张图片


训练笔记Ubuntu——NeRF训练_第5张图片
在文本编辑框输入以下代码:渲染代码http://t.csdn.cn/AXNNq

格式转换

经过渲染后,可以得到rgb、pose、intrinsics.txt这三个文件。现在,我们根据这三个文件转换成Blender的数据集格式,代码如下:

注意:pose存放的是相机相对世界坐标系下的位姿,而非相机自身坐标系。

  • 地址Root就是经过blender渲染获得的相机pose,这个代码的功能是将其转换为.json文件
import math
import numpy as np
import os
import json
#
Root = '/home/liuyuxing/render_data/car/8b177994dc29a707e363d824c14767b2_bule/models_4/data/test/pose/'
file_name_list = os.listdir(Root)
file_name_list.sort()
# print(file_name_list)
# 手动计算的相机水平视场角,计算公式为2*math.atan(400/(2*410.15625)),其中400为传感器尺寸,410.15625为焦距
# 如果原图像的尺寸为W * H,焦距为F,当将图像尺寸改为W/2 * H/2时,其对应的焦距应为2f
# print(2*math.atan(400/(2*820.312500)))
fov = 0.4782877997962207
jsontext = {'camera_angle_x': fov, 'frames': []}  # 定义一个字典

for j in range(len(file_name_list)):
    filename = Root + file_name_list[j]
    lines = open(filename).read().splitlines()
    if len(lines) == 1:
        pose = np.zeros((4, 4), dtype=np.float32)
        for i in range(16):
            pose[i // 4, i % 4] = lines[0].split(" ")[i]
        r = pose.squeeze()
        r = r.tolist()
    else:
        lines = [[x[0], x[1], x[2], x[3]] for x in (x.split(" ") for x in lines[:4])]
        r = np.asarray(lines).astype(np.float32).squeeze()
        r = r.tolist()

    jsontext['frames'].append({'file_path': './test/r_%0d' % (round(j)),
                               'transform_matrix': r})


jsondata = json.dumps(jsontext, indent=4, separators=(',', ': '))  # 生成json文件,后面的参数是格式控制
f = open('data/car_blue/transforms_test.json', 'w')
f.write(jsondata)
f.close()

报错记录

一、sudo apt-get update报错

出现问题

输入sudo apt-get update
报错:

Traceback (most recent call last):
  File "/usr/lib/cnf-update-db", line 8, in <module>
    from CommandNotFound.db.creator import DbCreator
ImportError: No module named CommandNotFound.db.creator
正在读取软件包列表... 完成
E: Problem executing scripts APT::Update::Post-Invoke-Success 'if /usr/bin/test -w /var/lib/command-not-found/ -a -e /usr/lib/cnf-update-db; then /usr/lib/cnf-update-db > /dev/null; fi'
E: Sub-process returned an error code

解决方案

1、设置python默认版本
2、修改cnf配置文件

二、dpkg: 警告: 无法找到软件包,E: Sub-process /usr/bin/dpkg returned an error code (1)

解决方案

三、sudo add-apt-repository 'XXX’报错

出现问题

报错:

Traceback (most recent call last):
  File "/usr/bin/add-apt-repository", line 12, in <module>
    from softwareproperties.SoftwareProperties import SoftwareProperties, shortcut_handler
ImportError: No module named softwareproperties.SoftwareProperties
解决方案:
vim /usr/bin/add-apt-repository

把#! /usr/bin/python3
改成
#! /usr/bin/python3.6

#! /usr/bin/python3.6 这里的3.6与python默认版本相同

你可能感兴趣的:(ubuntu,linux)