本章说明如何使用三维抓取点检测功能。
三维抓取点检测用于在三维场景中任意物对象面寻找合适的抓取点。检测结果可用于引导机械臂定位抓取点,并通过带吸盘的真空夹具拾取对象。
HALCON 提供了一个预训练模型,无需额外训练步骤即可直接进行推理。若需针对特定任务对模型进行微调,可将其重新训练于自定义应用领域。三维抓取点检测功能同样适用于训练过程中未见过的对象。因此无需提供目标对象的三维模型。该检测功能还能同时处理包含多种对象的场景、部分对象被遮挡的场景,以及存在杂乱三维数据的场景。
以下各节将描述通用推理工作流程以及重新训练过程。
本段落描述了如何使用三维抓取点检测模型,在任意对象表面确定合适的抓取点。应用场景可参考 HDevelop 示例文件
3d_gripping_point_detection_workflow.hdev。
读取预训练的三维抓取点检测模型,通过算子
设置模型参数,例如涉及使用的设备或图像尺寸等,使用算子
为每个三维场景生成一个数据字典 DLSample。可通过以下函数实现
gen_dl_samples_3d_gripping_point_detection,
其能够处理不同类型的三维数据。有关数据要求的更多信息,请参阅下文“数据”部分。
在推理前对数据进行预处理。为此,您可以使用以下函数
preprocess_dl_samples。
所需的预处理参数可以从模型生成,通过以下算子
create_dl_preprocess_param_from_model
或手动设置,使用以下函数
create_dl_preprocess_param。
请注意,数据预处理对推理结果具有显著影响。更多细节请参见下文“三维场景”部分。
应用模型,使用算子
对生成的 DLResult 执行后处理步骤,获取场景中的抓取点,使用函数
gen_dl_3d_gripping_points_and_poses。
可视化二维和三维结果,分别使用函数
dev_display_dl_data 或
dev_display_dl_3d_data。
本段落描述了如何使用自定义数据对三维抓取点检测模型进行重新训练和评估。
一个应用场景可以在 HDevelop 示例文件 3d_gripping_point_detection_training_workflow.hdev 中看到。
这一部分是关于如何对数据进行预处理。
您的数据集信息内容需要进行转换。 该操作通过以下函数实现:
read_dl_dataset_3d_gripping_point_detection.
由此创建了一个名为 DLDataset 的字典,它作为数据库存储了关于数据的所有必要信息。有关数据及其传输方式的更多信息,请参阅下文的“数据”部分以及
深度学习 / 模型 一章。
将字典
DLDataset 表示的数据集进行拆分。可通过以下函数实现:
split_dl_dataset.
网络对图像提出了若干要求。这些要求(例如图像尺寸和灰度值范围)可以获取,通过算子
为此,您需要先使用
现在您可以对数据集进行预处理。为此,您可以使用以下函数:
preprocess_dl_dataset.
要使用此过程,请指定预处理参数(例如图像尺寸)。将所有参数及其值存储在字典 DLPreprocessParam 中,可使用以下函数实现
create_dl_preprocess_param_from_model。
我们建议保存此字典 DLPreprocessParam,以便在后续推理阶段能够访问预处理参数值。
本部分阐述了通过重新训练对三维抓取点检测模型进行微调的过程。
设置训练参数并将其存储在字典 TrainParam 中。可通过以下函数实现
create_dl_train_param。
训练模型。这可以通过以下函数实现
train_dl_model。
该函数要求:
模型句柄 ,
DLModelHandle
包含数据信息的字典 DLDataset,
包含训练参数的字典 TrainParam。
在本部分中,我们将评估三维抓取点检测模型。
设置可能影响评估的模型参数。
评估可以便捷的完成,使用函数
evaluate_dl_model。
该函数需要一个包含评估参数的字典 GenParam。
字典 EvaluationResult 存储评估指标。要了解重新训练的模型相对于预训练模型的表现,可比较它们的评估值。若需理解不同的评估指标,请参阅“三维抓取点检测结果的评估指标”一节。
本节提供有关三维抓取点检测模型进行模型推理或训练与评估时所需提供的数据信息。
作为基础概念,该模型通过字典处理数据,即它从字典 DLSample 接收输入数据,并返回字典 DLResult。有关数据处理的更多信息,请参阅 深度学习 / 模型 一章。
三维抓取点检测处理三维场景,这些场景由常规的二维图像和深度信息组成。
为使这些三维数据符合网络输入要求,推理前需进行预处理步骤。具体预处理参数请参阅下文“特定预处理参数”章节。建议使用高分辨率三维传感器以确保数据质量达标。所需数据如下:
RGB 图像或
强度(灰度值)图像
X-图像(数值需从左至右递增)
Y-图像(数值需自上而下递增)
Z-图像(值需从传感器附近的点向远点递增;例如当数据以相机坐标系给出时即属此类情况)
| (1) | (2) | (3) |
二维映射(三通道图像)
为缩小搜索范围,可缩减 RGB / 强度图像的域。具体操作详见下文“特定预处理参数”部分。需注意 XYZ 图像与(可选)法线图像的域必须完全一致。此外,所有输入数据中仅有效像素可纳入使用域。
训练数据用于针对您的应用场景专门训练和评估网络。
为此所需的数据集包含三维场景及其对应的抓取表面信息(以分割图像形式呈现)。这些数据必须以模型可处理的形式提供。关于三维场景的要求,请参阅上文“三维场景”部分获取更多信息。
关于数据在 HALCON 中如何格式化以供深度学习模型使用,请参阅 深度学习 / 模型 一章。简而言之,字典 作为训练和评估流程所需信息的数据库。
DLDataset
的数据可通过
DLDatasetread_dl_dataset_3d_gripping_point_detection 进行读取,有关三维抓取点检测
所需内容的详细信息,请参阅 DLDatasetread_dl_dataset_3d_gripping_point_detection 的参考文档。
除三维场景外,还需提供分割图像作为真值。分割图像包含两种灰度值,用于标注场景中每个像素点是否为有效的抓取点。您可通过 MVTec 官网获取的 MVTec 深度学习工具(DLT)对数据进行标注。
| (1) | (2) |
确保整个标注区域为机器人提供稳固的抓取点。标注数据时请考虑以下方面:
抓取点需位于机器人手臂可无障碍接触的表面。
抓取点需位于机器人手臂吸盘可抓取的表面。因此需考虑对象的材质、形状及其相对于地面平面的表面倾斜度。
需考虑机器人吸盘尺寸。
需考虑吸盘吸附强度。
建议将抓取点标注于对象质心附近(尤其针对较重物品)。
抓取点不应设置在对象边缘。
抓取点不应设置在可见对象区域的边界处。
作为推理输出,模型将为每个样本返回一个名为 DLResult 的字典。该字典包含以下条目:
'gripping_map':二值图像,用于标注场景中每个像素点是否被模型预测为抓取点(像素值= 1.0)或非抓取点(0.0)。
'gripping_confidence':图像,包含场景中每个点原始未校准的置信度值。
对于三维抓取点检测,HALCON 支持以下评估指标:
mean_pro所有被标记为抓取类别的真实区域与预测结果的平均重叠度(Per-Region Overlap,每区域重叠度)。该评估指标的详细说明请参见下方参考文献。
mean_precision抓取类预测的平均像素级精确率。精确率指真正类占所有正类(真正类(TP)与假正类(FP))的比例。
mean_iou交并比(IoU)是真实像素与抓取类预测像素之间的交并比值。有关此评估指标的详细说明,请参阅 深度学习 / 语义分割与边缘提取。
gripping_point_precision精确率是指真正类占所有正类(真正类与假正类)的比例。
在此指标中,真正类指正确预测的抓取点,即预测点位于真实区域内。但每个区域仅有一个抓取点被视为真正类,同一区域内的额外预测均视为假正类。
gripping_point_recall召回率是指正确预测的抓取点数量与该抓取类别所有真实区域数量之比。
gripping_point_f_score为了用单一数值表示精确率和召回率,我们提供 F 分数——即精确率与召回率的调和平均值。
模型结果 DLResult 可通过
gen_dl_3d_gripping_points_and_poses 进行后处理以生成抓取点。此外,该函数可通过参数化实现:利用 min_area_size 参数剔除小尺寸抓取区域,或作为模板定义自定义选择标准。
该函数向字典 DLResult 中添加以下条目:
'gripping_points':包含场景中合适抓取点信息的字典元组:
'region':潜在抓取点的连通区域。确定的抓取点位于该区域内部。
'row':预处理后 RGB / 灰度图像中抓取点的行坐标。
'column':预处理后 RGB / 灰度图像中抓取点的列坐标。
'pose':抓取点的三维姿态(相对于 XYZ 图像坐标系,即相机坐标系),可供机器人使用。
在预处理步骤中,除了数据外,还需要将预处理参数传递给 preprocess_dl_samples 函数。其中两组预处理参数具有特别显著的影响:
'image_width','image_height':确定待推理图像的尺寸。
图像尺寸越大,分辨率越高,可检测到的抓取表面就越小。但应用程序的运行时间和内存消耗也会随之增加。
'min_z','max_z':根据 Z 轴图像确定三维点相对于相机的允许距离。
这些参数有助于减少错误的异常值,从而提高应用程序的稳健性。
通过缩小输入图像的域范围(使用 ),可以限制搜索区域。reduce_domainpreprocess_dl_samples 处理域的方式由预处理参数 'domain_handling' 设定。'domain_handling' 应确保仅将关键信息传递至网络进行推理。下图展示了预处理步骤后,不同 'domain_handling' 设置下缩减域的输入图像传递方式。
| (1) | (2) | (3) | (4) |
'full_domain'图像,(3)'keep_domain'图像,(4)'crop_domain' 图像。
Bergmann, P., Batzner, K., Fauser, M., Sattlegger, D. and Steger, C., 2021. The MVTec anomaly detection dataset: a comprehensive real-world dataset for unsupervised anomaly detection. International Journal of Computer Vision, 129(4), pp.1038-1059.