【6D位姿估计】【深度学习】Gen6D个人数据集制作(详细)

在上一篇文章,介绍了Gen6d的环境配置和个人数据集制作,当时了解的不多做出来的效果很差,过程也不够详细,所以这一次详细介绍制作个人数据集。

Gen6d环境配置

个人数据集制作

1、首先还是自己拍一段视频,放在 ..\Gen6D\data\custom\video路径下。

拍摄视频的目标对象一定是要静止的,假如目标对象没有纹理,那背景的纹理必须要足够丰富。

 2、在Gen6d文件夹下打开终端

3、激活虚拟环境,将视频分割为大小一致的图片

# 激活虚拟环境
conda activate xxx
#eg: conda activate torch1.10
# 分割视频
# --transpose 解决图片颠倒
python prepare.py --action video2image --input data/custom/video/XXX.mp4 --output data/custom/XXX/images --frame_inter 10 --image_size 960 --transpose
# eg:python prepare.py --action video2image --input data/custom/video/duanzi.mp4 --output data/custom/duanzi/images --frame_inter 10 --image_size 960 --transpose

4、恢复相机姿势

# colmap假如没有添加环境变量就需要colmap.bat的完整路径(原作者这里写的是colmap.exe的路径,但是运行会报错,打不开colmap)
python prepare.py --action sfm --database_name custom/XXX--colmap <colmap.bat路径地址>
# eg:python prepare.py --action sfm --database_name custom/duanzi --colmap D:\DeepStudy\COLMAP\colmap.bat

 生成了colmap文件夹

5、剪裁点云,使用CloudCompare打开Gen6D/data/custom/duanzi/colmap/pointcloud.ply

鼠标左键旋转视角,右键拖动界面

剪裁

将裁剪后的目标对象点云导出:需要取消remaining部分,只选择segmented,用binary格式保存在Gen6D/data/custom/duanzi/目录下,命名为object_point_cloud.ply(名字不要修改)。

6、指定目标对象的X正方向和Z正方向

使用CloudCompar打开刚保存的Gen6D/data/custom/duanzi/object_point_cloud.ply。

1)Z正方向的向量:拟合一个平面,其法线作为Z正方向的向量。

首先在放置物体的平面剪切点云

7、选中剪切之后的segmented,在点击Tools->Fit->Plane

勾选 Show normal vector,发现Z轴与放置平面垂直

 将法线可视化并使用法线作为 Z 方向

法线与 Z+ 方向(向上)相反,因此对象的 Z+ 方向为 (-0.348853 0.251658 -0.902757)

8、为了获得对象的前进方向 (x+),我们使用点拾取工具选择一个方向

 这个对象的前进方向是 (-0.492886 1.280589 0.580798)

在Gen6D/data/custom/duanzi/目录下创建meta_info.txt将X正方向和Z正方向记录下来

9、生成识别后的视频

# 假如没有添加环境变量就需要ffmpeg.exe的完整路径
# --transpose 解决图片颠倒
python predict.py --cfg configs/gen6d_pretrain.yaml --database custom/XXX --video data/custom/video/XXX.mp4 --resolution 960 --transpose --output data/custom/XXX/test --ffmpeg ffmpeg.exe
# eg: python predict.py --cfg configs/gen6d_pretrain.yaml --database custom/duanzi --video data/custom/video/duanzi.mp4 --resolution 960 --transpose --output data/custom/duanzi/test --ffmpeg D:/DeepStudy/ffmpeg/bin/ffmpeg.exe

搞来搞去感觉效果一般,最后看看原作者的。

issue

我在nvidia app将显示改成Nvidia GPU感觉生成点云处理数据变慢了。

### 制作6D位姿估计数据集的方法 制作6D位姿估计数据集通常涉及以下几个方面的工作: #### 数据准备 为了构建一个完整的6D位姿估计数据集,需要准备好彩色图像和对应的深度图像。这些图像应当存放在特定的文件夹结构中以便后续处理。具体来说,彩色图像应放置于`JPEGImages`文件夹中,并以`.jpg`格式命名;而深度图像则需存储到名为`depth`的文件夹里,采用`.png`作为扩展名[^1]。 #### 文件命名规则 对于每一对匹配好的彩色图片及其对应深度图,它们的名字应该保持一致但区分类型的方式呈现出来。例如,可以依次命名为0.jpg与0.png、1.jpg与1.png直至达到预定数量如600组为止即600.jpg配对至600.png[^1]。 #### 相机参数配置 除了图像本身之外,在序列目录之下还需要建立一个叫做“intrinsics.json”的文档来记录摄像设备的相关属性设置情况。“intrinsics.json”内部包含了诸如焦距(fx,fy),像素中心位置(ppx,ppy),以及分辨率(width,height)等重要信息。下面是一个样例内容展示: ```json { "fx": 614.4744262695312, "fy": 614.4745483398438, "height": 480, "width": 640, "ppy": 233.29214477539062, "ppx": 308.8282470703125, "ID": "620201000292" } ``` 此部分设定直接影响到最后模型训练效果的好坏程度因此务必精确无误地完成填写工作[^1]。 #### 训练验证划分 当所有原始素材都整理完毕之后就可以考虑如何分配测试样本同学习资料之间的比例关系了。这里给出了一段简单的Python代码用来随机打乱编号列表并将之分割成两份分别代表训练集合还有检验用途的数据子集。 ```python import random numbers = list(range(600)) random.shuffle(numbers) test_size = int(len(numbers) * 0.3) test_numbers = numbers[:test_size] train_numbers = numbers[test_size:] with open('test.txt', 'w') as f: for n in test_numbers: f.write('{:04d}\n'.format(n)) with open('train.txt', 'w') as f: for n in train_numbers: f.write('{:04d}\n'.format(n)) ``` 通过这种方式能够轻松实现自动化管理各类实验所需的输入源材料清单[^2]。 ### 工具推荐 针对希望简化整个流程操作的朋友而言,ObjectDatasetTools 是一款非常实用的选择之一它可以帮助用户快速搭建属于自己的 LINEMOD 类型数据库项目工程环境从而更加专注于核心算法研究开发环节当中去而不必花费过多精力关注琐碎细节层面的东西[^1]。
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值