Press "Enter" to skip to content

HALCON 21.11:深度学习笔记—模型(8)

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

HALCON 21.11:深度学习笔记—模型(8)

 

HALCON 21.11.0.0 中,实现了深度学习方法。

 

本章阐述了 HALCON 中深度学习 (DL) 模型的一般概念和数据处理。

 

从概念上讲, HALCON 中的深度学习模型是深度神经网络的内部表示。

 

每个深度神经网络都有一个定义其功能的架构,即它可以用于的任务。

 

一个功能可以有多个可能的网络架构。

 

目前,以下功能的网络在 HALCON 中作为模型实现:

 

 

    1. 异常检测,参见 深度学习 / 异常检测 。

 

    1. 分类,参见 深度学习 / 分类 。

 

    1. 对象检测,参见 深度学习 / 对象检测 , 实例分割 。

 

    1. 语义分割,参见 深度学习 / 语义分割 , 边缘提取 。

 

 

每个功能都由其唯一的模型类型标识。

 

对于已实现的方法,您可以在相应章节中找到关于特定工作流、数据需求和验证措施的进一步信息。

 

深度学习的一般信息在深度学习一章中给出。

 

在本章中,您将了解 DL 模型需要和返回的数据以及这些数据是如何传输的。

 

Data (数据)

 

深度学习应用程序有不同类型的数据需要区分。粗略地说,这些是:带有可能注释的原始图像、以适合模型的方式进行预处理的数据以及输出数据。

 

在解释不同类型的数据和特定字典的条目之前,我们将了解一下数据是如何连接的。因此,符号和颜色指的是下面给出的示意图概述。

 

In brief, the data structure for training or evaluation starts with the raw images and their ground truth annotations (gray frames). With the read data the following dictionaries are created: A dictionary DLDataset (red), which serves as database and refers to a specific dictionary (yellow) for every input image. The dictionary DLSample (orange) contains the data for a sample in the way the network can process it. A batch of DLSample is handed to the model in DLSampleBatch. For evaluation, DLResultBatch is returned, a tuple of dictionaries DLResult (dark blue), one for every sample. They are needed to obtain the evaluation results EvaluationResults. For training, the training results (e.g., loss values) are returned in the dictionary DLTrainResult (light blue). 关于修改或创建字典的最重要步骤 :

 

 

    1. 读取原始数据 ( 符号:带箭头的纸 )

 

    1. 数据预处理 ( 符号:齿轮 )

 

    1. 训练 ( 符号:透明的弧形大脑 )

 

    1. 模型求值 ( 符号:图形 )

 

    1. 样品鉴定 ( 符号:放大镜 )

 

 

 

Schematic overview of the data structure during training and evaluation.

 

对于推理,不需要注释。因此,数据结构从原始图像 ( 灰色帧 ) 开始。字典 DLSample( 橙色 ) 以网络处理的方式包含了样本的数据。样本的结果在 DLResult 字典中返回 ( 深蓝色 ) 。关于修改或创建字典最重要的步骤:

 

 

    1. 读取原始数据 ( 符号 : 带箭头的纸 )

 

    1. 数据预处理 ( 符号:齿轮 )

 

    1. 推理 ( 符号:透明的弧形大脑 )

 

    1. 样品的鉴定 ( 符号:放大镜 )

 

 

 

Schematic overview of the data connection during inference

 

为了让模型处理数据,数据需要遵循特定的约定,即需要什幺以及如何将数据提供给模型。从上面图中可以看出, HALCON 使用字典传输数据。

 

下面我们将解释涉及到的字典、如何创建它们以及它们的条目。因此,我们根据创建它们的深度学习应用程序的主要步骤以及它们是作为输入数据还是输出数据对它们进行分组。下列缩略语标明该条目适用方法:

 

“ Any ”:任何方法

 

“ AD ”:异常检测

 

“ CL ”:分类

 

“ OD ”:目标检测。如条目只适用于特定 ‘instance_type’ ,则添加规范 ‘r1’: ‘rectangle1’ , ‘r2’: ‘rectangle2’ 。

 

“ SE ”:语义分割。

 

仅适用于某些方法的条目在相应章节中有更广泛的描述。

 

训练和评估输入数据

 

该数据集由图像和相应的信息组成。它们必须以模型能够处理的方式提供。关于图像要求,可以在下面的“图像”部分找到更多信息。

 

关于图像和数据集的信息在字典 DLDataset 中表示, DLDataset 充当一个数据库。更准确地说,它存储关于数据集和在关键样本下收集的单个样本的字典的一般信息。当需要实际的图像数据时,将为每个需要的图像创建一个字典 DLSample( 如果它已经存在,则读取它 ) 。这些字典之间的关系如下图所示。

 

 

Schematic illustration of the different dataset dictionaries used for training and evaluation. For visibility purpose only few entries are registered and BatchSize is set to three. In this example we have n samples. Thereof three samples are chosen randomly: i, j, and k. The corresponding dictionaries DLSample are created and joined in the tuple DLSampleBatch.

 

DLDataset

 

字典 DLDataset 充当一个数据库。它存储关于数据集的一般信息,并收集单个样本的字典。

 

因此,图标数据不包含在 DLDataset 中,而是包含到各个图像的路径。

 

字典 DLDataset 用于训练和评价程序。

 

这对于模型来说不是必需的,但是我们强烈建议创建它。

 

它的必要条目如下所述。

 

本字典是在使用 MVTec 深度学习工具标记数据时直接创建的。

 

或者,它是在使用以下过程之一读取数据时创建的:

 

 

    1. read_dl_dataset_anomaly( 异常检测 )

 

    1. read_dl_dataset_classification( 分类 )

 

    1. read_dl_dataset_from_coco (‘instance_type’ = ‘rectangle1’ 的对象检测 )

 

    1. read_dl_dataset_segmentation( 语义分割 )

 

 

为了使用这些程序,请参阅相应的程序文件中对数据的要求。

 

如果您以另一种方式创建 DLDataset ,它必须至少包含下面描述中没有标记数字的条目。

 

在数据集的预处理过程中,各个过程包括字典 DLDataset 的进一步条目。

 

根据模型类型,字典可以包含以下条目:

 

image_dir: Any

 

所有图像的公共基础路径。格式:字符串。

 

dlsample_dir: Any [1]

 

所有示例文件的公共基路径 ( 如果存在 ) 。格式:字符串。

 

class_names: Any

 

要区分的所有类的名称。格式:字符串元组。

 

class_ids: Any

 

所有要区分的类的 id( 范围 :0-65534) 。格式:整数元组。

 

preprocess_param: Any [1]

 

预处理期间使用的所有参数值。格式:字典。

 

samples: Any

 

样本描述的集合。格式:字典元组。

 

class_weights: CL, SE [1]

 

不同类别的权重。格式:实数元组。

 

anomaly_dir: AD

 

所有异常区域 ( 图像中表示异常的区域 ) 的公共基础路径。格式:字符串。

 

segmentation_dir: SE

 

所有分割图像的公共基础路径。格式:字符串。

 

该字典是在使用 MVTec 深度学习工具对数据进行标记时直接创建的。

 

它也可由上面提到的用于读取数据的函数创建。标记为 [1] 的条目在预处理过程添加。

 

samples

 

The DLDataset key samples gets a tuple of dictionaries as value, one for each sample in the dataset.

 

这些字典包含有关数据集的单个样本的信息。

 

根据模型类型,该字典可以包含以下条目:

 

image_file_name: Any

 

图像的文件名及其相对于 image_dir 的路径。格式:字符串。

 

image_id: Any

 

唯一的图像 ID( 编码格式 :UINT8) 。格式:整数。

 

split: Any [2]

 

指定分配的分割子集 (‘train’ , ‘validation’ , ‘test’) 。格式:字符串。

 

dlsample_file_name: Any [3]

 

对应字典 DLSample 的文件名及其相对于 dlsample_dir 的路径。格式:字符串。

 

anomaly_file_name: AD

 

可选的。带有 ground truth 注释的区域文件的路径 ( 相对于 anomaly_dir) 。格式:字符串。

 

anomaly_label: AD

 

图像级别上的 Ground Truth 异常标签 ( 以 class_names 的形式 ) 。格式:字符串。

 

image_label_id: CL

 

图像的 Ground truth 标签 ( 以 class_ids 的形式 ) 。格式:整数元组。

 

bbox_label_id: OD

 

边界框的 Ground Truth 标签 ( 以 class_ids 的形式 ) 。格式:整数元组。

 

bbox_row1: OD:r1 [4]

 

Ground Truth 边界框:左上角,行坐标。格式:实数元组。

 

bbox_col1: OD:r1 [4]

 

Ground Truth 边界框:左上角,列坐标。格式:实数元组。

 

bbox_row2: OD:r1 [4]

 

Ground Truth 边界框:右下角,行坐标。格式:实数元组。

 

bbox_col2: OD:r1 [4]

 

Ground Truth 边界框:右下角,列坐标。格式:实数元组。

 

coco_raw_annotations: OD:r1

 

可选的。对于这个图像中的每个 bbox_label_id ,它都包含一个包含所有原始 COCO 注释信息的字典。格式:字典元组。

 

bbox_row: OD:r2 [4]

 

Ground Truth 边界框:中心点,行坐标。格式:实数元组。

 

bbox_col: OD:r2 [4]

 

Ground Truth 边界框:中心点,列坐标。格式:实数元组。

 

bbox_phi: OD:r2 [4]

 

Ground Truth 边界框:角度。格式:实数元组。

 

bbox_length1: OD:r2 [4]

 

Ground Truth 边界框:边 1 的一半长度。格式:实数元组。

 

bbox_length2: OD:r2 [4]

 

Ground Truth 边界框:边 2 的一半长度。格式:实数元组。

 

mask: OD:is

 

Ground Truth 掩码标记实例区域。格式:区域元组。

 

segmentation_file_name: SE

 

Ground Truth 分割图像的文件名及其相对于 segmentation_dir 的路径。格式:字符串。

 

这些字典是 DLDataset 的一部分,因此它们是并发创建的。

 

一个例外是表中有标记的项:

 

[2]: 函数 split_dl_dataset 添加 split ;

 

[3]: 函数 preprocess_dl_samples 添加 dlsample_file_name ;

 

[4]: 已使用坐标:像素为中心,亚像素精确坐标。

 

DLSample

 

字典 DLSample 作为模型的输入。

 

对于一个批处理,它们作为元组 DLSampleBatch 的条目传递。它们是由函数 gen_dl_samples 为每个图像样本在 DLDataset 之外创建的。

 

如果使用标准函数 preprocess_dl_samples 进行预处理,则在其中自动创建它们。

 

注意,预处理步骤可能导致相应的 DLSample 字典的更新。

 

DLSample 包含预处理过的图像,以及在训练和评估时使用的所有 Ground Truth 注释。

 

根据模型类型,它可以有以下条目:

 

image: Any

 

输入图像。格式:字符串。

 

image_id: Any

 

唯一的图像 ID( 如 DLDataset) 。格式:整数。

 

anomaly_ground_truth: AD

 

异常图像或区域,从 anomaly_file_name 读取。格式:图像或区域。

 

anomaly_label: AD

 

图像级别上的 Ground Truth 异常标签 ( 以 class_names 的形式 ) 。格式:字符串。

 

anomaly_label_id: AD

 

Ground truth 异常在图像级别上的标签 ID ( 以 class_ids 的形式 ) 。格式:整数。

 

image_label_id: CL

 

图像的 Ground truth 标签 ( 以 class_ids 的形式 ) 。格式:整数元组。

 

bbox_label_id: OD

 

边界框内的图像部分的 Ground Truth ( 以 class_ids 的形式 ) 。格式:整数元组。

 

bbox_row1: OD:r1 [4]

 

Ground Truth 边界框:左上角,行坐标。格式:实数元组。

 

bbox_col1: OD:r1 [4]

 

Ground Truth 边界框:左上角,列坐标。格式:实数元组。

 

bbox_row2: OD:r1 [4]

 

Ground Truth 边界框:右下角,行坐标。格式:实数元组。

 

bbox_col2: OD:r1 [4]

 

Ground Truth 边界框:右下角,列坐标。格式:实数元组。

 

bbox_row: OD:r2 [4]

 

Ground Truth 边界框:中心点,行坐标。格式:实数元组。

 

bbox_col: OD:r2 [4]

 

Ground Truth 边界框:中心点,列坐标。格式:实数元组。

 

bbox_phi: OD:r2 [4]

 

Ground Truth 边界框:角度。格式:实数元组。

 

bbox_length1: OD:r2 [4]

 

Ground Truth 边界框:边 1 的一半长度。格式:实数元组。

 

bbox_length2: OD:r2 [4]

 

Ground Truth 边界框:边 2 的一半长度。格式:实数元组。

 

mask: OD:is

 

Ground Truth 掩码标记实例区域。

 

segmentation_image: SE

 

图像与 Ground Truth 分割,从 segmentation_file_name 读取。格式:图像。

 

weight_image: SE [5]

 

具有像素权重的图像。格式:图像。

 

这些字典是由函数 gen_dl_samples 创建。

 

一个例外是上面表中标记的条目 [5] :由函数 gen_dl_segmentation_weights 创建;

 

[4] :已使用坐标:像素为中心,亚像素精确坐标。

 

注意,如果需要存储这些 DLSample ,请使用函数 write_dl_samples 。您可以使用函数 read_dl_samples 来读取它们。

 

推理输入数据

 

待推理输入数据由裸图像组成。

 

必须以模型能够处理的方式提供它们。

 

关于图像需求,请在下面的“图像”小节中找到更多信息。

 

该模型通过字典 DLDataset 移交所有数据。对于推理,可以使用函数 gen_dl_samples_from_images 创建一个只包含图像的字典。这些字典可以一次传递一个,也可以在元组 DLSampleBatch 中传递。

 

训练输出数据

 

训练输出数据在字典 DLTrainResult 中给出。它的条目取决于模型,因此也取决于所使用的函数 ( 更多信息参见相应函数的文档 ) :

 

CL, OD, SE :

 

 

    1. 函数 train_dl_model_batch 返回。

 

    1. total_loss

 

    1. 包括在模型中的可能进一步的损失。

 

 

AD :

 

 

    1. 函数 train_dl_model_anomaly_dataset 返回。

 

    1. final_error

 

    1. final_epoch

 

 

推断和评估输出数据

 

作为函数 apply_dl_model 的输出,模型将为每个样本返回一个字典 DLResult 。

 

下图给出了一个说明。评估基于这些结果和注释。评估结果存储在 EvaluationResults 中。

 

 

Schematic illustration of the dictionaries serving as model input:

 

(1) Evaluation: DLSample includes the image as well as information about the image and its content. This data serves as basis for the evaluation. For visibility purpose BatchSize is set to three (containing the randomly chosen samples i,j,and k, see above) and only few entries are registered.

 

(2) Inference: DLSample contains only the image. These dictionaries can be passed one at a time or within a tuple.

 

根据模型类型的不同,字典 DLResult 可以有以下条目:

 

anomaly_image: AD

 

灰度值为分数的单通道图像,表示输入图像中对应像素属于异常的可能性有多大。格式:图像。

 

anomaly_score: AD

 

由 anomaly_image 计算图像级别的异常得分。格式:实数。

 

classification_class_ids: CL

 

根据置信值排序的图像的推断类 id 。格式:整数元组。

 

classification_class_names: CL

 

根据置信值排序的图像的推断类名。格式:字符串元组。

 

classification_confidences: CL

 

每类图像推理的置信值。格式:实数元组。

 

bbox_class_id: OD

 

边界框的推断类 ( 以 class_ids 的形式 ) 。格式:整数元组。

 

bbox_class_name: OD

 

边界框的推断类的名称。

 

bbox_confidence: OD

 

边界框推理的置信度值。格式:实数元组。

 

bbox_row1: OD:r1 [6]

 

推断边界框:左上角,行坐标。格式:实数元组。

 

bbox_col1: OD:r1 [6]

 

推断边界框:左上角,列坐标。格式:实数元组。

 

bbox_row2: OD:r1 [6]

 

推断边界框:右下角,行坐标。格式:实数元组。

 

bbox_col2: OD:r1 [6]

 

推断边界框:右下角,行坐标。格式:实数元组。

 

bbox_row: OD:r2 [6]

 

推断边界框:中心点,行坐标。格式:实数元组。

 

bbox_col: OD:r2 [6]

 

推断边界框:中心点,列坐标。格式:实数元组。

 

bbox_phi: OD:r2 [6]

 

推断边界框:角度。格式:实数元组。

 

bbox_length1: OD:r2 [6]

 

推断边界框:边 1 的一半长度。格式:实数元组。

 

bbox_length2: OD:r2 [6]

 

推断边界框:边 2 的一半长度。格式:实数元组。

 

mask: OD:is

 

推断掩码标记实例区域。

 

segmentation_image: SE

 

图像分割的结果。格式:图像。

 

segmentation_confidence: SE

 

图像与置信值的分割结果。格式:图像。

 

[6]: 已使用坐标:像素为中心,亚像素精确坐标。

 

对于输出值的进一步解释,我们参考各自方法的章节,如深度学习 / 语义分割 , 边缘提取。

 

Images

 

不管应用程序是什幺,网络都会对图像提出要求。

 

具体的值取决于网络本身,可以使用函数 get_dl_model_param 进行查询。

 

为了满足这些要求,您可能必须对您的图像进行预处理。

 

整个数据集的标准预处理,同时图像也在函数 preprocess_dl_samples 中实现。

 

在自定义预处理的情况下,这个函数提供了实现的指导。

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。