HALCON 20.11.0.0中,实现了深度学习方法。
本章解释了如何使用基于深度学习的异常检测。
通过异常检测,我们想要检测图像是否包含异常。异常指的是偏离常规的、未知的东西。
异常检测的例子:输入图像的每个像素都被分配了一个值,该值表明该像素是异常的可能性有多大。
蠕虫不是模型在训练中看到的无虫苹果的一部分,因此它的像素得到了更高的分数。
一个异常检测模型学习没有异常的图像的共同特征。训练后的模型将推断出输入图像只包含学习过的特征的可能性有多大,还是该图像包含不同的东西。后一个被解释为异常。此推理结果作为灰度图像返回。其中的像素值表示输入图像像素中相应像素显示异常的可能性有多大。
一般工作流程
在本节中,我们描述了基于深度学习的异常检测任务的一般流程。
预处理数据
这一部分是关于如何预处理数据的。
模型训练
本节说明如何训练一个DL异常检测模型。
评估训练模型
本节说明如何评估异常检测模型。
推理新图像
本节将介绍DL异常检测模型的应用。对于一个训练过的模型,执行以下步骤:
数据
我们区分用于训练、评估和推断新图像的数据。
作为一个基本概念,模型通过字典处理数据,这意味着它从字典DLSample接收输入数据,并分别返回字典DLResult和DLTrainResult。关于数据处理的更多信息可以在深度学习/模型一章中找到。
类
在异常检测中有两类:
这些类适用于整个图像以及单个像素。
训练数据
该数据集仅包含无异常的图像和相应的信息。必须以模型能够处理它们的方式提供它们。关于图像要求,请在下面的“图像”部分找到更多信息。训练数据用于训练特定任务的模型。有了这些数据的帮助,模型可以学习没有异常的图像有什么共同的特征。
评估数据
这个数据集应该包含没有异常的图像,但它也可以包含有异常的图像。这个集合中的每个图像都需要一个ground truth标签image_label来指定图像的类(请参阅上面的小节)。这表示图像是否显示异常('nok')或不显示异常('ok')。
如果DLSample字典中包含一个anomaly_file_name 图像,那么也可以在像素级别上可视化地评估模型在发现异常方面的性能。在这个图像中,每个像素都表示类ID,输入图像中的对应像素显示异常(像素值>0)或否(像素值=0)。
Scheme of anomaly_file_name. For visibility, gray values are used to represent numbers.
(1) Input image.
(2) The corresponding anomaly_file_name providing the class annotations, 0: 'ok' (white and light gray), 2: 'nok' (dark gray).
图像
模型对图像提出要求,比如尺寸、灰度值范围和类型。具体的值取决于模型本身。有关不同模型的具体值,请参阅read_dl_model文档。对于一个读取模型,它们可以用get_dl_model_param查询。为了满足这些要求,您可能必须对您的图像进行预处理。整个样本(包括图像)的标准预处理在preprocess_dl_samples中实现。在定制预处理的情况下,这些函数提供了实现的指导。
模型输出
作为训练输出,操作符train_dl_model_anomaly_dataset将返回一个字典DLTrainResult,其中包含在训练期间接收到的最佳错误以及出现此错误的时间。
作为推理和评估输出,模型将为每个样本返回一个字典DLResult。对于异常检测,本词典包括以下额外条目:
anomaly_score:表示整个图像包含异常的可能性的分数。这个分数是基于在anomaly_image中给出的像素分数。
anomaly_image:一幅图像,其中每个像素的值表示输入图像中对应像素显示异常的可能性有多大(参见下面的插图)。这些值∈[0, 1]。
Scheme of anomaly_image. For visualization purpose, gray values are used to represent numbers.
(1) The anomaly_file_name providing the class annotations, 0: ‘ok’ (white and light gray), 2: ‘nok’ (dark gray)
(2)The corresponding anomaly_image.
特殊参数
对于异常检测模型,使用set_dl_model_param设置模型参数和超参数。模型参数在get_dl_model_param中有更详细的解释。由于训练是利用完整的数据集一次完成的,而不是按批处理的,某些参数,如“batch_size_multiplier”没有影响。
该模型返回分数,但不会将像素和图像分类为是否显示异常。对于这种分类,需要设定阈值,将像素或图像视为异常的最低分值。您可以使用函数compute_dl_anomaly_threshold估计可能的阈值。可以通过函数threshold_dl_anomaly_results来应用这些阈值。作为结果,该函数将以下(取决于阈值)项添加到示例的DLResult字典中:
Scheme of anomaly_region. For visualization purpose, gray values are used to represent numbers.
(1) The anomaly_image with the obtained pixel scores.
(2) The corresponding anomaly_region