当前位置:首页 > 学习 > 学习工具 > 正文内容

halcon的深度学习工具,halcon基础

学习工具14302023-02-06 23:54:06
查看本文收录: 查看是否已被百度收录 百度 查看是否已被搜狗收录 搜狗 查看是否已被360收录 360

文章目录一览

Halcon deep learning之目标检测笔记(二)

halcon的深度学习工具,halcon基础 第1张

在上一步,完成了网络的创建和数据的预处理。接下来准备对这个网络进行训练,通过训练得到一个可以用于目标检测的深度学习网络模型。这里首先要确定上一步输出的模型和数据集的存放路径是可用的,否则训练环节会因为缺少输入而报错。

Halcon的参考样例detect_pills_deep_learning_2_train.hdev详述了这一过程,这里做一些学习记录。

设置输入路径,主要是两个,一是上一步的预训练的以.hdl结尾的模型,另一个是数据集和样本数据字典的存放路径。

输出路径也是两个,一是存放最佳评估模型的路径,一个是最终训练完成的模型路径。

首先用check_files_availability验证预处理模型和数据集路径是否正确。没有问题的话可以开始读取。

使用read_dl_model读取前一步初始化后的网络模型,得到模型的句柄DLModelHandle。

接着用read_dict读取预处理后的数据集,得到数据字典句柄DLDataset。

设置模型参数主要通过set_dl_model_param算子,以修改属性值的方式改变关键参数的值。该算子原型如下:

set_dl_model_param( : : DLModelHandle, GenParamName, GenParamValue : )

输入三个参数:

注意,如果将'runtime'的值改为了’gpu’,则要确定cuDNN和cuBLAS已经成功安装了。

通过set_dl_model_param算子,可以将本文开头提到的设置的模型的基本参数传递给模型句柄DLModelHandle。如将'batch_size'设为之前的batch_size的值等等。

1)创建训练参数。

这里使用create_dl_train_param算子创建一个训练参数的字典,用于存放训练参数和训练效果可视化的参数。这些参数可以做个说明:

2)训练网络

接下来是最耗时的部分,即使用train_dl_model算子进行深度学习网络模型的训练。算子如下:

train_dl_model( : : DLDataset, DLModelHandle, TrainParam, StartEpoch : TrainResults, TrainInfos,EvaluationInfos)

前四个参数是输入参数,后三个是输出参数。

接着到了第三步,即验证模型的部分。

性能优化——使用多线程加速Halcon深度学习算子

可以用Halcon建立深度学习模型,并用到实际项目中。

流程大概是使用免费的 Halcon Deeplearing Label Tool制作模型后,导出成 .hdl 文件,并在应用程序中用 ApplyDlClassifier 应用模型。

经过测试, ApplyDlClassifer 在第一次运行时,无论数据集有多大,执行时间在500ms左右(AMD 5800X + Nvidia P2200),能够明显感受到卡顿,而在第二次运行时,就感受不到卡顿。所以我考虑,在应用程序启动时,使用线程对模型进行预热。

预热听着高深,其实就是读取模型( ReadDlClassifier ) 并送入一张空白图。

下面演示我的做法:

2.1 封装一个自己的Application类

2.2 我将Halcon算子封装成一个单例类,并使用 getAlgorithmGlobalData 获得这个单例对象。 slotDoModelWarmUp 是这个单例类一个槽函数。

2.3 在 slotDoModelWarmUp 中开多线程,对模型进行预热。

我将Halcon深度学习算子要用到的变量封装成一个 context 结构体,放在单例类中。为了节约开销,我使用引用,直接获取这个单例对象。这样,在向线程中传参数时,需要一个 std::ref 。

线程函数如下:

classifierHandle 是一个引用变量,这使得我可以直接操控单例类中的数据成员,而不是使用拷贝。

经过测试,在AMD 5800X + Nvidia P2200下,推理速度达到了11.66ms。

halcon深度学习需要单独购买吗?

halcon深度学习需要单独购买

深度学习是一系列机器学习的方法集合,其算法结构类似于多层级的神经网络。通过对大量的训练样本图像的学习,提取其各个层次的特征,使网络具有判别和推理能力。

深度学习的优点与缺点

缺点:

需要大量的训练样本

训练耗时较长

需要一定的硬件支持

优点:

黑箱操作,非常简单

能满足复杂环境的需要

只需要标注样本进行训练

友情声明:本文内容由用户自发奉献,本站文章量较多,不能保证每篇文章的绝对合法性,若您发觉违规/侵权内容,请尽快联系我们删除。

首发网址:https://www.haohuizhi.com/xuexi/xxgj/6577.html

分享给朋友:

关于我们/ 联系我们/ 隐私政策