利用Blenderprc制作bin-picking 工业小零件数据集
BOP挑战赛(Benchmark for 6D Object Pose Estimation)https://bop.felk.cvut.cz/home/近年新增了工业小零件数据集,这类也是真实工业生产里常见的场景,近期准备针对一种零件产品制作数据集,真实数据集非常消耗人力、时间,因此想先通过合成数据生成数据,进行第一阶段训练,这里记录了怎么生成合成数据的技术手段。主要借鉴了BOP挑战赛中的XYZ-IBD数据集的方法进行合成,主要用的是基于blender的blenderPROC(blender针对BOP专门开发的套件)进行合成的。
一、环境搭建
1.安装Blenderproc与bop_toolkit
地址:https://github.com/DLR-RM/BlenderProc.git
https://github.com/thodan/bop_toolkit.git
可根据readme文件进行安装。后语:bop_toolkit这个是lib文件,后面在使用XYZ-IBD开源项目里面,就有一个文件夹是bop_toolkit_lib,后面装的小伙伴可以试试先不装bop_toolkit,看看项目代码能否跑起来,不行再装。
2.配置Blender内部python环境
blenderproc第一次运行时,会自动下载创建一个python虚拟环境(linux环境下:blender-4.2.1-linux-x64,版本不一定一样),这个python的环境其实是blender软件内部支持python代码设计的环境。后面要运行python脚本来合成数据需要一些第三方库,因此需要进行相关库的安装。注意一定要安装到这个环境里面,不要安装到你系统里的其他python环境里面。
可以通过指定该环境下的python解释器进行pip安装,也可以通过python代码安装(可参考https://blog.csdn.net/g2yyyy/article/details/113820119)
我用的是 指定python解释器进行pip安装,就算找到blenderproc第一次运行是下载的python虚拟环境里的python解释器路径,比如/home/xxx/blender/blender-4.2.1-linux-x64/4.2/python/bin/python3.11
1.确保安装有pip
/home/xxx/blender/blender-4.2.1-linux-x64/4.2/python/bin/python3.11 -m ensurepip2.升级pip
/home/xxx/blender/blender-4.2.1-linux-x64/4.2/python/bin/python3.11 pip install --upgrade pip3. install required packages
/home/xxx/blender/blender-4.2.1-linux-x64/4.2/python/bin/python3.11 pip install [报名]
#注:若没有换pip源可将此句改为
/home/xxx/blender/blender-4.2.1-linux-x64/4.2/python/bin/python3.11 pip install [报名] -i https://pypi.tuna.tsinghua.edu.cn/simple"
第三方库缺什么就装什么就好了
安装后可以进这个python环境下的/home/xxx/blender/blender-4.2.1-linux-x64/4.2/python/lib/python3.11/site-packages 查看是否正确安装。
二、合成数据
直接copy XYZ-IBD 的开源项目进行,只需进行工件三维模型文件和生成数据的路径进行修改就好了。整个项目文件很多example,XYZ-IBD的是在XYZ-IBD-main/examples/datasets/deep-tote文件夹里的文件,其他的是其他类型的数据bin picking。
我这次只是针对我自己的三维模型(ply格式)合成,项目文件中有15个不同的配置文件,对应的是XYZ-IBD 15种不同的工件,可以根据你自己的工件类型,在这15个不同工件中找个最接近的来改配置文件,我选的是第13种:config_photoneo_zhijiaobanjin13.yaml,需要改这个配置文件里面的三个路径,多少个场景,一个场景多少个角度图像,以及相机的内参和图片大小。其他的渲染参数,可以自行需要修改。
CC_TEXTURES_DIR: '背景文理文件路径',这个其实在我的合成里面不需加背景文理,可以不管
OUTPUT_DIR: '合成数据生成的路径'NUM_SCENES: 3 #生成多少个场景
NUM_CAMERAS_PER_SCENE: 5 #每个场景多少个角度图像以及模型的路径:
OBJECT:FILE: "/home/xxx/BinPickingProj/models/obj_000001.ply" 你自己的模型路径CAMERA:INTRINSICS:FX: 604.461FY: 604.6605PPX: 316.108PPY: 244.1495WIDTH: 640 #1440 #512 HEIGHT: 480 #1080 #512# RANDOM_PERCENT: 5
修改完配置文件就可以跑custom.py文件合成数据了,需要注意的是要切换到安装了blenderproc的虚拟环境下运行,并且注意cd到custom.py所在的文件夹路径下,运行指令。
### Generate the synthetic dataset for specific object
blenderproc run custom.py --config=config_photoneo_zhijiaobanjin13.yaml
### Post Process the synthetic dataset to BOP Format
blenderproc run gen_masks.py --config=config_photoneo_zhijiaobanjin13.yaml
三、合成的数据
合成的数据有以上文件,注意,annotations.json文件是要运行gen_annotations.py才生成的,不过这个文件其实没必要生成,其他几个文件都有需要的标签数据了。
放几张合成的图片
个人觉得要生成好的数据,还需要进行渲染参数的调整,图片大小最好根据你在现实中用的相机参数进行设置,包括相机内参。最后顺便放XYZ-IBD的开源代码。