Halcon DeepLearning深度学习模型训练及预测流程(目标检测为例)


😐 😐 😐
Halcon提供了深度学习模型训练的功能,所提供的函数都有明确的解释,以及对输入参数的检查,提供明确报错提示。下文所阐述的,按顺序一步步拼凑起来就可以训练你自己的模型啦。

Data 训练样本准备

德国视觉MVTec提供了深度学习标注软件工具Deep Learning Tool

在这里插入图片描述

  • 创建轴平行矩阵项目(rectangle1)或者自由矩阵项目(rectangle2).dltp项目文件,并根据自己需求完成标签类别创建与标注。
    在这里插入图片描述
    在这里插入图片描述
  • 完成标注后,导出标注信息文件.hdict文件,.hdict文件包含以下信息:class_ids、class_names、samples(里面包含image_id、image_file_name、bbox_label_id、以及rectangle1或者rectangle2的参数信息)、image_dir(数据根目录);使用read_dict(hdictPath, [], [], dictHandle)函数能查看句柄信息,如果数据集路径发生迁移或者变动,可更改.hdict文件的信息。
    在这里插入图片描述

backbone 骨干模型准备(预训练模型)

halcon提供了AlexNet、ResNet、MobileNet、enhanced模型四种backbone,需要的时候则在halcon安装路径下寻找对应得.hdl文件即可。在网络选择上,不考虑资源成本的情况下,简单样本可以选择更为轻便的AlexNet、MobileNet结构简单的网络,收敛速度快,同时也不容易过拟合;复杂样本则选择ResNet、enhanced网络,以此获得更高的检测准确率。资源较为受限的情况下根据训练结果情况挑选模型即可。

  1. pretrained_dl_classifier_alexnet.hdl :AlexNet网络,训练时候占用资源较少,在有限的内存资源中,相比与其他网络能获取更大的batch_size进行训练,加速收敛;
  2. pretrained_dl_classifier_resnet50.hdl :经典ResNet网络,训练时较为稳定,但耗费资源较大,训练时候需要采用较小的学习率进行训练;
  3. pretrained_dl_classifier_mobilenet_v2.hdl:MobileNet是经典的轻量级神经网络框架,采用深度可分离卷积进行提取特征,使用更小的参数量能获得等价大小2D卷积核的特征获取方式,拥有体积小、推理功耗低等特点,适合移动及嵌入式设备的使用。训练时候占用资源比AlexNet稍大;
  4. pretrained_dl_classifier_enhanced.hdl:(未使用过)根据halcon提供的算子描述,该骨干网络架构有更多的隐藏层(即网络架构更为复杂),可以胜任更复杂的分类任务。

Dataset 数据划分(训练集与验证集)

  • 设置训练集及验证集划分的百分比
TrainingPercent := 80
ValidationPercent := 20
  • 设置随机种子(随机种子不变,验证集与验证集分配结果则不变)
* In order to get a reproducible split we set a random seed. *
* This means that rerunning the script results in the same split of DLDataset. *
SeedRand := 42
set_system('seed_rand',SeedRand)
  • 读取数据集并划分
    split_dl_dataset(DLDataset,TrainingPercent , ValidationPercent, GenParam)函数
  1. 首先会检查GenParam中是否存在‘oversplit’的key,如果不存在该key,并且.hdict文件中本身已经被划分好了训练集与验证集,即samples中的信息带有’split’的key和【train、validation、test】的value,则会报错,一般直接导出的hdict标注文件都不会带有‘split’的key,可以不用管;
  2. 对.hdict标注文件中‘samples’的key的信息,判断标注的类型的rectangle1还是rectangle2;
  3. 根据GenParam是否存在‘oversplit’的key,检查或者覆盖samples中是否存在‘split’的key;
  4. 把samples中的‘image_id’进行随机分配,并根据提供的比例划分数据集,并赋予‘split’的key和【train、validation、test】的value。
dictFile:=dictPath   //.hdict文件的路径 
read_dict (dictFile, [], [], DLDataset) //读取标注文件
get_dict_param (DLDataset, 'keys', [], ParamKeyName)  //获取标注文件中的键字(用于查看)
split_dl_dataset (DLDataset,TrainingPercent , ValidationPercent, [])

在这里插入图片描述


*检查标签方法

create_dict (WindowDict)
get_dict_tuple (DLDataset, 'samples', DatasetSamples)
for Index := 0 to 9 by 1 //根据需求调整数量
    *SampleIndex := round(rand(1) * (|DatasetSamples| - 1))
    SampleIndex :=Index
    read_dl_samples (DLDataset, SampleIndex, DLSample)
    dev_display_dl_data (DLSample, [], DLDataset, 'bbox_ground_truth', [], WindowDict)
    dev_disp_text ('Press F5 to continue', 'window', 'bottom', 'right', 'black', [], [])
    stop ()
endfor
dev_close_window_dict (WindowDict)

*检查数据划分后的结果

get_dict_tuple (DLDataset, 'samples', DatasetSamples)
find_dl_samples (DatasetSamples, 'split', 'train', 'match', TrainSampleIndices)
find_dl_samples (DatasetSamples, 'split', 'test', 'match', testSampleIndices)
find_dl_samples (DatasetSamples, 'split', 'validation', 'match', validationSampleIndices)

DLModelHandle 创建模型句柄

* 获取目标检测模型参数

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值