目录

halcon19.11深度学习分类

关于配置环境

准备训练集

训练数据集

评估模型

测试模型


halcon19.11深度学习分类

关于配置环境

首先,如果你想使用halcon19.11学习深度学习,那么请保证你的电脑拥有独立显卡,关于配置的要求和如何进行配置,请参考这篇博文,传送门。

准备训练集

halcon准备训练集比较简单,只需要用户将自己分好类的图片放在不同的文件夹,每一类放入一个文件夹,文件夹的名字就是该类图片的类名。然后用代码进行处理即可。

我在D:/lixinze/halcon深度学习目录下放了两类图片,分别是D:/lixinze/halcon/huolong  D:/lixinze/halcon/miaowa 博主分类的是数码宝贝图片。

huolong文件夹下存放的全是火龙的图片,miaowa文件夹下存放的全是妙蛙种子的图片。所有图片必须是3通道图片。

dev_update_off ()
*存放分类图片的上一级路径
RawImageFolder := 'D:/lixinze/halcon深度学习/'
*存放预处理数据的总路径
ExampleDataDir:= 'D:/lixinze/halcon深度学习/class_data'
*存放预处理数据的二级路径
DataDirectoryBaseName := ExampleDataDir + '/dldataset_pokeman'
*默认参数,用来预处理数据集的
LabelSource := 'last_folder'
*
*分割数据集的百分比。
*训练集
TrainingPercent := 70
*验证集
ValidationPercent := 15
*
* 用户想要输入的图像大小,可更改
ImageWidth := 900
ImageHeight := 500
ImageNumChannels := 3
*
*用于图像预处理的其他参数。
NormalizationType := 'none'
DomainHandling := 'full_domain'
*
*为了获得可复制的分割,我们设置了一个随机种子。
*这意味着重新运行脚本将导致DLDataset的相同拆分。
SeedRand := 42
*设置随机种子。
set_system ('seed_rand', SeedRand)
*
*使用过程read_dl_dataset_classification读取数据集。
*或者,您可以使用read_dict()读取由MVTec深度学习工具创建的DLDataset字典。
read_dl_dataset_classification (RawImageFolder, LabelSource, DLDataset)
*分割数据集
split_dl_dataset (DLDataset, TrainingPercent, ValidationPercent, [])
*创建输出目录(如果尚不存在)。
file_exists (ExampleDataDir, FileExists)
if (not FileExists)make_dir (ExampleDataDir)
endif
*
*创建预处理参数。
create_dl_preprocess_param ('classification', ImageWidth, ImageHeight, ImageNumChannels, -127, 128, NormalizationType, DomainHandling, [], [], [], [], DLPreprocessParam)
*
*数据集目录,用于由preprocess_dl_dataset编写的任何输出。
DataDirectory := DataDirectoryBaseName + '_' + ImageWidth + 'x' + ImageHeight
*
*预处理数据集。 这可能需要几秒钟。
create_dict (GenParam)
set_dict_tuple (GenParam, 'overwrite_files', true)
preprocess_dl_dataset (DLDataset, DataDirectory, DLPreprocessParam, GenParam, DLDatasetFileName)
*
*单独存储预处理参数以便使用,例如 在推论过程中。
PreprocessParamFileBaseName := DataDirectory + '/dl_preprocess_param.hdict'
write_dict (DLPreprocessParam, PreprocessParamFileBaseName, [], [])

这里预处理就完成了,可以显示一下图片打的标签是否正确

*在进行培训之前,建议先检查预处理后的数据集。
*
*显示10个随机选择的火车图像的DLSamples。
get_dict_tuple (DLDataset, 'samples', DatasetSamples)
find_dl_samples (DatasetSamples, 'split', 'train', 'match', SampleIndices)
tuple_shuffle (SampleIndices, ShuffledIndices)
read_dl_samples (DLDataset, ShuffledIndices[0:9], DLSampleBatchDisplay)
*
create_dict (WindowHandleDict)
for Index := 0 to |DLSampleBatchDisplay| - 1 by 1*在DLSampleBatchDisplay中循环采样。dev_display_dl_data (DLSampleBatchDisplay[Index], [], DLDataset, 'classification_ground_truth', [], WindowHandleDict)Text := 'Press Run (F5) to continue'dev_disp_text (Text, 'window', 'bottom', 'right', 'black', [], [])stop ()
endfor
*
* 关闭窗口,数据预处理完成
dev_close_window_dict (WindowHandleDict)
stop()

查看下文件夹

训练数据集

得到了dl_dataset.hdict文件,就是我们要得数据集,dl_preprocess_param.hdict是预处理过程我们设置的参数,将其以字典形式保存了。

下面开始训练

注意,每一个阶段都是在得到前一个阶段生成的文件下进行的。

*预处理后的文件路径
DLDatasetFileName := DataDirectory+'/dl_dataset.hdict'
*预处理的参数文件路径
DLPreprocessParamFileName := DataDirectory + '/dl_preprocess_param.hdict'
*最佳评估模型的输出路径。
BestModelBaseName := ExampleDataDir + '/best_dl_model_classification'
*最终训练模型的输出路径。
FinalModelBaseName := ExampleDataDir + '/final_dl_model_classification'
* Batch size.
BatchSize := 2
*学习率
InitialLearningRate := 0.0001
*如果批量小,动量应高。
Momentum := 0.9
* train_dl_model使用的参数。
*训练模型的时迭代次数。
NumEpochs := 20
*评估间隔(以时期计),以计算验证拆分上的评估度量。每迭代一次验证一次
EvaluationIntervalEpochs := 1
*在以下时期更改学习率,例如 [4、8、12]。
*如果不应该改变学习率,则将其设置为[]。
ChangeLearningRateEpochs := []
*将学习率更改为以下值,例如 InitialLearningRate * [0.1,0.01,0.001]。
*元组的长度必须与ChangeLearningRateEpochs相同。
ChangeLearningRateValues := InitialLearningRate * [0.1,0.01,0.001]
*事先设定权重。
WeightPrior := 0.0005
*控制是否显示训练进度(是/否)。
DisplayEvaluation := true
*设置一个随机的种子进行训练。
RandomSeed := 42
*设置create_dl_train_param的通用参数。
*请参阅create_dl_train_param的文档以获取所有可用参数的概述。
GenParamName := []
GenParamValue := []
*扩充参数。
*如果在训练过程中应增加样本,请创建extend_dl_samples所需的字典。
*在这里,我们设置增强百分比和方法。
*create_dict (AugmentationParam)
*要增加的样本百分比。
*set_dict_tuple (AugmentationParam, 'augmentation_percentage', 50)
*沿行和列镜像。
*set_dict_tuple (AugmentationParam, 'mirror', 'rc')
*GenParamName := [GenParamName,'augment']
*GenParamValue := [GenParamValue,AugmentationParam]
*更改策略。
*在训练过程中可以更改模型参数。
*在这里,如果上面指定了,我们将更改学习率。
if (|ChangeLearningRateEpochs| > 0)create_dict (ChangeStrategy)* Specify the model parameter to be changed, here the learning rate.set_dict_tuple (ChangeStrategy, 'model_param', 'learning_rate')* Start the parameter value at 'initial_value'.set_dict_tuple (ChangeStrategy, 'initial_value', InitialLearningRate)* Reduce the learning rate in the following epochs.set_dict_tuple (ChangeStrategy, 'epochs', ChangeLearningRateEpochs)* Reduce the learning rate to the following values.set_dict_tuple (ChangeStrategy, 'values', ChangeLearningRateValues)* Collect all change strategies as input.GenParamName := [GenParamName,'change']GenParamValue := [GenParamValue,ChangeStrategy]
endif
*
*序列化策略。
*有多种选项可用于将中间模型保存到磁盘(请参见create_dl_train_param)。
*在这里,我们将最佳模型和最终模型保存到上面设置的路径中。
create_dict (SerializationStrategy)
set_dict_tuple (SerializationStrategy, 'type', 'best')
set_dict_tuple (SerializationStrategy, 'basename', BestModelBaseName)
GenParamName := [GenParamName,'serialize']
GenParamValue := [GenParamValue,SerializationStrategy]
create_dict (SerializationStrategy)
set_dict_tuple (SerializationStrategy, 'type', 'final')
set_dict_tuple (SerializationStrategy, 'basename', FinalModelBaseName)
GenParamName := [GenParamName,'serialize']
GenParamValue := [GenParamValue,SerializationStrategy]
*
*显示参数。
*在此示例中,选择了20%的训练分组以显示
*评估在训练过程中减少训练次数的评估措施。 较低的百分比
*有助于加快评估/培训。 如果评估措施用于培训分裂
*不会显示,将此值设置为0(默认值)。
*SelectedPercentageTrainSamples := 15
*create_dict (DisplayParam)
*set_dict_tuple (DisplayParam, 'selected_percentage_train_samples', SelectedPercentageTrainSamples)
*GenParamName := [GenParamName,'display']
*GenParamValue := [GenParamValue,DisplayParam]
*检查是否所有必需的文件都存在。
check_data_availability (ExampleDataDir, DLDatasetFileName, DLPreprocessParamFileName)
*
*读入在预处理过程中初始化的模型。也就是读取神经网络模型,halcon自带的
read_dl_model ('pretrained_dl_classifier_compact.hdl', DLModelHandle)
*读取预处理后的图片DLDataset文件。
read_dict (DLDatasetFileName, [], [], DLDataset)
*按照上述设置指定模型超参数。
set_dl_model_param (DLModelHandle, 'learning_rate', InitialLearningRate)
set_dl_model_param (DLModelHandle, 'momentum', Momentum)
*设置模型的类名。
get_dict_tuple (DLDataset, 'class_names', ClassNames)
set_dl_model_param (DLModelHandle, 'class_names', ClassNames)
*从预处理参数获取图像尺寸并为模型设置它们。
read_dict (DLPreprocessParamFileName, [], [], DLPreprocessParam)
get_dict_tuple (DLPreprocessParam, 'image_width', ImageWidth)
get_dict_tuple (DLPreprocessParam, 'image_height', ImageHeight)
get_dict_tuple (DLPreprocessParam, 'image_num_channels', ImageNumChannels)
*设置输入模型的图片大小和维度
set_dl_model_param (DLModelHandle, 'image_dimensions', [ImageWidth,ImageHeight,ImageNumChannels])
if (BatchSize == 'maximum')set_dl_model_param_max_gpu_batch_size (DLModelHandle, 100)
elseset_dl_model_param (DLModelHandle, 'batch_size', BatchSize)
endif
if (|WeightPrior| > 0)set_dl_model_param (DLModelHandle, 'weight_prior', WeightPrior)
endif
set_dl_model_param (DLModelHandle, 'runtime_init', 'immediately')
stop()
*创建训练参数。有超参数的传入GenParamName、GenParamValue
create_dl_train_param (DLModelHandle, NumEpochs, EvaluationIntervalEpochs, DisplayEvaluation, RandomSeed, GenParamName, GenParamValue, TrainParam)
*create_dl_train_param (DLModelHandle, NumEpochs, EvaluationIntervalEpochs, DisplayEvaluation, RandomSeed, [], [], TrainParam)
*
*以下过程中的train_dl_model_batch()。
train_dl_model (DLDataset, DLModelHandle, TrainParam, 0, TrainResults, TrainInfos, EvaluationInfos)
stop()
* Close training windows.
dev_close_window ()

在上述代码中,我选择了不增强数据集处理。关于重点是read_dl_model,具体模型的优缺点可以看:https://blog.csdn.net/qq_18620653/article/details/106035517

如果程序报错说超出电脑内存,就调低BatchSize再尝试运行。这个参数是神经网络每次训练几张图片的意思。或者图片特征明显的话也可以考虑改变图片的大小,变小图片的输入大小。

评估模型

完成训练后,程序会保存好准确率最高的一个模型,放在我们设置的路径下BestModelBaseName。代码如下

*******************************************************************评估****************************************************
*创建字典
create_dict (GenParamEval)
*设置参数
set_dict_tuple (GenParamEval, 'class_names_to_evaluate', 'global')
set_dict_tuple (GenParamEval, 'measures', ['top1_error','precision','recall','f_score','absolute_confusion_matrix'])
* Evaluate the trained model.
evaluate_dl_model (DLDataset, DLModelHandle, 'split', 'test', GenParamEval, EvaluationResult, EvalParams)
*
create_dict (EvalDisplayMode)
set_dict_tuple (EvalDisplayMode, 'display_mode', ['measures','pie_charts_precision','pie_charts_recall','absolute_confusion_matrix'])
create_dict (WindowDict)
dev_display_classification_evaluation (EvaluationResult, EvalParams, EvalDisplayMode, WindowDict)
dev_disp_text ('Press F5 to continue', 'window', 'bottom', 'right', 'black', [], [])
stop ()
dev_close_window_dict (WindowDict)

评估模型就是让我们看一看模型的准确率,我们主要看的是top1_error这个参数,它是错误率,至于后面的精确率和召回率,有兴趣的可以自己看看其意义。

测试模型

现在我们就可以拿我们的模型去预测图片了,我们需最佳模型和预处理参数文件。

BestModelBaseName := 'D:/lixinze/hlacon深度学习/class_data/best_dl_model_classification.hdl'*读取保存好的最佳模型
read_dl_model (BestModelBaseName, DLModelHandle)
*读取预处理的参数
read_dict ('D:/lixinze/halcon深度学习/class_data/dldataset_pokeman_900x500/dl_preprocess_param.hdict', [], [], DLPreprocessParam)
get_dict_tuple (DLPreprocessParam, 'image_width', ImageWidth)
get_dict_tuple (DLPreprocessParam, 'image_height', ImageHeight)
get_dict_tuple (DLPreprocessParam, 'image_num_channels', ImageNumChannels)*create_dict (WindowDict)
dev_open_window (0, 0, 900, 512, 'black', WindowHandle)
* Image Acquisition 01: Code generated by Image Acquisition 01
list_files ('D:/lixinze/halcon深度学习/huolong', ['files','follow_links'], ImageFiles)
tuple_regexp_select (ImageFiles, ['\\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima|hobj)$','ignore_case'], ImageFiles)
for Index := 0 to |ImageFiles| - 1 by 1read_image (Image, ImageFiles[Index])dev_display (Image)* 处理图片gen_dl_samples_from_images (Image, DLSample)preprocess_dl_samples (DLSample, DLPreprocessParam)*喂给模型apply_dl_model (DLModelHandle, DLSample, [], DLResult)*得到预判结果get_dict_tuple (DLResult, 'classification_class_names', Tuple)predictionname:=Tuple[0]*显示预测的类型disp_message (WindowHandle, predictionname, 'window', 12, 12, 'black', 'true')*dev_display_dl_data (DLSample, DLResult, DLDataset, 'classification_result', [], WindowDict)stop()
endfor

编码不易,有问题请留言,方便的大哥给个赞再走啊。

halcon19.11深度学习关于分类入门案例相关推荐

  1. (zhuan) 126 篇殿堂级深度学习论文分类整理 从入门到应用

    126 篇殿堂级深度学习论文分类整理 从入门到应用 | 干货 雷锋网  作者: 三川 2017-03-02 18:40:00 查看源网址 阅读数:66 如果你有非常大的决心从事深度学习,又不想在这一行 ...

  2. 【二】零基础入门深度学习:用一个案例掌握深度学习方法

    (给机器学习算法与Python学习加星标,提升AI技能) 作者 | 毕然  百度深度学习技术平台部主任架构师 内容来源 | 百度飞桨深度学习集训营 本文转自飞桨PaddlePaddle 导读 从本课程 ...

  3. Python大数据综合应用 :零基础入门机器学习、深度学习算法原理与案例

    机器学习.深度学习算法原理与案例实现暨Python大数据综合应用高级研修班 一.课程简介 课程强调动手操作:内容以代码落地为主,以理论讲解为根,以公式推导为辅.共4天8节,讲解机器学习和深度学习的模型 ...

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

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

  5. 网易云课程:深度学习与PyTorch入门实战

    网易云课程:深度学习与PyTorch入门实战 01 深度学习初见 1.1 深度学习框架简介 1.2 pytorch功能演示 2开发环境安装 3回归问题 3.1简单的回归问题(梯度下降算法) 3.3回归 ...

  6. 视频教程-深度学习与PyTorch入门实战教程-深度学习

    深度学习与PyTorch入门实战教程 新加坡国立大学研究员 龙良曲 ¥399.00 立即订阅 扫码下载「CSDN程序员学院APP」,1000+技术好课免费看 APP订阅课程,领取优惠,最少立减5元 ↓ ...

  7. 深度学习7日入门-CV疫情特辑心得

    深度学习7日入门-CV疫情特辑心得 学习后感觉的整体感觉:内容安排非常紧凑, 课件内容很准确,作业有针对性,比赛题目比较难. 下面从内容上的回顾一下课程内容: 首先,小白需要自学预习课(不过这部分内容 ...

  8. 深度学习工程应用快速入门

    课程介绍 伴随人工智能时代的到来,深度学习技术也发挥着越来越重要作用,越来越多的技术人才开始投身入这一行业中,并希望发展成为一名深度学习算法工程师.然而,在实际的工程设计中,深度学习研发者总会面临着各 ...

  9. 语音分类入门案例: 英文数字音频分类

    语音分类入门案例: 英文数字音频分类 本项目是一个全流程的语音分类项目,内容简单,适合想要涉猎音频分类的小白学习. 推荐将本项目Fork成为自己的项目并运行,以获得更好的学习体验!! 项目地址:语音分 ...

最新文章

  1. html5 canvas 学习
  2. 量子计算入门-第一部分
  3. 嵌入式linux中的锁机制,跟涛哥一起学嵌入式第11集:一个实现锁机制非常有意思的宏...
  4. RGB-D dataset
  5. html二叉树遍历,二叉树的遍历(前序、中序、后序、层次)
  6. #define 与 typedef
  7. Jmeter接口测试---加解密
  8. 本地上传文件到服务器
  9. 从初级开发者到资深架构师,看这
  10. stata判断变量是不是唯一标识的命令?
  11. shell子串截取的三种用法:
  12. 如何在 DAO 中找到个人自由并实现自我价值?
  13. 迭代需求文档规范(模板)
  14. 51单片机c语言算法大全,51单片机C语言实例(350例)Proteus仿真和代码都有
  15. java18(MySQL JDBC)
  16. PMBOK 第六版 识别风险:工具与技术——提示清单
  17. 量化投资技术六大环节
  18. k8s集群唯独一个节点nodeport不通问题调查
  19. spring boot 和 spring cloud 的兼容关系
  20. SQL查询最近三个月的数据(查询最近几天,几年等等)

热门文章

  1. 贝尔曼方程怎么解_贝尔曼方程
  2. pytorch1.10新功能inference_mode
  3. 【云真机平台】稳定性测试方案
  4. JS--页面加载完毕后执行
  5. word文档里四级目录无法显示
  6. 计算机基础会计,基础会计中计算机技术的应用
  7. 口渴·冰绿茶心情 -旧文
  8. 《迅雷链精品课》第二课:区块链核心技术框架
  9. 大数据实验室建设方案
  10. excel如何快速批量翻译单词