• 深度学习in Halcon流程



    1 预处理

    1.1 读取预训练网络

    用read_dl_classifier方法读取一个预训练网络,其中Halcon提供的预训练网络有:

    "pretrained_dl_classifier_compact.hdl"和"pretrained_dl_classifier_enhanced.hdl"。

    1.2 读取数据集

    指定数据集路径,用read_dl_classifier_data_set方法获取带有标签的原始数据集。

    1.3 数据集预处理

    预处理是一个成功分类器的重要组成部分。 一个好的预处理程序将强调相关细节并去除不必要的部分,用于深度学习分类器的输入图像需要采用特定格式(大小、通道数量、类型和数值范围)。 preprocess_dl_classifier_images方法相应地预处理一个图像元组。预处理整个数据集并将数据保存到磁盘中,这样在训练过程中不需要浪费时间进行预处理。

    对数据集进行预处理,一般都是去除背景,取待检测对象的最小外接矩形,然后通过调用preprocess_dl_classifier_images方法进行处理。

    1.4 分割数据

    用split_dl_classifier_data_set方法将读取的数据集进行分割,一般来说训练集70%,验证集15%,测试集15%。

    训练集被直接用于训练并被赋予train_dl_classifier_batch方法,验证集在训练期间间接使用,以评估分类器看不见数据的成功,尝试改进您基于验证集的结果(例如,通过调整超参数或改变预处理,测试集用于泛化的最终检查在尝试优化验证错误后很少进行评估。

    1.5 设置训练超参数

    设置参数:类名、批量大小、运行环境、学习率、学习率在几个周期后减少多少、周期数、动量、正则化参数。

    image

    2 训练

    以周期数和迭代次数分别设置双重for循环,对训练集用train_dl_classifier_batch方法进行小批量训练,同时用get_dl_classifier_train_result方法获得当前的损失,同时存入元组中,再调用clear_dl_classifier_train_result方法清除结果句柄。

    与此同时,调用apply_dl_classifier_batchwise和evaluate_dl_classifier方法对分类器在当前训练集和验证集的表现进行评估,并在迭代过程中调用plot_dl_classifier_training_progress方法绘制验证和错误率以观察训练的进度,最后调用write_dl_classifier方法保存训练好了的分类器。

    3 评估

    3.1 计算Top-1 error

    Top-1 error即对一个图片,如果概率最大的是正确答案,才认为正确。

    调用apply_dl_classifier_batchwise和evaluate_dl_classifier方法计算训练集、验证集和测试集的Top-1 error,它表示预测类别与相应地面实况标签不匹配的图像部分。

    clip_image004

    3.2 计算验证集的混淆矩阵(confusion matrix)

    在人工智能中,混淆矩阵是可视化工具,特别用于监督学习,在无监督学习一般叫做匹配矩阵。矩阵的每一列代表一个类的实例预测,而每一行表示一个实际的类的实例。基于实际的名称可以更容易判断机器是否将两个不同的类混淆了。在机器学习领域,混淆矩阵通常被称为列联表或误差矩阵。

    为了可视化和分析分类器的质量,将分类结果可视化,混淆矩阵是一个有用的工具。

    混淆矩阵的作用:

    1) 用于观察模型在各个类别上的表现,可以计算模型对应各个类别的准确率,召回率;

    2) 通过混淆矩阵可以观察到类别直接哪些不容易区分,比如A类别中有多少被分到了B类别,这样可以有针对性的设计特征等,使得类别更有区分性。

    先用apply_dl_classifier_batchwise方法得到DLClassifierResultIDsTest,再用一个for循环和get_dl_classifier_result方法得到Top1ClassValidation,再调用gen_confusion_matrix函数得到ConfusionMatrix。

    clip_image006

    clip_image007

    3.3 将分类器应用到测试集

    在测试集上测试分类器,到目前为止,我们使用训练集来训练分类器验证集来监视和分析它。最后,您可以检查分类器如何在理想情况下独立于您已使用的两个数据集的数据上执行操作。正如我们以前所做的训练和验证集一样,我们在测试集上计算Top-1 error。

    首先用read_dl_classifier方法读取已经训练好的分类器,然后调用apply_dl_classifier_batchwise方法将已经训练的分类器应用到测试集中,再调用evaluate_dl_classifier方法对测试集中的分类结果进行评估,同时将之前评估的训练集、验证集和测试集上的错误率显示出来。

    4 预测

    clip_image009

    版权声明:

    本文首发于onefish51的博客(http://www.cnblogs.com/onefish51https://blog.csdn.net/weixin_31075593),未经允许不得转载,版权所有,侵权必究。

  • 相关阅读:
    SpringMVC设置不拦截静态资源css,js
    关于Spring 国际化 No message found under code 的解决方案
    数据库中文乱码问题
    Maven下载清除jar包
    Swift学习笔记7:关闭
    bash构造tmux显示tmux ssh状态
    Mysql入门到精通数据表的操作
    MapReduce源代码分析MapTask分析
    世界目光聚焦美国:埃博拉病患者是否认真是可以治愈的?
    Android Studio如何引用jar包裹(不gradle)
  • 原文地址:https://www.cnblogs.com/onefish51/p/9376385.html
Copyright © 2020-2023  润新知