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

  • 3
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Halcon中自定义训练深度学习模型,可以按照以下步骤进行: 1. 数据准备:首先,你需要准备好用于训练的数据集。这包括标注好的图像和对应的标签。确保数据集具有足够的多样性和覆盖性。 2. 模型选择:根据你的任务需求和数据集特点,选择适合的深度学习模型架构。Halcon支持常见的深度学习框架(如TensorFlow和Caffe),你可以在这些框架中选择合适的模型进行训练。 3. 数据预处理:对于深度学习模型的训练,通常需要进行数据预处理,包括图像尺寸调整、数据增强、归一化等操作。你可以使用Halcon提供的图像处理功能对数据进行预处理。 4. 模型训练:使用选定的深度学习框架,在Halcon外部进行模型训练。你可以使用TensorFlow或Caffe等框架提供的API和工具进行模型训练。根据框架的文档和示例,设置好训练参数,加载数据集,开始训练。 5. 导入模型:在模型训练完成后,将训练好的模型导入到Halcon中进行图像处理任务。Halcon提供了接口和函数,用于加载和使用深度学习模型。 6. 模型推理:使用导入的模型进行图像处理任务。你可以将待处理的图像输入到模型中,进行推理得到结果。根据任务需求,可以使用Halcon提供的函数进行后续的处理和分析。 需要注意的是,Halcon虽然提供了对深度学习模型的支持,但深度学习的训练过程主要在外部进行。Halcon更多地用于模型的部署和应用。因此,在自定义训练深度学习模型时,你需要结合Halcon和外部深度学习框架进行相关操作。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值