Halcon 多标签分类脚本详解

1. 简介

该 Halcon 脚本(.hdev 程序)完整地演示了如何使用 Halcon 的深度学习工具来训练和评估一个多标签分类模型。多标签分类是指一个样本(在这里是图像)可以同时被赋予多个类别标签。

整个流程遵循一个标准的深度学习项目工作流,包括:

  1. 数据加载:加载带有标签的数据集。
  2. 模型准备:加载一个预训练的骨干网络,并根据任务需求进行初始化。
  3. 数据检查:可视化部分数据,确保数据加载和预处理正确。
  4. 训练准备:设置训练所需的超参数(如学习率、迭代次数、数据增强等)。
  5. 模型训练:执行训练过程。
  6. 模型评估:使用验证集评估训练好的模型的性能。
  7. 结果检查:可视化评估结果,分析模型的错误。
  8. 推断 (Inference):使用训练好的模型对新图像进行预测。
  9. 清理:删除训练过程中产生的中间文件。

下面我们将对脚本的每个部分进行详细的解释。


2. 流程详解

2.1 初始化与环境设置

* Multi-label classification workflow:
* ... (注释部分)

dev_close_window ()
dev_update_off ()
  • dev_close_window (): 关闭所有在 HDevelop 中打开的图形窗口。
  • dev_update_off (): 关闭 HDevelop 的自动更新显示功能。这可以加速程序执行,因为图形窗口、变量窗口等不会在每一步操作后都刷新。通常在脚本开始时关闭,在需要显示结果时再手动更新或在脚本结尾重新打开。

2.2 加载数据集

* *****************************************************
* ***               LOAD DATASET                    ***
* *****************************************************
FileName := 'pill_defects.hdict'
load_dataset (FileName, DLDataset)
  • FileName := 'pill_defects.hdict': 定义数据集文件的名称。这里的数据集是一个 Halcon 字典 (.hdict 文件),它包含了图像信息、标签以及数据集的划分(训练集、验证集、测试集)。
  • load_dataset: 这是一个自定义的过程(procedure),用于加载数据集。它会读取指定的 .hdict 文件,并将解析后的数据存储在 DLDataset 字典中。

2.3 准备输出目录

* *****************************************************
* ***              PREPARE OUTPUTDIR                ***
* *****************************************************
parse_filename (FileName, BaseName, _, _)
prepare_output_dir (BaseName, OutputDir)
  • parse_filename: 从完整文件名 pill_defects.hdict 中提取出基本名称 pill_defects
  • prepare_output_dir: 这是一个自定义过程,它会根据基本名称创建一个新的目录,用于存放训练过程中产生的所有文件,如训练好的模型、日志文件、评估结果等。输出目录的路径存储在 OutputDir 变量中。

2.4 加载预训练模型

* *****************************************************
* ***             LOAD PRETRAINED MODEL             ***
* *****************************************************
ImageWidth := 224
ImageHeight := 224
BackboneModelFilename := 'pretrained_dl_classifier_resnet18.hdl'
load_and_intialize_dl_model (DLDataset, ImageWidth, ImageHeight, BackboneModelFilename, DLModelHandle)
  • ImageWidth, ImageHeight: 设置模型输入图像的尺寸。所有输入图像在送入模型前都会被缩放到这个尺寸。较小的尺寸可以加快训练速度和减少内存占用。
  • BackboneModelFilename: 选择一个预训练的分类模型作为骨干网络。Halcon 提供了多种模型(如 ResNet, AlexNet, MobileNet V2 等)。使用预训练模型可以利用其在大型数据集上学到的特征提取能力,从而在自己的任务上更快更好地收敛,这种技术称为迁移学习
  • load_and_intialize_dl_model: 自定义过程,用于加载指定的预训练模型,并根据我们任务的具体情况(如类别数量、输入尺寸)来修改和初始化模型的最后一层。处理后的模型句柄存储在 DLModelHandle 中。

2.5 检查数据集

* *****************************************************
* ***                 INSPECT DATASET               ***
* *****************************************************
create_dl_preprocess_param_from_model (DLModelHandle, 'none', 'full_domain', [], [], [], DLPreprocessParam)
InspectionSkip := false
NumInspectionSamples := 5
inspect_dataset (DLDataset, DLPreprocessParam, NumInspectionSamples, InspectionSkip)
  • create_dl_preprocess_param_from_model: 根据模型 DLModelHandle 的设置,创建一个预处理参数字典 DLPreprocessParam。这个字典定义了如何对输入图像进行归一化等预处理操作。
  • inspect_dataset: 自定义过程,用于随机抽取 NumInspectionSamples(这里是5)个训练样本,并将其显示出来。这是一个非常重要的健全性检查(Sanity Check)步骤,可以帮助我们确认数据集是否被正确加载、图像和标签是否对应。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值