HALCON 20.11:深度学习笔记(10)---分类

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

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

基于深度学习的分类是一种对一幅图像分配一组置信值的方法。这些置信度值表明图像属于每个可分辨类的可能性有多大。如果我们只考虑顶部的预测,分类就是在给定的类集合中指定一个特定的类给一幅图像。下面的模式说明了这一点。

分类示例: 网络区分三个类别. 输入图像获得三个可分辨类的置信值:“apple”0.85、“lemon”0.03和“orange”0.12. 上面的预测告诉我们,这张照片被识别为“苹果”

为了完成特定的任务,为了将数据分类到您想要区分的类中,分类器必须进行相应的训练。在HALCON中,我们使用了一种称为迁移学习的技术(参见深度学习一章)。因此,我们提供了预先训练的网络代表分类器,这些分类器已经训练了大量的标记图像数据。这些分类器经过训练和测试,在工业图像分类任务中表现良好。这些分类器已经为一般分类训练过,现在为您的特定任务重新训练。为此,分类器需要知道要区分哪些类以及这些示例是什么样子的。这是由您的数据集表示的,也就是说,您的图像与相应的ground truth标签。关于数据需求的更多信息可以在“数据”一节中找到。

在HALCON中,深度学习分类是在更通用的深度学习模型中实现的。关于后者的更多信息,请参见深度学习/模型一章。为了应用深度学习,具体的系统要求请参阅HALCON《安装指南》。

以下各节将介绍分类所需的一般工作流程,所涉及的数据和参数的相关信息,以及评价措施的解释。

一般工作流程

在本节中,我们描述了基于深度学习的分类任务的一般工作流程。该算法分为数据预处理、模型训练、训练模型评价和推理新图像四个部分。因此,我们假设,您的数据集已经标记,参见下面的“数据”部分。参看HDevelop示例系列classify_pill_defects_deep_learning的应用程序。

预处理数据

这一部分是关于如何预处理数据的。在HDevelop示例classify_pill_defects_deep_learning_1_preprocess.hdev中也显示了单个步骤。

  1. 通过函数read_dl_dataset_classification读取您的训练数据集,确定图像需要传输的信息是什么,并因此创建了字典DLDataset,它充当数据库并存储关于您的数据的所有必要信息。要了解更多关于数据及其传输方式的信息,请参阅下面的“数据”一节和深度学习/模型一章。
  2. 使用函数split_dl_dataset拆分字典DLDataset表示的数据集。产生的分割将在DLDataset的每个样例条目的键split上保存。
  3. 使用函数read_dl_model在预先训练好的网络中读取数据。同样,当您用write_dl_model保存网络之后,希望读取自己训练过的网络时,也可以使用该操作符。网络会对图像提出若干要求,如图像的尺寸和灰度值的范围。默认值在read_dl_model中列出。这些都是网络预先训练出来的值。网络架构允许不同的图像尺寸,可以用set_dl_model_param设置,但根据网络的不同,更改可能需要重新训练网络。可以通过函数get_dl_model_param检索实际设置的值。
  4. 现在可以使用函数preprocess_dl_dataset对数据集进行预处理了。要使用这个函数,请指定预处理参数,如图像的大小。可以使用函数create_dl_preprocess_param将所有参数及其值存储在DLPreprocessParam字典中。我们建议保存这个字典DLPreprocessParam,以便稍后在推理阶段访问预处理参数值。

训练模型

这一部分是关于如何训练分类器的。在HDevelop示例classify_pill_defects_deep_learning_2_train.hdev中也显示了单个步骤。

1. 设置训练参数并将它们存储在字典'TrainingParam'中。这些参数包括:

  1. 超参数,请参阅深度学习一章。
  2. 用于可能的数据扩充的参数(可选)。
  3. 训练期间评估的参数。
  4. 训练结果可视化的参数。
  5. 序列化参数。

这可以使用函数create_dl_train_param来完成。

2. 训练模型。这可以使用函数train_dl_model来完成。

这个过程需要:

  1. 模型处理DLModelHandle
  2. 包含DLDataset数据信息的字典
  3. 带有训练参数'TrainParam'的字典
  4. 培训将在多少个epochs进行。

当使用train_dl_model函数时,可以直观地看到总损失和可选的评价措施。

评估训练模型

在这一部分中,我们评估训练好的分类器。在HDevelop示例classify_pill_defects_deep_learning_3_evaluate.hdev中也显示了单个步骤。

  1. 使用函数evaluate_dl_model可方便地评价模型。
  2. 字典评估结果包含要求的评估措施。您可以使用函数dev_display_classification_evaluation可视化您的评估结果。
  3. 可以使用函数gen_dl_model_heatmap或gen_dl_model_classification_heatmap为使用的指定样本生成一个热图。

推理新图像

本部分介绍了基于深度学习的分类模型的应用。在HDevelop示例classify_pill_defects_deep_learning_4_helper .hdev中也显示了单个步骤。

  1. 使用函数set_dl_model_param设置诸如'batch_size'等参数。
  2. 使用函数gen_dl_samples_from_images为每个图像生成一个数据字典DLSample。
  3. 建议使用函数preprocess_dl_samples对图像进行预处理,就像对训练做的那样。当您在预处理步骤中保存DLPreprocessParam字典时,您可以直接使用它作为输入来指定所有参数值。
  4. 使用函数apply_dl_model应用模型。
  5. 从字典'DLResultBatch'中检索结果。

数据

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

作为一个基本概念,模型通过字典处理数据,这意味着它通过字典DLSample接收输入数据,并分别返回字典DLResult和DLTrainResult。关于数据处理的更多信息可以在深度学习/模型一章中找到。

用于训练和评估的数据

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

训练数据用于为您的特定任务训练和评估网络。有了这些数据的帮助,分类器可以知道哪些类要区分,以及它们的代表是什么样子的。在分类中,将图像作为一个整体进行分类。因此,训练数据由图像及其ground truth标签组成,也就是您所说的该图像属于的类。请注意,图像应该尽可能地代表您的任务。有不同的方法来存储和检索这些信息。在深度学习/模型一章中解释了如何在HALCON中为DL模型格式化数据。简而言之,字典DLDataset可作为训练和评价函数所需信息的数据库。read_dl_dataset_classification过程支持图像的地面真值标签的以下来源:

  1. 包含图像的最后一个目录名;
  2. 文件名字。

为了训练分类器,我们使用一种叫做迁移学习的技术(参见深度学习一章)。为此,您需要较少的资源,但仍然需要一组合适的数据。一般来说,在较大的数据集上进行训练时,网络应该更加可靠,但训练所需的数据量也取决于任务的复杂性。您还需要足够的训练数据来将其划分为三个子集,用于训练、验证和测试网络。这些子集最好是独立的、同分布的,请参阅深度学习一章中的“数据”一节。

图像

不管应用程序如何,网络都对图像提出了要求,例如图像的尺寸。具体的值取决于网络本身,可以用get_dl_model_param查询。为了满足这些要求,您可能必须对您的图像进行预处理。对于单个样本,标准预处理分别在preprocess_dl_dataset和preprocess_dl_samples中实现。在定制预处理的情况下,这些过程提供了实现的指导。

网络输出

作为训练输出,操作符将返回一个字典DLTrainResult,其中包含总损失的当前值以及模型中包含的所有其他损失的值。

作为推理和评估输出,网络将为每个样本返回一个字典DLResult。为了分类,本字典将为每个输入图像包含一个元组,该元组包含每个按递减顺序区分的类的置信值,以及第二个元组,该元组包含相应的类id。

解释分类结果

当我们对一幅图像进行分类时,我们得到了一组置信值,告诉我们该图像与每个类的亲缘关系。也可以计算下列值。

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

分类是对整个图像进行分类。因此,混淆矩阵的实例是图像。关于混淆矩阵的解释,请参阅深度学习章节。

您可以借助函数gen_confusion_matrix和gen_interactive_confusion_matrix生成混淆矩阵。交互过程使您能够选择特定类别的示例,但它不能用于导出的代码。

从这样一个混淆矩阵中,你可以得出各种不同的值。精度是所有正确预测阳性与所有预测阳性(真阳性和假阳性)的比例。因此,它是一种衡量有多少积极预测真正属于所选类别的方法。

召回率,也称为“真实阳性率”,是所有正确预测阳性结果与所有真实阳性结果的比例。因此,它是一种度量有多少属于所选类别的样本被正确预测为阳性的方法。

具有高召回率但低精度的分类器会找到大多数正数成员(即类成员),但代价是还要将许多负数分类为类成员。一个精度高但召回率低的分类器正好相反,只将少数样本分类为阳性,但这些预测大多数是正确的。一个理想的高精度、高召回率的分类器可以将很多样本分类为正确率高的样本。

为了用一个数字来表示这一点,我们计算f1得分、精度和召回率的调和平均值。因此,它是分类器准确性的度量。

以深度学习中显示的混淆矩阵为例,我们得到类‘apple’的值precision: 1.00 (= 68/(68+0+0)), recall: 0.74 (= 68/(68+21+3)), F1-score: 0.85(=2*(1.00*0.74)/(1.00+0.74))。

HALCON 20.11:深度学习笔记(10)---分类相关推荐

  1. HALCON 20.11:学习笔记---一维测量(Measuring)

    HALCON 20.11:学习笔记---一维测量(Measuring) 本章主要提供有关一维测量的信息. 一维测量的概念 通过一维测量可以沿着预定义的线或弧定位从亮到暗或从暗到亮的过渡边缘.这使您可以 ...

  2. HALCON 21.11:学习笔记---OPC_UA(I/O)

    HALCON 21.11:学习笔记---OPC_UA(I/O) 本章主要提供有关OPC_UA的信息. 系统要求 Intel compatible PC with Windows 7 (32-bit o ...

  3. 【深度学习笔记】分类指标accuracy,recall,precision等的区别

    在机器学习里面做一些分类任务时,经常会使用到一些评价指标,下面就一些常用的指标进行详细的说明. 上图表示为一个二分类的混淆矩阵(多分类同理,只需要把不属于当前类的其他类都考虑为负例),表格中的四个参数 ...

  4. HALCON 21.11:深度学习笔记---分类(10)

    HALCON 21.11:深度学习笔记---分类(10) HALCON 21.11.0.0中,实现了深度学习方法. 本章介绍了如何在训练和推理阶段使用基于深度学习的分类. 基于深度学习的分类是一种对一 ...

  5. HALCON 20.11:深度学习笔记(1)

    HALCON 20.11:深度学习笔记(1) HALCON 20.11.0.0中,实现了以下深度学习方法: 1. Anomaly Detection(异常检测) 给每个像素分配显示未知特征的可能性.更 ...

  6. HALCON 20.11:深度学习笔记(12)---语义分割

    HALCON 20.11:深度学习笔记(12)--- 语义分割 HALCON 20.11.0.0中,实现了深度学习方法. 本章解释了如何使用基于深度学习的语义分割,包括训练和推理阶段. 通过语义分割, ...

  7. HALCON 20.11:深度学习笔记(11)---目标检测

    HALCON 20.11:深度学习笔记(11)---目标检测 HALCON 20.11.0.0中,实现了深度学习方法. 本章讲解了如何使用基于深度学习的对象检测. 通过对象检测,我们希望在图像中找到不 ...

  8. HALCON 20.11:深度学习笔记(9)---异常检测

    HALCON 20.11:深度学习笔记(9)---异常检测 HALCON 20.11.0.0中,实现了深度学习方法. 本章解释了如何使用基于深度学习的异常检测. 通过异常检测,我们想要检测图像是否包含 ...

  9. HALCON 20.11:深度学习笔记(6)---有监督训练

    HALCON 20.11:深度学习笔记(6)---有监督训练 HALCON 20.11.0.0中,实现了深度学习方法.不同的DL方法有不同的结果.相应地,它们也使用不同的测量方法来确定网络的" ...

最新文章

  1. [一个经典的多线程同步问题]解决方案三:互斥量Mutex
  2. linux 线程 pthread create 源码 剖析
  3. 基于ArcGIS JS API 4.11实现对FeatureLayer的多变量渲染
  4. 区块链技术指南 第一章 区块链和比特币的初体验
  5. 提交前让所有的option变为选中状态
  6. HDFS基本原理及数据存取实战
  7. VUE使用Stylus插件
  8. CodeForces 292D Connected Components (并查集+YY)
  9. 如何开发一个油猴脚本- 从零开始编写一个油猴脚本
  10. keytool命令详解 自签名证书
  11. Python 内置函数dir()与对象的特殊属性以及一切都是对象的轻谈
  12. python伪装ip_Python爬虫如何用高质量代理IP伪装?
  13. 智力题:1000瓶酒.10只老鼠.有一瓶酒有毒,每只老鼠可以喝无限多的酒,如何测一次就找出哪瓶酒有毒
  14. 关于VSCode安装 python 语法检测器插件 pylint 配置(Mac)
  15. 1644 -- 字符串
  16. Android .9图片制作
  17. php手写签名保存,PHP+JS实现PC端+移动端PDF手写签名合并
  18. 第三章 区块链技术架构与发展趋势
  19. “智能+场景”,喜临门或造就深睡时代新风口
  20. 前端面试查漏补缺--(十) 前端鉴权

热门文章

  1. es大量数据导入效率优化
  2. USTC 1119 graph 图的同构
  3. 高性能ORM 框架之 MySqlSugar
  4. iOS 动画(三)CABasicAnimation animationWithKeyPath 一些规定的值
  5. 剁手党也有春天 -- 淘宝 UWP ”比较“功能诞生记
  6. XML通过XSL格式化的那点事(XML到自定义节点折叠显示)
  7. 【转】 CSS3实现10种Loading效果
  8. A Bit of Fun
  9. exit()和_exit()的区别
  10. Android定义的路径全局变量