利用pvnet训练自制数据集

对6D位姿估计感兴趣的小伙伴可以加我,拉到位姿估计交流群,群里会不定期组织文献、代码和技术的视频交流分享

传送门

1.利用ODT方法生成数据集

在这里插入图片描述

2.在pvnet的data文件夹下新建一个文件夹,名为custom

在这里插入图片描述

3. 调整custom文件格式

(1)将1中的JPEGImage、mask、transforms、Gold6.ply、intrinsics.json复制到custom文件夹下;

(2)将JPEGImage文件夹名称修改为rgb

(3)将transforms文件夹名称改为pose

(4) ① 新建diameter.txt文件
	  ② 跑diameter.py文件,得到diameter,并把这个数值填入diameter.txt中
	
(5) ① 新建camera.txt文件
	  ② 把intrinsics.json中相机内参复制到camera.txt中

(6)把1中的Gold6.ply改为model.ply,注意用meshlab打开一下,观察目标是不是在坐标系中心,同时打开作者提供的小猫的ply文件,对比一下模型的尺度是否在一个数量级上

(7)此时custom文件夹下面的文件如下图所示

原intrinsics.json文件

在这里插入图片描述

custom文件夹内容

diameter.py

from plyfile import PlyData
import os
import numpy as np
model_path = os.path.join('./Linemod_preprocessed/models/model.ply')
ply = PlyData.read(model_path)
data = ply.elements[0].data
x = data['x']
y = data['y']
z = data['z']
x_size = np.max(x)-np.min(x)
y_size = np.max(y)-np.min(y)
z_size = np.max(z)-np.min(z)

print("Diameter:", np.sqrt(x_size**2 + y_size**2 + z_size**2))

4.修改handel_custom_dataset.py文件参数

(1)将pose_path = os.path.join(pose_dir, "pose{}.npy .format(ind))修改为pose_path = os.path.join(pose_dir, "{}.npy .format(ind))
(2)在pose = np.load(pose_path)下面一行添加
	  pose = pose[:3,:]   # 因为pose中的最后一行为0 0 0 1,pvnet代码中只需要输入前三行

在这里插入图片描述
在这里插入图片描述

5.修改helper.py中的路径,并运行,查看位姿是否正确

6.运行README.md中Training on the custom object下的如下代码,生成fps.txt和train.json文件

python run --type custom

在这里插入图片描述

7. 运行README.md中Training on the custom object下的

python train_net.py --cfg file configs/custom.yaml train.batch size 4

在这里插入图片描述

8.训练的权重存储在data/model/pnvet/custom文件夹下

在这里插入图片描述

扫描二维码关注公众号,回复: 17194672 查看本文章

9.通过运行运行README.md中Training on the custom object中如下代码可以查看训练结果

python run.py --type visualize--cfg_file configs/custom.yaml

在这里插入图片描述

10.需要注意的是pvnet中的测试集和训练集是一个数据集,所以在测试的时候,还需要重写输入文件。

猜你喜欢

转载自blog.csdn.net/weixin_41837701/article/details/134764284