HALCON 20.11:深度学习笔记(8)---模型

HALCON 20.11:深度学习笔记(8)---模型

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

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

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

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

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

目前,HALCON模型实现了用于以下功能的网络:

  1. 异常检测,参见深度学习/异常检测。
  2. 分类,参见深度学习/分类。
  3. 对象检测,参见深度学习/对象检测。
  4. 语义分割,参见深度学习/语义分割。

每个功能都由其独特的模型类型标识。

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

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

在本章中,您可以找到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). The most important steps concerning modifying or creating a dictionary:

  1. 读取原始数据(符号:带箭头的纸)
  2. 数据预处理(符号:齿轮)
  3. 训练(符号:透明的弧形大脑)
  4. 模型求值(符号:图形)
  5. 样品鉴定(符号:放大镜)

HALCON 20.11:深度学习笔记(8)---模型_第1张图片

Schematic overview of the data structure during training and evaluation.

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

  1. 读取原始数据(符号:带箭头的纸)
  2. 数据预处理(符号:齿轮)
  3. 推理(符号:透明的弧形大脑)
  4. 样品的鉴定(符号:放大镜)

HALCON 20.11:深度学习笔记(8)---模型_第2张图片

Schematic overview of the data connection during inference

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

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

Any”:任何方法

AD”:异常检测

CL”:分类

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

SE”:语义分割。

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

 

训练和评估输入数据

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

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

HALCON 20.11:深度学习笔记(8)---模型_第3张图片

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(异常检测)
  2. read_dl_dataset_classification(分类)
  3. read_dl_dataset_from_coco ('instance_type' = 'rectangle1'的对象检测)
  4. 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

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

image_label_id: CL

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

bbox_label_id: OD

边界框的基本事实标签(class_ids的形式)。格式:整数元组。

bbox_row1: OD:r1 [4]

地面真实边界框:左上角,行坐标。格式:实数元组。

bbox_col1: OD:r1 [4]

地面真实边界框:左上角,列坐标。格式:实数元组。

bbox_row2: OD:r1 [4]

地面真实边界框:右下角,行坐标。格式:实数元组。

bbox_col2: OD:r1 [4]

地面真实边界框:右下角,列坐标。格式:实数元组。

coco_raw_annotations: OD:r1

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

bbox_row: OD:r2 [4]

地面真实边界框:中心点,行坐标。格式:实数元组。

bbox_col: OD:r2 [4]

地面真实边界框:中心点,列坐标。格式:实数元组。

bbox_phi: OD:r2 [4]

地面真实边界框:角度。格式:实数元组。

bbox_length1: OD:r2 [4]

地面真实边界框:边1的一半长度。格式:实数元组。

bbox_length2: OD:r2 [4]

地面真实边界框:2的一半长度。格式:实数元组。

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_samplesDLDataset为每个图像样本创建的。

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

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

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

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

image: Any

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

image_id: Any

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

anomaly_ground_truth: AD

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

anomaly_label: AD

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

anomaly_label_id: AD

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

image_label_id: CL

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

bbox_label_id: OD

边界框内的图像部分的真实标签(class_ids的形式)。格式:整数元组。

bbox_row1: OD:r1 [4]

地面真实边界框:左上角,行坐标。格式:实数元组。

bbox_col1: OD:r1 [4]

地面真实边界框:左上角,列坐标。格式:实数元组。

bbox_row2: OD:r1 [4]

地面真实边界框:右下角,行坐标。格式:实数元组。

bbox_col2: OD:r1 [4]

地面真实边界框:右下角,列坐标。格式:实数元组。

bbox_row: OD:r2 [4]

地面真实边界框:中心点,行坐标。格式:实数元组。

bbox_col: OD:r2 [4]

地面真实边界框:中心点,列坐标。格式:实数元组。

bbox_phi: OD:r2 [4]

地面真实边界框:角度。格式:实数元组。

bbox_length1: OD:r2 [4]

地面真实边界框:边1的一半长度。格式:实数元组。

bbox_length2: OD:r2 [4]

地面真实边界框:2的一半长度。格式:实数元组。

segmentation_image: SE

图像与地面真值分割,从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返回。
  2. total_loss
  3. 包括在模型中的可能进一步的损失。

AD

  1. 函数train_dl_model_anomaly_dataset返回。
  2. final_error
  3. final_epoch

 

推断和评估输出数据

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

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

HALCON 20.11:深度学习笔记(8)---模型_第4张图片

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_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的一半长度。格式:实数元组。

segmentation_image: SE

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

segmentation_confidence: SE

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

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

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

 

Images

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

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

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

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

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

你可能感兴趣的:(深度学习,HALCON,深度学习,HALCON)