对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文件夹下面的文件如下图所示
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