halcon深度学习: 分类

分类


本章说明了如何在训练和推理阶段使用基于深度学习的分类。

基于深度学习的分类是一种方法,其中图像获得一组分配的置信度值。这些置信度值指示图像属于每个区别类别的可能性。因此,如果仅考虑最高预测,则分类意味着将给定类别集中的特定类别分配给图像。下面的模式对此进行了说明。

orange:0.03apple:0.85lemon:0.12
一个可能的分类示例,其中网络区分三个类别。输入图像获得为三个不同类别中的每个类别分配的置信度值:“苹果” 0.85,“柠檬” 0.03和“橙色” 0.12。最高预测告诉我们,该图像被识别为“苹果”。

为了执行您的特定任务,从而将数据分类为您要区分的类,必须对分类器进行相应的训练。在HALCON中,我们使用一种称为转移学习的技术(另请参阅“深度学习”一章)。因此,我们提供了经过预训练的网络,这些网络代表了已针对大量带标签图像数据进行训练的分类器。这些分类器已经过培训和测试,可以很好地完成工业图像分类任务。这些分类器之一已经接受了一般分类的培训,现在可以针对您的特定任务进行重新训练。为此,分类器需要知道,要区分哪些类以及此类示例的外观。这由您的数据集表示,即具有相应地面真相标签的图像。有关数据要求的更多信息,请参见“分类数据”部分。

有关应用深度学习分类的特定系统要求,请参阅HALCON “Installation Guide”

操作员工作流程

请查看HDevelop示例classify_fruit_deep_learning.hdev ,以获取简短简要的概述以及 classify_pill_defects_deep_learning.hdev更复杂的工作流程(均可在参考资料 中找到 examples/hdevelop/Deep-Learning/Classification/)。它们为如何将不同的部分一起使用提供了很好的指导。

  • 准备网络和数据


      1. 首先,必须使用操作员读取预训练的网络

        在使用保存了自己的训练过的网络之后,也可以使用该运算符。 write_dl_classifier

      2. 要读取数据以进行深度学习分类训练,请执行以下步骤

        可用。使用此过程,您可以获取图像文件路径及其相应标签(地面真相标签)的列表以及至少列出的图像所属的唯一类的列表。

      3. 网络将对图像施加一些要求,例如图像尺寸和灰度值范围。默认值在中列出这些是对网络进行预训练的值。网络体系结构允许使用不同的图像尺寸,可以使用来设置图像尺寸,但是根据网络的不同,可能需要进行重新培训。实际设置的值可以用 read_dl_classifierset_dl_classifier_param

        该过程preprocess_dl_classifier_images为如何实施这样的预处理阶段提供了很好的指导。我们建议在开始分类器训练之前对用于训练的所有图像进行预处理和存储,因为这样可以大大加快训练速度。

      4. 接下来,我们建议将数据集分为三个不同的数据集,用于训练,验证和测试,请参阅“深度学习”一章中的“数据”部分这可以使用以下步骤来实现

      5. 您需要指定您要与分类器区分开(在使用之前确定)。为此,操作员 'classes'read_dl_classifier_data_set

        可用。

        该运算符还可用于设置超参数,这对于训练很重要,例如和 有关详细说明,请参阅“深度学习”一章和 的文档 。 'batch_size''learning_rate'set_dl_classifier_param

    • 培训网络并评估培训进度

    • 建立网络并准备好数据后,就可以为您的特定任务训练分类器了。

        1. 设置用于与操作员一起训练的超参数

          有关可能的超参数的概述,请参见的文档 其他解释可以在“深度学习”一章中找到。 set_dl_classifier_param

        2. 训练分类器的操作员

          可用。中间训练结果存储在输出句柄中。

          顾名思义,此运算符可一次处理一批数据(图像和地面真相标签)。我们遍历训练数据,以便依次使用训练分类器您可以多次重复此过程,并反复进行许多次训练,直到对训练结果感到满意为止。 train_dl_classifier_batchtrain_dl_classifier_batch

        3. 要知道分类器学习新任务的程度,程序

          提供。有了它,您可以绘制出训练期间的分类错误。要计算可视化所需的输入,请执行以下步骤

          可用。使用它们,您可以减少用于此分类验证的图像数量,将分类器应用于所选数据,并计算例如top-1错误。看一下HDevelop示例 classify_pill_defects_deep_learning.hdev,看看如何将这些过程一起使用。

      • 应用和评估最终分类器

      • 您的分类器已针对您的任务进行了培训,随时可以应用。但是在实际环境中部署之前,您应该根据测试数据评估分类器的性能。

        • gen_confusion_matrix

        • gen_interactive_confusion_matrix

        • get_dl_classifier_image_results

        • dev_display_dl_classifier_heatmap

        • apply_dl_classifier

          1. 要将分类器应用于包含任意数量图像的集合,请使用运算符

            该运算符的运行时间取决于给定映像集所需的批处理数量。

            结果返回到句柄中。

            要检索预测的类别和置信度,请使用运算符

          2. 现在该评估这些结果了。分类器的性能可以在训练期间进行评估 evaluate_dl_classifier

            为了可视化和分析分类器质量,混淆矩阵是一个有用的工具(请参阅下面的说明)。为此,您可以使用以下步骤

            交互式过程使您可以选择特定类别的示例,但不适用于导出的代码。

            此外,将分类器应用于一组数据后,您可以使用以下步骤

            根据某些标准(例如错误分类的图像)显示和返回图像。然后,您可能需要将此输入用于过程

            显示输入图像的热图,您可以使用该热图分析图像的哪些区域与分类结果相关。

        • 推理阶段

        • 对分类器进行训练并对其性能感到满意时,可以使用它对新图像进行分类。为此,您只需根据网络要求对图像进行预处理(即,与用于训练分类器的数据集的方法相同),然后使用

        分类数据

        我们区分用于训练的数据和用于推理的数据。后一种由裸露的图像组成。但是对于前一种,您已经知道图像属于哪一类,并在相应的标签上提供此信息。

        训练数据用于训练您的特定任务的分类器。借助这些数据,分类器可以了解要区分哪些类以及它们的代表如何。在分类中,图像被整体分类。因此,训练数据由图像及其地面真相标签组成,因此您说该图像属于该类。请注意,图像应尽可能代表您的任务。有多种可能的方式,如何存储和检索地面真相标签。该过程read_dl_classifier_data_set支持图像的地面真理标签的以下来源:

        • 包含图像的最后一个文件夹名称

        • 文件名。

        为了训练分类器,我们使用了一种称为转移学习的技术(请参阅“深度学习”一章)。为此,您需要较少的资源,但仍然需要一组合适的数据,每类通常大约数百到数千。虽然通常在较大的数据集上进行训练时网络应该更可靠,但是训练所需的数据量还取决于任务的复杂性。您还希望有足够的训练数据将其分为三个子集,最好是独立且分布均匀的三个子集,请参阅“深度学习”一章中的“数据”部分

        无论何种应用,网络都会对图像提出有关图像尺寸,灰度值范围和类型的要求。具体值取决于网络本身,可以使用查询 您可以找到有关如何通过该过程实现这样的预处理阶段的指南。 get_dl_classifier_parampreprocess_dl_classifier_images

        解释分类结果

        在对图像进行分类时,我们获得了一组置信度值,告诉我们图像对每个类别的亲和力。也可以计算以下值。

        • 混淆矩阵,精度,召回率和F分数

        • 在分类中,将整个图像分类。结果,混淆矩阵的实例是图像。有关混淆矩阵的说明,请参阅“深度学习”一章 

          您可以生成的程序援助混淆矩阵 gen_confusion_matrix和 gen_interactive_confusion_matrix因此,交互式过程使您可以选择特定类别的示例,但不适用于导出的代码。

          从这样的混淆矩阵中,您可以得出各种值。精度是所有正确的预测阳性值与所有预测的阳性率(正确和错误的阳性值)的比例。因此,它衡量了多少积极预测确实属于所选类别。

          召回率也称为“真实阳性率”,是所有正确的预测阳性率与所有真实阳性率的比例。因此,它衡量了正确地预测了属于所选类别的多少个样本为阳性。

          召回率高但精度低的分类器会找到大多数否定词(因此属于类成员),但这样做的代价是还要将许多否定词归类为该类成员。相反,具有高精度但召回率低的分类器恰恰相反,仅将少量样本分类为阳性,但是大多数预测是正确的。具有高精度和高查全率的理想分类器将以高精度将许多样本分类为阳性。

          为了用单个数字表示,我们计算F1分数,即精度和召回率的谐波平均值。因此,它是分类器准确性的度量。

          对于深度学习中显示的混淆矩阵的示例,对于 'apple'类,我们得到的值精度为:1.00(= 68 /(68 + 0 + 0)),回忆:0.74(= 68 /(68 + 21 + 3) ))和F1-分数:0.85(= 2 *(1.00 * 0.74)/(1.00 + 0.74))。


        • apply_dl_classifier

        • 使用基于深度学习的分类器来推断一组图像的类从属关系。


        本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:

        发表评论:

        ◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

        会员中心
        搜索
        «    2024年4月    »
        1234567
        891011121314
        15161718192021
        22232425262728
        2930
        网站分类
        标签列表
        最新留言
          热门文章 | 热评文章 | 随机文章
        文章归档
        友情链接
        • 订阅本站的 RSS 2.0 新闻聚合
        • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
        • 点击查阅微信群二维码
        • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
        • 扫描加站长微信:站长微信:abc496103864
        • 扫描加站长QQ:
        • 扫描赞赏本站:
        • 留言板:

        Powered By Z-BlogPHP 1.7.2

        Copyright Your skcircle.com Rights Reserved.

        鄂ICP备18008319号


        站长QQ:496103864 微信:abc496103864