Halcon学习---深度学习篇segment2~训练模型。
*
*此示例是一系列示例的一部分,该示例总结了
* DL细分的工作流程。 它使用MVTec药丸数据集。
*
*四个部分是:
* 1.数据集预处理。
* 2.训练模型。
* 3.评估训练后的模型。
* 4.推断新图像。
*
*此示例包含第2部分:“模型训练”。
*
*请注意:此脚本需要第1部分的输出:
* segment_pill_defects_deep_learning_1_preprocess.hdev
*
dev_update_off ()
*
ShowExampleScreens := true
*
* Initial example windows and parameters.
dev_example_init (ShowExampleScreens, ExampleInternals)
*
* Display the explanatory screens about this example.
if (ShowExampleScreens)
*
* Introduction text of example series.
dev_display_screen_introduction_train (ExampleInternals)
stop ()
*
* Requirement check.
dev_display_screen_error (ExampleInternals, Error)
if (Error)
stop ()
endif
*
* Explain model selection.解释模型选择
**************************************************************************************************************
HALCON提供了两个可以针对特定应用进行重新训练的预训练分割模型: 具有更多全局功能的复杂场景。要优化结果,可以帮助尝试每个模型并比较性能。所选模型可以加载\'read_dl_model \'。*************************************************************************************************************
dev_display_screen_model_selection (ExampleInternals)
stop ()
*
* Explain goals during training.解释训练的目标**************************************************************************************************************
训练时,有两个主要目标要实现:
1.)“损失”通常用于优化训练数据模型。 因此,目的是尽可能减少训练数据的损失。
2.)对于验证数据的评估措施,“'mean_iou \'(mean Intersection over Union)通常用于语义“细分”。 在训练过程中,该值应呈上升趋势。下面显示了成功训练过程中的损失示例。**************************************************************************************************************
dev_display_screen_training_goals_1 (ExampleInternals)
*****
stop ()
*
dev_display_screen_training_goals_2 (ExampleInternals)
*****
stop ()
*
*解释set_dl_model_param和create_dl_train_param。
************************************************************************************************************
模型和训练参数有多个,要设置模型参数\'set_dl_model_param \',训练参数在\'create_dl_train_param \'中设置,这些参数用于指定训练过程,其中一些会在训练结果上会产生重大影响。最突出的解释如下。************************************************************************************************************ dev_display_screen_parameters (ExampleInternals)
stop ()
*
*说明批量大小。
**************************************************************************************************************
模型参数:\'batch_size \'将数据集分为较小的数据子集,称为批处理。\'batch_size \'确定成批并同时处理的图像数量,建议设置对于可用的GPU内存,\'batch_size \'尽可能高。 这可以通过过程\'set_dl_model_param_max_gpu_batch_size\'来完成。**************************************************************************************************************
dev_display_screen_batch_size (ExampleInternals)
stop ()
*
* 解释学习率。
************************************************************************************************************
模型参数:\'learning_rate \'。\'learning_rate \'确定优化损失函数的步骤大小:
-学习速度过高可能会导致优化算法出现分歧。-非常低的学习速度将不必要地采取许多步骤。
不同学习率的近似损耗曲线如下所示。
***************************************************************************************************************
dev_display_screen_learning_rate (ExampleInternals)
stop ()
*
*说明 epochs数.
****************************************************************************************************************
训练参数:epochs 数
在一个epochs内,整个训练数据只使用一次。epochs的数量取决于具体问题。问题越复杂,训练就需要越长的时间才能获得良好的结果。 因此,增加该值是有益的。在过程\'create_dl_train_param \'中设置时期数。******************************************************************************************************************
dev_display_screen_num_epochs (ExampleInternals)
stop ()
*
* 解释更多参数。
*******************************************************************************************************************
此外,可以指定更多高级参数来增强训练过程,例如用于以下参数:
-数据扩充(例如\'augmentation_percentage \',\'rotation \')
-更改策略(例如在训练过程中适应\'learning_rate \')
'-评估措施(例如\'mean_iou\')*******************************************************************************************************************
dev_display_screen_other_params (ExampleInternals)
stop ()
*
*解释train_dl_model
********************************************************************************************************************
设置参数后,可以使用'\train_dl_model \'在数据集中训练模型。在训练过程中,最好的训练模型将被存储并在相应的训练步骤后写入磁盘。
*********************************************************************************************************************
dev_display_screen_training_process (ExampleInternals)
stop ()
*
* 说明训练将从现在开始。
***********************************************************************************************************************
现在开始对模型进行训练,在训练过程中以可视方式指示进度,训练需要一段时间,并且在很大程度上取决于参数设置和使用的GPU类型。
***********************************************************************************************************************
dev_display_screen_training_starts (ExampleInternals)
stop ()
*
* 关闭任何示例屏幕窗口
dev_example_close_windows (ExampleInternals)
endif
*
* ***********************************
* *** 设置输入/输出路径 ***
* ***********************************
*所有示例数据都将写入此文件夹
ExampleDataDir := 'segment_pill_defects_data'
* 预处理的DLDataset的文件路径
DLDatasetFileName := ExampleDataDir + '/dldataset_pill_400x400/dl_dataset.hdict'
* 最终训练模型的输出路径
FinalModelBaseName := ExampleDataDir + '/final_dl_model_segmentation'
* 最佳评估模型的输出路径
BestModelBaseName := ExampleDataDir + '/best_dl_model_segmentation'
*
* *******************************
* *** 设置基本参数 ***
* *******************************
*
* 以下参数需要经常修改
*
* 模型参数
*要重新训练的细分模型
ModelFileName := 'pretrained_dl_segmentation_enhanced.hdl'
* 批次大小.
* 如果设置为“最大”,则批处理大小由set_dl_model_param_max_gpu_batch_size设置。
BatchSize := 'maximum'
* 初始学习率
InitialLearningRate := 0.0001
* 如果批量较小,动量应较高
Momentum := 0.99
*
* train_dl_model使用的参数。
*训练模型的epochs 。
NumEpochs := 10
*评估interval(in epochs),以计算验证拆分时的评估度量。
EvaluationIntervalEpochs := 1
*在以下时期更改学习率,例如 [15,30]
*如果不应更改学习率,请将其设置为[]
ChangeLearningRateEpochs := []
* 将学习率更改为以下值,例如 InitialLearningRate * [0.1,0.01]
*元组的长度必须与ChangeLearningRateEpochs相同
ChangeLearningRateValues := []
*
* ***********************************
* *** 设置高级参数 ***
* ***********************************
*
* 在极少数情况下,可能需要更改以下参数
*
* Model parameter.
*使用 [] 作为默认的优先权
WeightPrior := []
*
* train_dl_model的参数
* 控制是否显示训练进度(是/否)(true/false).
EnableDisplay := true
* 设置随机种子进行训练
SeedRand := 42
*
* 设置create_dl_train_param的通用参数
*有关所有可用参数的概述,请参阅create_dl_train_param的文档
GenParamName := []
GenParamValue := []
*
* Change strategies.改变策略
* 在训练期间可以更改模型参数
*在这里,如果上面指定,我们将更改学习率
if (|ChangeLearningRateEpochs| > 0)
create_dict (ChangeStrategy)
* Specify the model parameter to be changed.
set_dict_tuple (ChangeStrategy, 'model_param', 'learning_rate')
* Start the parameter value at 'initial_value'.
set_dict_tuple (ChangeStrategy, 'initial_value', InitialLearningRate)
* Change the parameter value at each 'epochs' step.
set_dict_tuple (ChangeStrategy, 'epochs', ChangeLearningRateEpochs)
* Change the parameter value to the corresponding value in values.
set_dict_tuple (ChangeStrategy, 'values', ChangeLearningRateValues)
* Collect all change strategies as input.
GenParamName := [GenParamName,'change']
GenParamValue := [GenParamValue,ChangeStrategy]
endif
*
* Serialization strategies.序列化策略。
*有几个选项可用于将中间模型保存到磁盘(请参见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]
*
*
* *********************************
* *** 读取模型和数据集 ***
* *********************************
*
* 检查是否所有必需的文件都存在
check_files_availability (ExampleDataDir, DLDatasetFileName)
*
* 读取预处理的DLDataset文件
read_dict (DLDatasetFileName, [], [], DLDataset)
* 读入在预处理期间初始化的模型
read_dl_model (ModelFileName, DLModelHandle)
*
* ******************************
* *** 设置模型参数 ***
* ******************************
*
* 根据预处理参数设置模型参数
get_dict_tuple (DLDataset, 'preprocess_param', DLPreprocessParam)
get_dict_tuple (DLDataset, 'class_ids', ClassIDs)
set_dl_model_param_based_on_preprocessing (DLModelHandle, DLPreprocessParam, ClassIDs)
*
* 按照上面的说明设置模型超参数
set_dl_model_param (DLModelHandle, 'learning_rate', InitialLearningRate)
set_dl_model_param (DLModelHandle, 'momentum', Momentum)
if (BatchSize == 'maximum')
set_dl_model_param_max_gpu_batch_size (DLModelHandle, 100)
else
set_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')
*
* *************************
* *** 训练模型 ***
* *************************
*
* 创建通用 训练参数 字典
create_dl_train_param (DLModelHandle, NumEpochs, EvaluationIntervalEpochs, EnableDisplay, SeedRand, GenParamName, GenParamValue, TrainParam)
*
* 开始训练
train_dl_model (DLDataset, DLModelHandle, TrainParam, 0.0, TrainResults, TrainInfos, EvaluationInfos)
*
*
* 训练结束后停止,然后关闭窗口
dev_disp_text ('Press Run (F5) to continue', 'window', 'bottom', 'right', 'black', [], [])
stop ()
* 关闭训练窗口
dev_close_window ()
dev_close_window ()
* 显示最后的模型窗口
if (ShowExampleScreens)
* 提示DL分割评估和推理示例
dev_display_screen_final (ExampleInternals)
stop ()
* Close example windows.
dev_close_example_windows (ExampleInternals)
endif
Halcon学习---深度学习篇segment2~训练模型。相关推荐
- Halcon 18 深度学习配置与手写字符(MNIST)测试
具体的配置 参考了 dearpeer 的 halcon 17 深度学习环境搭建, 链接地址: http://www.ihalcon.com/read-8749.html 1 系统配置: win10 ...
- 专业显卡深度学习_学习深度学习,如何选购显卡?
学习深度学习,显卡(GPU)可以说是比不可少的投资.本文试图探究哪个GPU才是学习入门性价比最高的? 为什么深度学习需要GPU? 我们先来比较一下CPU和GPU的不同,下图是一个简化的处理器内部结构图 ...
- 深度学习 训练吃显卡_学习深度学习,如何选购显卡?
学习深度学习,显卡(GPU)可以说是比不可少的投资.本文试图探究哪个GPU才是学习入门性价比最高的? 为什么深度学习需要GPU? 我们先来比较一下CPU和GPU的不同,下图是一个简化的处理器内部结构图 ...
- 学习深度学习需要哪些知识_您想了解的有关深度学习的所有知识
学习深度学习需要哪些知识 有关深层学习的FAU讲义 (FAU LECTURE NOTES ON DEEP LEARNING) Corona was a huge challenge for many ...
- 【深度学习】学习深度学习的最好方法
学习深度学习的最好方法 亲自实现,从零开始编写能运行的程序,一遍看源代码一边思考.只有这样才能正确理解深度学习,才能对那些看起来很高级的技术有完整的理解. 不依赖第三方库,从最基础的开始实现起,对于理 ...
- 系统学习深度学习(四十一)--AlphaGo Zero强化学习原理
转自:https://www.cnblogs.com/pinard/p/10609228.html 本篇主要参考了AlphaGo Zero的论文, AlphaGo Zero综述和AlphaGo Zer ...
- 系统学习深度学习(一) --深度学习与神经网络关系
参考:http://blog.csdn.net/zouxy09/article/details/8775518 最近开始学习深度学习,基本上都是zouxy09博主的文章,写的蛮好,很全面,也会根据自己 ...
- 学习深度学习是否要先学习机器学习?
来源:https://www.zhihu.com/question/382278216 编辑:深度学习与计算机视觉 声明:仅做学术分享,侵删 作者:图灵的猫 https://www.zhihu.com ...
- 零基础学习深度学习_深度学习的基础!!!
零基础学习深度学习 The ability to learn from experience and perform better when confronted with similar chall ...
- 机器学习深度学习加强学习_我如何在9个月内学习深度学习
机器学习深度学习加强学习 There are so many resources out there that can teach you deep learning, and if you are ...
最新文章
- SSM中使用Druid连接池
- Spring+mongodb集群集成(吐血教程) 转自:http://blog.csdn.net/qq_16497617/article/details/52817335
- python函数里面引用外部变量_Python基础 变量进阶
- IComparer实现文件名排序
- 红帽峰会2015所需的JBoss BPM内容指南
- 【Flink】Flink yarn 下报错ClassNotFoundException: org.apache.hadoop.yarn.api.ApplicationConstants$Environ
- 在线答题助手c语言源码,开源的在线答题小程序
- 真香啊,手把手教你使用 Python 获取基金信息
- 网页数据提取----网络投票软件开发(续1)
- iOS 升级HTTPS配置ATS-----(1)------
- 无线网卡被服务器禁用,wifi共享精灵无线网卡被禁用或被接管解决教程
- ftp服务器文件复制文件路径,FTP将文件复制到同一FTP的另一个位置
- window系统 安装 nvm 详细步骤
- 阿里面试应该注意什么?通过5轮面试的阿里实习生亲述
- 微信小程序页面跳转无效
- 小程序开发系列之基础部分-基础部分
- 邀请码 java_邀请码生成器Java代码详解
- 2020小迪安全第八天笔记-(信息收集)架构,搭建,WAF 等
- 怎么看电影《穆赫兰道》?
- 克里金(kriging)模型的推导详解