Halcon参考手册语义分割和边缘提取知识总结

1.1 语义分割和边缘提取介绍

通过语义分割,我们使用深度学习(DL)网络将输入图像的每个像素分配给一个类。

图(1)语义分割示例

在图(1)中,输入图像的每个像素都被分配给一个类,但是'苹果'的三个不同实例和'橘子'的两个不同实例都不是可区分的对象。

语义分割的结果是输出图像,其中像素值表示输入图像中对应像素的分配类。因此,在HALCON中,输出图像与输入图像具有相同的大小。对于一般的深度学习网络,表示更复杂特征的深层特征图通常比输入图像小。为了获得与输入相同大小的输出,HALCON使用具有两个组件的分割网络:编码器和解码器。编码器确定输入图像的特征,例如,用于基于深度学习的分类。由于这些信息是以压缩格式“编码”的,因此需要解码器将信息重构为期望的结果,在这种情况下,就是将每个像素分配给一个类。注意,在对像素进行分类时,不会将同一类的重叠实例区分为不同的。

边缘提取是语义分割的一种特殊情况,其中模型被训练以区分两类:边缘和背景。

图(2)边缘提取示例

在图(2)中,语义分割的一个特殊情况,其中输入图像的每个像素被分配到两个类中的一个:“边缘”或“背景”。

1.2 语义分割和边缘提取通用工作流程

本小节描述了基于深度学习的语义分割任务的一般工作流程。具体分为数据预处理、模型训练、训练后模型的评价和对新图像的推断四个部分。HDevelop示例segment_pill_defects_deep_learning显示了语义分割应用程序的完整工作流程;示例segment_edges_deep_learning_with_retraining显示了边缘提取应用程序的完整工作流程。

(1) 数据预处理

①通过read_dl_dataset_segmentation()函数来获取训练数据集要找到的数据信息。这样就创建了一个字典DLDataset,它充当数据库,存储有关数据的所有必要信息。

②通过split_dl_dataset()函数对字典DLDataset表示的数据集进行拆分,并结果将保存在DLDataset的每个样本的split键上。

③使用preprocess_dl_dataset()函数进行数据集预处理。使用create_dl_preprocess_param()函数将所有参数及其值存储在字典DLPreprocessParam中。

(2) 模型训练

①通过read_dl_model()算子读取网络模型。

②通过set_dl_model_param()算子设置模型参数,例如'image_dimensions'和'class_ids'等;可以通过get_dl_model_param()算子检索当前参数值。

③使用create_dl_train_param()函数来设置训练参数并存储在字典TrainParam中。这些参数包括:超参数、训练时评估的参数、用于训练结果可视化的参数、和用于序列化的参数。

④使用train_dl_model()来训练模型。该函数的参数有模型句柄DLModelHandle、包含数据信息DLDataset的字典、带有训练参数'TrainParam'的字典信息和训练需要运行多少epochs。在使用过程train_dl_model的情况下,总损失以及可选的评估度量将被可视化。

(3) 模型评估

①使用set_dl_model_param()算子设置可能影响计算的模型参数,例如,'batch_size'。

②使用evaluate_dl_model()函数进行评估。

③字典EvaluationResult保存了所要求的评估度量。

可以使用dev_display_segmentation_evaluation()函数过程可视化评估结果。

(4) 模型推理

①使用set_dl_model_param()算子设置参数,例如'batch_size'。

②可以使用gen_dl_samples_from_images()函数来为每个图像生成数据字典DLSample。

③使用preprocess_dl_samples()函数对训练图像进行预处理。在预处理步骤中保存字典DLPreprocessParam时,可以直接使用它作为输入来指定所有参数值。

④使用apply_dl_model()算子进行模型推理。

⑤从字典'DLResultBatch'中检索结果。可以在分割图像上使用threshold 算子来选择特定类的区域。

1.3 语义分割和边缘提取补充说明

(1)用于训练和推理的数据(Data for training and evaluation)

①Classes

不同的类是由网络划分的集合或类别。它们在字典DLDataset中设置,并通过set_dl_model_param()算子传递给模型。

在语义分割中,注意有两个特殊情况:类 'background'和声明为'ignore'的类

'background'类:网络像对待其他类一样对待背景类。也没有必要有背景类,但如果你的数据集中有不同的类,你不感兴趣,尽管它们必须由网络学习,你可以把它们都设置为'background' 。因此,背景类将更加多样化。有关更多信息,请参阅过程preprocess_dl_samples()函数。

'ignore'类:有可能将一个或多个类声明为'ignore'。分配给'ignore'类的像素将被损失以及所有测量和评估忽略。网络不会将任何像素分类为'ignore'类。同样,被标记为属于此类的像素将被网络分类为非'ignore'类,就像其他像素一样。在下图给出的示例中,网络也会对'border'类的像素进行分类,但是它不会将任何像素分类到'border'类中。你可以使用set_dl_model_param()算子将参数'ignore_class_ids' 声明为'ignore' 类。

在边缘提取中,只区分两类:'edge'和'background'。'edge'类的标签与普通类一样。因此,只有一个类被标记,这个类被称为'edge'。

②DLDataset

这个字典作为一个数据库,这意味着,它存储了网络所需的所有数据信息,例如,图像的名称、路径和类等。通过键segmentation_dir和segmentation_file_name,可以提供它们的命名方式和保存位置的信息。

③segmentation_image

为了让网络能够学习,不同类的成员看起来是什么样子,你可以告诉训练数据集中每个图像的每个像素它属于哪个类。这是通过在相应的segmentation_image中为输入图像的每个像素存储编码为像素值的类来实现的。

图(3)segmentation_image模式

在图(3)中为了提高可见度,灰度值被用来表示数字。图(3-1)为输入图像;图(3-2)为相应的segmentation_image注释,0:背景(白色),1:橙子,2:柠檬,3:苹果和4:边界(黑色)作为一个单独的类,所以我们可以将其声明为“忽略”。

你需要足够的训练数据来将其分成三个子集,一个用于训练,一个用于验证,一个用于测试网络。这些子集最好是独立且相同分布的。对于数据集,可以使用split_dl_data_set()函数。

(2)网络输出( Network output)

网络输出取决于任务:

培训:作为输出,将返回一个字典DLTrainResult,其中包含总损失的当前值以及模型中包含的所有其他损失值。

推理与评价:作为输出,网络将为每个样本返回一个字典DLResult。

对于语义分割,该字典将为每个输入图像包括以下两个图像句柄。

segmentation_image:图像中每个像素都有一个值,对应于它对应的像素被分配给的类(见下图)。

segmentation_confidence:图像中每个像素都具有输入图像中对应像素分类的置信度值(见下图)。

图(4)不同数据在图像上的模式

在图(4)中,为了提高可见度,灰度值被用来表示数字。图(4-1) 为segmentation_image:被声明为'ignore'的类的像素(见上图)被分类。图(4-2)为 segmentation_confidence。

(3)模型参数和超参数(Model Parameters and Hyperparameters)

语义分割相关的超参数:'class weights';对于语义分割模型,模型参数以及超参数('class weights')使用set_dl_model_param()算子设置。注意,由于内存使用量很大,通常只能使用小批处理进行训练。因此,训练相当缓慢,我们建议使用比例如更高的动量进行分类。

①'class weights'

使用超参数'class weights',您可以为每个类分配其像素在训练期间获得的权重。给独特的类赋予不同的权重,就有可能迫使网络学习不同重要性的类。这在类控制图像的情况下是有用的,例如,缺陷检测,缺陷只占图像中的一小部分。在这种情况下,将每个像素分类为背景(因此,“非缺陷”)的网络通常会获得良好的损失结果。为不同的类分配不同的权重有助于重新平衡分布。简而言之,可以将损失集中在训练上,特别是那些被认为是重要的像素。

网络在为每个训练样本创建的图像上获得这些权重。每个像素值为输入图像对应像素在训练过程中获得的权重。

Calculate_class_weights_segmentation()函数用来创建类权重。

Gen_dl_segmentation_weight_images()函数使用类权重并生成weight_image。

这个超参数在程序中被称为class_weights或ClassWeights。下图显示了不同权重的图像。注意,给图像的特定部分赋予权重0.0,这些像素不会导致损失。

图(5)weight_image模式。

图(5-1) segmentation_image定义图像中每个像素的类,0:背景(白色),1:橙子,2:柠檬,3:苹果,4:边界(黑色),声明为“忽略”。图(5-2)对应的weight_image提供类权重,背景:1.0,橙子:30.0,柠檬:75.0,声明为“ignore”的类的像素,这里是类边界,将被忽略并获得权重0.0。

(4) 语义分割数据评估方法(Evaluation measures for the Data from Semantic Segmentation)

①pixel_accuracy

像素精确率就是用正确预测的所有像素与像素总数的比率。

图(6)pixel_accuracy示例

在图(6-1) segmentation_image定义每个像素为ground truth 类。声明为 'ignore' 的类的像素被画成黑色。在图(6-2)为输出图像,以及声明为 'ignore' 的类的像素也会被分类;(3)像素准确率为总橙色面积之比。注意,标记为 'ignore' 的类的一部分的像素将被忽略。

②class_pixel_accuracy

每类像素准确率只考虑单个类的像素。每类像素准确率被定义为该类正确预测的像素/用该类标记的像素总数。如果没有出现类,它将获得class_pixel_accuracy值-1,并且不贡献平均值mean_accuracy。

③mean_accuracy

每个类像素准确率(class_pixel_accuracy)的平均值。

④class_iou

每类IoU(class_iou)为特定类提供正确预测像素与ground truth的交集与它们并集的比率。

如果一个类没有出现,它的class_iou值为-1,并且不会对mean_iou产生影响。

⑤mean_iou

求出每个类iou(class_iou)取平均值。

⑥frequency_weighted_iou

对于mean_iou首先计算每个类的IoU。但是,每个发生类对该度量的贡献是由属于该类的像素的所占比例加权求出的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/216560.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Canal实时同步MySQL数据到ES

一、canal简介 canal主要用途是对MySQL数据库增量日志进行解析,提供增量数据的订阅和消费,简单说就是可以对MySQL的增量数据进行实时同步,支持同步到MySQL、Elasticsearch、HBase等数据存储中去。 早期阿里巴巴因为杭州和美国双机房部署&…

typescript个人学习笔记

https://ts.xcatliu.com/basics/primitive-data-types.html 深受启发 1.剑谱第一页,初始化ts outDir表示把ts编译成js文件,文件编译后存放的位置 2.类型声明 undefined可以赋值给其他类型

企业电子招投标采购系统源码之鸿鹄电子招投标系统+电子招投标的组成

鸿鹄招投标系统的功能描述 1、门户管理:用户可通过门户页面查看所有公告信息及相关通知信息,包括招标公告、非招标公告、系统通知和政策法规等板块。 2、立项管理:企业用户可以对需要采购的项目进行立项申请,并提交审批&#xff0…

【Cisco Packet Tracer】路由器实验 静态路由/RIP/OSPF/BGP

本教程讲解路由器的静态IP配置、RIP、OSPF、BGP等实验内容。 一、基本设置 绘制以下拓扑结构: PC0设置: PC1设置: Router0端口0设置: Router0端口1设置: Router1端口0设置: Router1端口1设置&#xff1a…

LAMP安装部署网站

目录 什么是LAMP? 实验(搭建一个论坛) 一,安装apache 1.关闭防火墙,将安装Apache所需软件包传到/opt目录下 2.安装环境依赖包 3.配置软件模块 4.编译及安装 5.优化配置文件路径,并把httpd服务的可执行程序文件…

跨国企业在跨境数据传输时需要注意的几点

对于跨国企业而言,跨境数据传输是一个极为关键的组成部分。这不仅涉及到数据的安全性、合规性和效率,还直接关系到企业的竞争力和未来发展前景。因此,在进行跨境数据传输时,企业需要特别关注以下几个关键点,并采取相应…

Geotrust中的dv ssl证书

DV SSL数字证书是入门级的数字证书,Geotrust的子品牌RapidSSL旗下的SSL数字证书产品都是入门级的SSL数字证书——DV基础型单域名SSL证书和DV基础型通配符SSL证书。今天就随SSL盾小编了解Geotrust旗下的DV SSL证书。 1.Geotrust旗下的DV基础型单域名SSL证书能够保护…

浪涌Surge整改的意义与分析?|深圳比创达电子EMC

浪涌Surge是指电器开关或突变引起的短暂电流过高的现象。当电器设备在开关、中断或突变的瞬间,电流会剧烈变化,造成电压的瞬时上升,这就是浪涌Surge。 在日常生活中,浪涌Surge可能会导致电器设备的损坏,或者对人身安全…

【Proteus仿真】【STM32单片机】定时智能插座开关

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真STM32单片机控制器,使LCD1602液晶,DS18B20温度传感器、按键、蜂鸣器、继电器开关、HC05蓝牙模块等。 主要功能: 系统运行后,LCD1602…

js 生成分享码或分享口令

代码 function getShareToken(length) {var characters ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789;var shareToken ;for (var i 0; i < length; i) {var randomIndex Math.floor(Math.random() * characters.length);var randomChar character…

python实战演练之迎接冬至的第一场雪

写在前面 WINTER IS COMING Python实现大雪纷飞的效果&#xff0c;完整代码在文末哦~ 准备开始 WINTER IS COMING Python是一种高级编程语言&#xff0c;Turtle是Python的一个图形化模块&#xff0c;它可以帮助学习者更好地理解编程概念&#xff0c;同时可以进行图形化编程。 …

YOLOv8改进实验:一文了解YOLOv8如何打印FPS指标

💡该教程为改进YOLOv8指南,属于《芒果书》📚系列,包含大量的原创首发改进方式🚀 💡🚀🚀🚀本博客内含改进源代码,按步骤操作运行改进后的代码即可 💡更方便的统计更多实验数据,方便写作 新增YOLOv8打印FPS指标 完善(一键YOLOv8打印FPS指标) 文章目录 完善…

【(较大规模)作业车间调度JSP】通过OR-Tools的区间变量建模求解的效率对比实验

文章目录 问题描述Python调用OR-Tools建模求解&#xff08;实验一&#xff09;1. 声明问题的模型2. 创建区间变量3. 创建约束条件4. 求解模型5. 基于 plotly 展示甘特图 不同场景下的求解效率对比实验二&#xff1a;工件的工序数有差异实验三&#xff1a;消除工件的加工时长差异…

节日气氛拉满的毛衣~你喜欢吗?

节日氛围感毛衣一眼就心动采用北极绒面料厚实软糯有质感拼接彩点正是氛围感的来源 整件穿上超级显白显气质 随便搭件牛仔裤还是休闲裤 来穿都很亮眼&#xff01;&#xff01;

Nginx首页修改及使用Nginx实现端口转发

按照我之前博客给的方法搭建好这样一个CTF靶场 但是呢它默认是在8000端口 如何直接访问IP地址或者域名就可以实现直接访问到靶场呢 我们需要将80端口的内容转发到8000&#xff0c;使用nginx实现端口转发功能 首先我们安装nginx&#xff1a; 安装工具和库 yum -y install gc…

CompletableFuture使用小结

为什么需要CompletableFuture CompletableFuture继承了CompletionStage接口和Future接口&#xff0c;在原有Future的基础上增加了异步回调、流式处理以及任务组合&#xff0c;成为JDK8多任务协同场景下一个有效利器。 CompletableFuture使用示例 提交有返回值的异步任务 通…

AI全栈大模型工程师(二十四)常用的超参

文章目录 七、先介绍几个常用的超参7.1、过拟合与欠拟合7.2、学习率调整策略八、自然语言处理常见的网络结构8.1、文本卷积神经网络 TextCNN8.2、循环神经网络 RNN8.3、Attention (for RNN)后记七、先介绍几个常用的超参 7.1、过拟合与欠拟合 奥卡姆剃刀: 两个处于竞争地位的…

6000字告诉你内向的程序员该如何工作比较合适

本文首发于我的个人掘金博客&#xff0c;看到很多人都比较喜欢这篇文章&#xff0c;分享给大家。 个人博客主页&#xff1a;https://www.aijavapro.cn 个人掘金主页&#xff1a;juejin.cn/user/2359988032644541/posts 个人的知识星球: 觉醒的新世界程序员 一、背景 之前写了…

【离散数学】——期末刷题题库( 二元关系)

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…

在HarmonyOS上使用ArkUI实现计步器应用

介绍 本篇Codelab使用ArkTS语言实现计步器应用&#xff0c;应用主要包括计步传感器、定位服务和后台任务功能&#xff1a; 通过订阅计步器传感器获取计步器数据&#xff0c;处理后显示。通过订阅位置服务获取位置数据&#xff0c;处理后显示。通过服务开发实现后台任务功能。…