*
*此示例是一系列示例的一部分,该示例总结了
* 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~训练模型。相关推荐

  1. Halcon 18 深度学习配置与手写字符(MNIST)测试

    具体的配置 参考了  dearpeer 的 halcon 17 深度学习环境搭建, 链接地址: http://www.ihalcon.com/read-8749.html 1 系统配置:  win10 ...

  2. 专业显卡深度学习_学习深度学习,如何选购显卡?

    学习深度学习,显卡(GPU)可以说是比不可少的投资.本文试图探究哪个GPU才是学习入门性价比最高的? 为什么深度学习需要GPU? 我们先来比较一下CPU和GPU的不同,下图是一个简化的处理器内部结构图 ...

  3. 深度学习 训练吃显卡_学习深度学习,如何选购显卡?

    学习深度学习,显卡(GPU)可以说是比不可少的投资.本文试图探究哪个GPU才是学习入门性价比最高的? 为什么深度学习需要GPU? 我们先来比较一下CPU和GPU的不同,下图是一个简化的处理器内部结构图 ...

  4. 学习深度学习需要哪些知识_您想了解的有关深度学习的所有知识

    学习深度学习需要哪些知识 有关深层学习的FAU讲义 (FAU LECTURE NOTES ON DEEP LEARNING) Corona was a huge challenge for many ...

  5. 【深度学习】学习深度学习的最好方法

    学习深度学习的最好方法 亲自实现,从零开始编写能运行的程序,一遍看源代码一边思考.只有这样才能正确理解深度学习,才能对那些看起来很高级的技术有完整的理解. 不依赖第三方库,从最基础的开始实现起,对于理 ...

  6. 系统学习深度学习(四十一)--AlphaGo Zero强化学习原理

    转自:https://www.cnblogs.com/pinard/p/10609228.html 本篇主要参考了AlphaGo Zero的论文, AlphaGo Zero综述和AlphaGo Zer ...

  7. 系统学习深度学习(一) --深度学习与神经网络关系

    参考:http://blog.csdn.net/zouxy09/article/details/8775518 最近开始学习深度学习,基本上都是zouxy09博主的文章,写的蛮好,很全面,也会根据自己 ...

  8. 学习深度学习是否要先学习机器学习?

    来源:https://www.zhihu.com/question/382278216 编辑:深度学习与计算机视觉 声明:仅做学术分享,侵删 作者:图灵的猫 https://www.zhihu.com ...

  9. 零基础学习深度学习_深度学习的基础!!!

    零基础学习深度学习 The ability to learn from experience and perform better when confronted with similar chall ...

  10. 机器学习深度学习加强学习_我如何在9个月内学习深度学习

    机器学习深度学习加强学习 There are so many resources out there that can teach you deep learning, and if you are ...

最新文章

  1. SSM中使用Druid连接池
  2. Spring+mongodb集群集成(吐血教程) 转自:http://blog.csdn.net/qq_16497617/article/details/52817335
  3. python函数里面引用外部变量_Python基础 变量进阶
  4. IComparer实现文件名排序
  5. 红帽峰会2015所需的JBoss BPM内容指南
  6. 【Flink】Flink yarn 下报错ClassNotFoundException: org.apache.hadoop.yarn.api.ApplicationConstants$Environ
  7. 在线答题助手c语言源码,开源的在线答题小程序
  8. 真香啊,手把手教你使用 Python 获取基金信息
  9. 网页数据提取----网络投票软件开发(续1)
  10. iOS 升级HTTPS配置ATS-----(1)------
  11. 无线网卡被服务器禁用,wifi共享精灵无线网卡被禁用或被接管解决教程
  12. ftp服务器文件复制文件路径,FTP将文件复制到同一FTP的另一个位置
  13. window系统 安装 nvm 详细步骤
  14. 阿里面试应该注意什么?通过5轮面试的阿里实习生亲述
  15. 微信小程序页面跳转无效
  16. 小程序开发系列之基础部分-基础部分
  17. 邀请码 java_邀请码生成器Java代码详解
  18. 2020小迪安全第八天笔记-(信息收集)架构,搭建,WAF 等
  19. 怎么看电影《穆赫兰道》?
  20. 克里金(kriging)模型的推导详解

热门文章

  1. vue路由嵌套无法渲染 页面空白
  2. 使用多电脑进行AirSim联合仿真
  3. 微信小程序-实现两个按钮固定在页面底端且不随页面滑动(静态页面)
  4. 小说里的编程 【连载之七】元宇宙里月亮弯弯
  5. 光散射理论的简要概述
  6. 声音大小与振幅的关系_振幅大小决定音的什么
  7. C# DirectX.DirectShow-音视频播放或捕获
  8. 实战Kubernetes动态卷存储(NFS)
  9. matlab求复数相位角,怎么求复数相位
  10. Three.js - 使用 bumpMap 凹凸贴图创建皱纹