Halcon 深度学习之语义分割 预处理 案例解析

这篇具有很好参考价值的文章主要介绍了Halcon 深度学习之语义分割 预处理 案例解析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

语义分割 预处理


前言

声明:本篇是个人针对于语义分割预处理案例的理解,有理解不到位或者错误的地方,还望各位能够给予指正,在此表示感谢!

例子名称: segment_pill_defects_deep_learning_1_preprocess


一、预处理的目的是什么?

1、设置图像预处理的参数,此部分参数后续会写入到训练模型当中,具体参数信息如下图

Halcon 深度学习之语义分割 预处理 案例解析

2、得到语义分割的文件,用于后续的训练当中,语义分割可通过多种方式生成

①:导入原图文件夹,标注文件夹,类别信息等
②:通过Deep Learning Tool 工具创建的语义分割文件【内部的信息也跟①的一样】
②:通过Deep Learning Tool工具创建的语义分割分拣,所导出的数据集文件.hdict【内部的信息也跟①方式生成的一样】
语义分割文件参数具体如下图
Halcon 深度学习之语义分割 预处理 案例解析

二、案例分块解析

1.案例说明部分,可跳过

* 一 :显示该例子介绍信息 
ShowExampleScreens := false
dev_example_init (ShowExampleScreens, ExampleInternals)
* 
if (ShowExampleScreens)
    * 
    * Introduction text of example series.
    dev_display_screen_introduction_part_1 (ExampleInternals)
    stop ()
    dev_display_screen_introduction_part_2 (ExampleInternals)
    stop ()
    * 
    * Explain semantic segmentation data.
    dev_display_screen_segmentation_data (ExampleInternals)
    stop ()
    * 
    * Explain splitting the dataset.
    dev_display_screen_split_dataset (ExampleInternals)
    stop ()
    * 
    * Explain preprocessing parameters.
    dev_display_screen_preprocessing_params (ExampleInternals)
    stop ()
    dev_display_screen_weight_images (ExampleInternals)
    stop ()
    * 
    * Explain the next steps.
    dev_display_screen_next_steps (ExampleInternals)
    stop ()
endif

2.设置深度学习模型文件的路径,其为相对路径的方式

* 原图像目录
ImageDir := 'pill'
* 分割图像存放文件夹,即标注的缺陷区域
SegmentationDir := 'labels/pill'
* 生成文件的根目录
ExampleDataDir := 'segment_pill_defects_data'
DataDirectoryBaseName := ExampleDataDir + '/dldataset_pill_'
* 模型预处理参数的文件名
PreprocessParamFileBaseName := '/dl_preprocess_param.hdict'

注:后续读取的算子
*读取分割模型数据集 (原图像目录,标注的缺陷目录,  标注类别),类别对应ID)         
* DLDataset 实际上Deep Lerning Tool 创建的标注文件.hdict
read_dl_dataset_segmentation (ImageDir, SegmentationDir, ClassNames, ClassIDs, [], [], [], DLDataset)

3.预处理参数的设置

* 缺陷标签类别:好的,脏污,断裂
ClassNames := ['good','contamination','crack']
* 相应的标注序号,即灰度值索引
ClassIDs := [0,1,2]
* 拆分数据集的百分比 训练百分之70  确认百分之15【即每学习一段时间后,从此部分抽出一些进行识别验证,判断学习的准确程度】
TrainingPercent := 70
ValidationPercent := 15
*设置预处理图片的相应信息, 图片尺寸,图片彩色—— 
*①、此处可对图片进行压缩,
*②、但后续图像进行推理的时候,也需要对原图进行相应的压缩,不然推理的缺陷区域会与原图缺陷区域对应不上。
*③、图片越大相应的硬件要求也高一些
ImageWidth := 400
ImageHeight := 400
ImageNumChannels := 3
* 设置图片灰度值的范围,范围是-127128,即为byte,有疑问
ImageRangeMin := -127
ImageRangeMax := 128
*设置进一步预处理的相应参数
*正常化参数,暂不明其意
NormalizationType := 'none'
*域处理参数,full_domain 即所操作的范围为全图
DomainHandling := 'full_domain'
IgnoreClassIDs := []
SetBackgroundID := []
ClassIDsBackground := []

注:后续设置的算子
*创建预处理模型参数(语义分割,图像宽,高,通道数,最低灰度值,最高灰度值,正常化参数,操作区域范围,图像背景信息[],[],[],[],out 预处理参数句柄)
create_dl_preprocess_param ('segmentation', ImageWidth, ImageHeight, ImageNumChannels, ImageRangeMin, ImageRangeMax, NormalizationType, DomainHandling, IgnoreClassIDs, SetBackgroundID, ClassIDsBackground, [], DLPreprocessParam)
* 

4.导出语义分割文件与保存预处理文件

*创建一个空字典
create_dict (GenParam)
*是否覆盖文件
set_dict_tuple (GenParam, 'overwrite_files', true)

*预处理模型数据集 导出语义分割文件 即DLDatasetFilename 
*将每张图片结合标注的信息,以及缺陷的权重,以hdict文件的格式记录,每张图片对应一个hdict【可不需要】,。。。。。。
preprocess_dl_dataset (DLDataset, DataDirectory, DLPreprocessParam, GenParam, DLDatasetFilename)

PreprocessParamFile := DataDirectory + PreprocessParamFileBaseName
*将当前的句柄保存下来,即保存当前预处理的相关参数
write_dict (DLPreprocessParam, PreprocessParamFile, [], [])

5.从训练集当中,随机抽取十张查看预处理效果

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
    * Loop over samples in DLSampleBatchDisplay.
    dev_display_dl_data (DLSampleBatchDisplay[Index], [], DLDataset, ['image','segmentation_image_ground_truth'], [], WindowHandleDict)
    get_dict_tuple (WindowHandleDict, 'segmentation_image_ground_truth', WindowHandleImage)
    dev_set_window (WindowHandleImage[1])
    Text := 'Press Run (F5) to continue'
    dev_disp_text (Text, 'window', 400, 40, 'black', [], [])
    stop ()
endfor

6.附个人注释的代码

* 
* This example is part of a series of examples, which summarizes
* the workflow for DL segmentation. It uses the MVTec pill dataset.
* 
* The four parts are:
* 1. Dataset preprocessing.    预处理:数据集预处理
* 2. Training of the model.    训练:模型的训练
* 3. Evaluation of the trained model.   评估:对训练模型的评估
* 4. Inference on new images.         推理:对新图像的推断
* 
* 第一部分:数据预处理
* 
dev_update_off ()
* 一 :显示该例子介绍信息 
ShowExampleScreens := false
dev_example_init (ShowExampleScreens, ExampleInternals)
* 
if (ShowExampleScreens)
    * 
    * Introduction text of example series.
    dev_display_screen_introduction_part_1 (ExampleInternals)
    stop ()
    dev_display_screen_introduction_part_2 (ExampleInternals)
    stop ()
    * 
    * Explain semantic segmentation data.
    dev_display_screen_segmentation_data (ExampleInternals)
    stop ()
    * 
    * Explain splitting the dataset.
    dev_display_screen_split_dataset (ExampleInternals)
    stop ()
    * 
    * Explain preprocessing parameters.
    dev_display_screen_preprocessing_params (ExampleInternals)
    stop ()
    dev_display_screen_weight_images (ExampleInternals)
    stop ()
    * 
    * Explain the next steps.
    dev_display_screen_next_steps (ExampleInternals)
    stop ()
endif



*二:设置深度学习模型文件的路径,其为相对路径的方式
* 原图像目录
ImageDir := 'pill'
* 分割图像存放文件夹,即标注的缺陷区域
SegmentationDir := 'labels/pill'
* 生成文件的根目录
ExampleDataDir := 'segment_pill_defects_data'
DataDirectoryBaseName := ExampleDataDir + '/dldataset_pill_'
* 模型预处理参数的文件名
PreprocessParamFileBaseName := '/dl_preprocess_param.hdict'


* 三:设置训练的相应参数
* 缺陷标签类别:好的,脏污,断裂
ClassNames := ['good','contamination','crack']
* 相应的标注序号,即灰度值索引
ClassIDs := [0,1,2]
* 拆分数据集的百分比 训练百分之70  确认百分之15【即每学习一段时间后,从此部分抽出一些进行识别验证,判断学习的准确程度】
TrainingPercent := 70
ValidationPercent := 15
*设置预处理图片的相应信息, 图片尺寸,图片彩色—— 
*①、此处可对图片进行压缩,
*②、但后续图像进行推理的时候,也需要对原图进行相应的压缩,不然推理的缺陷区域会与原图缺陷区域对应不上。
*③、图片越大相应的硬件要求也高一些
ImageWidth := 400
ImageHeight := 400
ImageNumChannels := 3
* 设置图片灰度值的范围,范围是-127128,即为byte,有疑问
ImageRangeMin := -127
ImageRangeMax := 128
*设置进一步预处理的相应参数
*正常化参数,暂不明其意
NormalizationType := 'none'
*域处理参数,full_domain 即所操作的范围为全图
DomainHandling := 'full_domain'
IgnoreClassIDs := []
SetBackgroundID := []
ClassIDsBackground := []
* 
*设置一个随机种子,不设置的话会已当前时间段生成一个随机种子,具体干嘛的暂无感触
SeedRand := 42
set_system ('seed_rand', SeedRand)


*四:读取分割数据集,并设置相应好坏种类的比例 
* Read the dataset.   
*读取分割模型数据集          (原图像目录,标注的缺陷目录,  标注类别),类别对应ID),          DLDataset 分割数据集的句柄,记录着传进来的各种参数信息
* DLDataset 实际上Deep Lerning Tool 创建的标注文件.hdict
read_dl_dataset_segmentation (ImageDir, SegmentationDir, ClassNames, ClassIDs, [], [], [], DLDataset)
*生成拆分数据集, 训练的70   确认的15,要额外设置
split_dl_dataset (DLDataset, TrainingPercent, ValidationPercent, [])


*判断一下相应路径是否存在,如果不存在的话,则新建路径
file_exists (ExampleDataDir, FileExists)
if (not FileExists)
    *后续会在此目录下生成每张图片的hdict文件,里面记录着图片的尺寸信息,分割区域,推断区域等,详情见图
    make_dir (ExampleDataDir)
endif

*创建预处理模型参数(语义分割,图像宽,高,通道数,最低灰度值,最高灰度值,正常化参数,操作区域范围,图像背景信息[],[],[],[],out 预处理参数句柄)
create_dl_preprocess_param ('segmentation', ImageWidth, ImageHeight, ImageNumChannels, ImageRangeMin, ImageRangeMax, NormalizationType, DomainHandling, IgnoreClassIDs, SetBackgroundID, ClassIDsBackground, [], DLPreprocessParam)
* 
* Dataset directory for any outputs written by preprocess_dl_dataset.
DataDirectory := DataDirectoryBaseName + ImageWidth + 'x' + ImageHeight
* 
*创建一个空字典
create_dict (GenParam)
*是否覆盖文件
set_dict_tuple (GenParam, 'overwrite_files', true)
*预处理模型数据集 生成语义分割文件 即DLDatasetFilename 
*将每张图片结合标注的信息,以及缺陷的权重,以hdict文件的格式记录,每张图片对应一个hdict【可不需要】,。。。。。。
preprocess_dl_dataset (DLDataset, DataDirectory, DLPreprocessParam, GenParam, DLDatasetFilename)
* 
* Store preprocess params separately in order to use it e.g. during inference.
PreprocessParamFile := DataDirectory + PreprocessParamFileBaseName
*将当前的句柄保存下来,即保存当前预处理的相关参数
write_dict (DLPreprocessParam, PreprocessParamFile, [], [])

*五: 验证,实时反馈
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
    * Loop over samples in DLSampleBatchDisplay.
    dev_display_dl_data (DLSampleBatchDisplay[Index], [], DLDataset, ['image','segmentation_image_ground_truth'], [], WindowHandleDict)
    get_dict_tuple (WindowHandleDict, 'segmentation_image_ground_truth', WindowHandleImage)
    dev_set_window (WindowHandleImage[1])
    Text := 'Press Run (F5) to continue'
    dev_disp_text (Text, 'window', 400, 40, 'black', [], [])
    stop ()
endfor
* 
* Close windows that have been used for visualization.
dev_close_window_dict (WindowHandleDict)
* 
if (ShowExampleScreens)
    * Hint to the DL segmentation training process example.
    dev_display_screen_next_example (ExampleInternals)
    stop ()
    * Close example windows.
    dev_close_example_windows (ExampleInternals)
endif

个人总结

预处理这块的代码量虽然很多,但大多数是用于介绍等,实际上,当有标注好的文件,在设置上图像的一些信息
如:图像宽度,高度,通道,训练的模式【CPU || GPU】 训练集与验证集的比例,缺陷放大的权重参数,即可完成图像预处理
个人也是刚刚接触的深度学习这块,总结不到位或者理解错误的地方,希望各位能够给予指正,再次感谢大家!文章来源地址https://www.toymoban.com/news/detail-491154.html

到了这里,关于Halcon 深度学习之语义分割 预处理 案例解析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 动手学深度学习——数据预处理

    为了能用深度学习来解决现实世界的问题,我们经常从预处理原始数据开始,而不是从那些准备好的张量格式数据开始。 在Python中常用的数据分析工具中,我们通常使用 pandas 软件包。像庞大的Python生态系统中的许多其他扩展包一样, pandas 可以与张量兼容。 举一个例子,我

    2024年02月16日
    浏览(55)
  • 深度学习预备知识-数据存储、数据预处理

    为了能够完成各种数据操作,我们需要某种方法来存储和操作数据。 通常,我们需要做两件重要的事: (1)获取数据; (2)将数据读入计算机后对其进行处理。 如果没有某种方法来存储数据,那么获取数据是没有意义的。 首先,我们介绍n维数组,也称为 张量 (tensor)

    2024年01月17日
    浏览(40)
  • 【3D 图像分割】基于 Pytorch 的 3D 图像分割6(数据预处理之LIDC-IDRI 标签 xml 标签转储及标记次数统计 )

    由于之前哔站作者整理的 LUNA16 数据处理方式过于的繁琐,于是,本文就对 LUNA16 数据做一个新的整理,最终得到的数据和形式是差不多的。但是,主要不同的是代码逻辑比较的简单,便于理解。 对于 LUNA16 数据集的学习,可以去参考这里:【3D 图像分类】基于 Pytorch 的 3D 立

    2024年02月04日
    浏览(48)
  • 深度学习中基于python的预处理和图像扩增方法

    容易出现的报错: 错误原因通常为保存的路径不正确: 应改为: 即第一个参数应该写到文件的名称,而不能只写到文件夹就停止。 灰度图片和黑白图片有些相似,但并不完全相同。 灰度图片是指每个像素点的颜色由灰度值来表示,通常使用8位无符号整数(0-255)表示。灰

    2024年02月08日
    浏览(39)
  • 数据预处理的人工智能与深度学习:如何提高模型性能

    数据预处理是人工智能(AI)和深度学习(DL)领域中的一个关键环节,它涉及到数据清洗、数据转换、数据归一化、数据增强等多种操作,以提高模型性能。在过去的几年里,随着数据规模的增加和复杂性的提高,数据预处理的重要性得到了广泛认识。本文将从以下几个方面进行

    2024年02月19日
    浏览(73)
  • Python数据挖掘 数据预处理案例(以航空公司数据为例)

    1、数据清洗 2、数据集成 3、数据可视化 根据航空公司系统内的客户基本信息、乘机信息以及积分信息等详细数据,依据末次飞行日期( LAST_FLIGHT_DATE),以2014年3月31日为结束时间,选取宽度为两年的时间段作为分析观测窗口,抽取观测窗口2012年4月1日至2014年3月31日内有乘机记

    2024年02月04日
    浏览(39)
  • 深度学习中用来训练的train.py 探究学习2.1( 数据预处理)

    下列为mmcls中数据预处理部分  train_pipeline是一个训练过程的配置列表,用于定义数据预处理的步骤。下面是train_pipeline中各个步骤的介绍: 1. LoadImageFromFile:从文件中加载图像。 2. RandomResizedCrop:随机缩放裁剪图像到指定大小。 3. RandomFlip:以一定的概率随机水平翻转图像。

    2024年02月04日
    浏览(53)
  • GEO生信数据挖掘(六)实践案例——四分类结核病基因数据预处理分析

    前面五节,我们使用阿尔兹海默症数据做了一个数据预处理案例,包括如下内容: GEO生信数据挖掘(一)数据集下载和初步观察 GEO生信数据挖掘(二)下载基因芯片平台文件及注释 GEO生信数据挖掘(三)芯片探针ID与基因名映射处理 GEO生信数据挖掘(四)数据清洗(离群值

    2024年02月07日
    浏览(53)
  • <2>【深度学习 × PyTorch】pandas | 数据预处理 | 处理缺失值:插值法 | networkx模块绘制知识图谱 | 线性代数初步

      你永远不可能真正的去了解一个人,除非你穿过ta的鞋子,走过ta走过的路,站在ta的角度思考问题,可当你真正走过ta走过的路时,你连路过都会觉得难过。有时候你所看到的,并非事实真相,你了解的,不过是浮在水面上的冰山一角。—————《杀死一只知更鸟》   🎯

    2024年02月01日
    浏览(45)
  • 【机器学习算法】KNN鸢尾花种类预测案例和特征预处理。全md文档笔记(已分享,附代码)

    本系列文章md笔记(已分享)主要讨论机器学习算法相关知识。机器学习算法文章笔记以算法、案例为驱动的学习,伴随浅显易懂的数学知识,让大家掌握机器学习常见算法原理,应用Scikit-learn实现机器学习算法的应用,结合场景解决实际问题。包括K-近邻算法,线性回归,逻

    2024年02月19日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包