用PVN3D训练自制LINEMOD数据集过程记录

本文介绍了如何制作自己的LINEMOD数据集,解决内存溢出问题,并指导如何将PVN3D模型调整以适应新的数据集。包括数据合并、参数修改、训练与测试结果分析。适合对位姿估计感兴趣的开发者加入讨论。

对6D位姿估计感兴趣的小伙伴可以加我,拉到位姿估计交流群

传送门

1.制作自己的LINEMOD数据集

(1)制作过程与步骤

制作数据集的过程参考:6d位姿估计—制作自己的LINEMOD数据集过程记录(有效的方法)

(2)合并数据集、生成test.txt与train.txt

数据制作过程中在获取帧变换(python compute_gt_poses.py LINEMOD/duck2
)步骤中,若录制的图片过多的话,内存会溢出,因此不建议一次性录制太多图片,本人在record2.py中,RECORD_LENGTH=50,每次录制大概能够生成一千零几张图片。

基于以上原因,我们需要录制多个数据集,并在后期需要将rgb、depth、mask图像以及gt.yml、info.yml进行合并,并生成train.txt和test.txt。合并程序的电脑不能联网,有需要的可以私信我。

2.将PVN3D的输入替换为自己的数据集

(1)将datasets/linemod/Linemod_preprocessed/data/09改为009,将自己的merge文件夹改为09;

(2)将JPEGImages改为rgb;

(3)在common.py中修改相机内参;并将第37行的mini_batch_size=32

(4)将./pnv3d/datasets/linemod/linvmod_dataset.py中的第188中的png改为jpg,是因为我的rgb图未jpg格式。而程序默认的格式的png。

注:因为在生成info.yml的时候depth_scale用的是0.001

3.训练

训练集大概有12000多张图片

cd pvn3d
python3 -m train.train_linemod_pvn3d --cls duck

4训练结果

(1)使用与训练集一同录制的数据集分割出来的测试效果

在这里插入图片描述
由图可以看出,基本是正确的。

(2)使用与训练集同一场景下录制的数据集进行测试

在这里插入图片描述
由图可以看出来,小了一号,是整个数据集进行测试结果都小一号,不知道为什么。

(3)使用不同场景下录制的数据集进行测试

在这里插入图片描述

对位姿估计感兴趣的小伙伴可以加群

传送门

制作 LineMod 数据集通常涉及多个步骤,包括数据采集、图像处理、3D 模型构建、标注和格式转换等。以下是基于现有资料总结的制作方法和步骤: ### 数据采集 首先需要采集 RGB 图像、深度图像以及物体的姿态信息。可以使用如 Realsense 系列的深度相机进行采集。采集过程中,建议使用 ObjectDatasetTools 工具包,该工具支持数据采集、处理和标注流程[^4]。确保采集的图像覆盖物体的不同角度和姿态,以提高数据集的多样性。 ### 3D 模型构建 在采集完图像之后,需要构建物体的 3D 模型。可以使用采集的深度图像生成点云数据,并将其转换为三角网格模型。通常,3D 模型以点云形式保存,每个点包含坐标、法线和颜色信息,格式如:`#_of_voxels size_of_voxel_in_cm x1_in_cm y1_in_cm z1_in_cm normal_x1 normal_y1 normal_z1 color_x1_normalized_to_1 color_y1_normalized_to_1 color_z1_normalized_to_1 …`[^2]。 ### 图像处理与标注 对采集的图像进行预处理,包括颜色校正、深度图像对齐等。之后,需要标注物体的真实姿态,包括旋转和平移参数。这些参数可以通过手动标注或自动标注工具获取。对于自动标注,可以使用 BlenderProc 等工具进行合成数据的生成,从而获得带有精确标注的图像[^1]。 ### 数据集格式转换 LineMod 数据集的格式通常包括颜色图像、深度图像、点云模型、物体姿态信息(旋转和平移矩阵)以及最大直径信息(记录在 `distance.txt` 文件中)。需要将采集和处理后的数据转换为 LineMod 标准格式。具体包括: - **颜色图像**:通常为 RGB 图像。 - **深度图像**:经过对齐处理的深度图像。 - **点云模型**:以 `.ply` 或其他格式存储的 3D 模型。 - **姿态信息**:以矩阵形式保存的旋转和平移信息。 - **最大直径**:记录在 `distance.txt` 文件中,用于归一化物体尺寸。 ### 使用工具和库 在制作过程中,可以使用以下工具和库来简化开发流程: - **ObjectDatasetTools**:用于数据采集和初步处理[^4]。 - **BlenderProc**:用于生成合成数据并进行标注[^1]。 - **Open3D**:用于点云处理和可视化。 - **OpenCV**:用于图像处理和姿态估计。 - **Trimesh**:用于 3D 模型的加载和处理。 ### 示例代码:生成点云数据 以下是一个简单的 Python 示例代码,展示如何从深度图像和相机内参生成点云数据: ```python import numpy as np import cv2 import open3d as o3d # 读取深度图像 depth_image = cv2.imread('depth.png', cv2.IMREAD_UNCHANGED) # 读取相机内参 fx, fy = 572.4114, 573.5704 # 相机焦距 cx, cy = 325.2611, 242.04899 # 光心坐标 # 生成点云 height, width = depth_image.shape points = [] for v in range(height): for u in range(width): z = depth_image[v, u] / 1000.0 # 深度值单位转换为米 if z == 0: continue x = (u - cx) * z / fx y = (v - cy) * z / fy points.append([x, y, z]) # 创建点云对象 pcd = o3d.geometry.PointCloud() pcd.points = o3d.utility.Vector3dVector(points) # 可视化点云 o3d.visualization.draw_geometries([pcd]) ``` ### 数据集验证与训练 制作完成后,可以使用 PVN3D 等模型进行训练和验证。训练时,可以使用如下命令启动训练流程: ```bash cd pvn3d python3 -m train.train_linemod_pvn3d --cls duck ``` 训练过程中,建议使用与训练集一同录制的数据集进行测试,以评估模型性能[^3]。 ###
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值