深度学习语义分割算法之基础知识

文章目录

  • 前言
  • 一、图像分割介绍
    • 1.语义分割
    • 2.实例分割
    • 3.全景分割
  • 二、常见数据集格式
    • 1.PASCAL VOC
    • 2.MS COCO
  • 三、语义分割结果
  • 四、语义分割常见评价指标
    • 1.Pixel Accuracy
    • 2.mean Accuracy
    • 3.mean IoU
  • 五、语义分割标注工具
  • 结束语


  • 💂 个人主页:风间琉璃
  • 🤟 版权: 本文由【风间琉璃】原创、在CSDN首发、需要转载请联系博主
  • 💬 如果文章对你有帮助欢迎关注点赞收藏(一键三连)订阅专栏

前言

提示:这里可以添加本文要记录的大概内容:

一般在计算机视觉领域分割任务主要分为语义分割(Semantic Segmentation)实例分割(Instance Segmentation)全景分割(Panoramic Segmentation)这三大类。这里主要介绍语义分割相关的内容,主要介绍语义分割的定义、常见数据集格式、语义分割评价指标和语义分割标注工具。

  • 数据集(分类、目标检测、语义分割、实例分割)参考:
    PASCAL VOC数据集
    MS COCO数据集

  • 分割标注工具参考:
    Labelme(手工)
    EISeg(半自动)


一、图像分割介绍

在深度学习方面图像分割可分为语义分割(Semantic Segmentation)实例分割(Instance Segmentation)全景分割(Panoramic Segmentation)这三大类。
在这里插入图片描述

1.语义分割

语义分割(semantic segmentation)对图像中每一个像素进行分类,其目的是将图像分割成多个不同类别信息的区域,每个区域表示一个特定的物体类别或者场景元素。

如图(b),语义分割将图像中的每一个像素分配到一个预定义的语义类别,如车,人,信号灯等。不同的类别在图像中使用不同的颜色或者标签表示。

2.实例分割

实例分割(instance segmentation)在像素级别上识别和分割图像中的每个独立的实例或个体,是在语义分割的基础上将同类物体中的不同个体的像素区分开。它不仅区分不同的语义类别,而且对于同一类别的不同个体也进行了区分,即对图像中的每个物体实例进行单独的分割。因此,实例分割不仅在像素级别上标记不同类别,还为每个对象的每个像素分配独特的标签,使得每个对象都有自己唯一的标识。如图(c),实例分割将图中的每一辆汽车和行人进行分割,每一个对象都有自己的标签。

3.全景分割

全景分割(panoptic segmentation)语义分割和实例分割的结合,在提供更全面的图像分割信息,不同于实例分割只对图像中的物体进行检测和分割,全景分割是对图中的所有物体包括背景都进行检测和分割。全景分割同时考虑图像中的每个像素,并将其分为两种类型:语义类别实例对象,能够同时分类出不同类别的语义区域,并对每个对象进行个体级别的分割。如图(d),在全景分割中,图像中的每个像素不仅被标记为语义类别(汽车类和人),还会对每个实例(每辆汽车和每个人)进行独立的分割,并分配独特的标签。

通过上述对语义分割、实例分割和全景分割的描述,我们可以看出三者之间的联系与区别。它们之间的主要区别在于关注的对象和目标有所不同语义分割主要关注图像中的大类别物体,是图像级别的分割结果,不考虑实例级别的区分;实例分割更进一步关注同一类物体中的不同个体,每个像素都属于特定的实例,即对象级别的分割;而全景分割则更进一步,将背景也纳入到关注的范围内。

二、常见数据集格式

这是主要参考如下资料:
PASCAL VOC数据集
MS COCO数据集

1.PASCAL VOC

在这里插入图片描述
PASCAL VOC中提供了分割数据集,数据集中的图片对应标签存储格式为PNG (如右图所示),标签图片中记录了每一个像素所属的类别信息。需要注意的是,右图所展示的图片是使用调色板实现的彩色,不同值的像素就对应不同的颜色,它本质上是一个单通道的黑白图片

在语义分割中对应的标注图像(.png)用PIL的Image.open()函数读取时,默认是P模式,即一个单通道的图像。在背景处的像素值为0,目标边缘处用的像素值为255(训练时一般会忽略像素值为255的区域)目标区域内根据目标的类别索引信息进行填充,比如人对应的目标索引是15,所以目标区域的像素值用15填充。如下图所示
在这里插入图片描述
类别索引与名称对应关系

{"background": 0,"aeroplane": 1,"bicycle": 2,"bird": 3,"boat": 4,"bottle": 5,"bus": 6,"car": 7,"cat": 8,"chair": 9,"cow": 10,"diningtable": 11,"dog": 12,"horse": 13,"motorbike": 14,"person": 15,"pottedplant": 16,"sheep": 17,"sofa": 18,"train": 19,"tvmonitor": 20
}

2.MS COCO

MS COCO数据集针对图像中的每一个目标都记录了多边形坐标 (polygons)。在左边部分每两个数据组成一个坐标点,依次连接就得到目标,将一幅图像中的所有目标绘制出来就得到了右下角这幅图像。
在这里插入图片描述

三、语义分割结果

语义分割的结果是一张单通道的图片(彩色的原因是因为加上了调色板之后的效果)
在这里插入图片描述

四、语义分割常见评价指标

1.Pixel Accuracy

Pixel Accuracy(像素准确率),也称为Global Accuracy(全局准确率),是指通过预测正确的像素数量总的像素数量之间的比例来计算的,用于衡量像素级别的分类准确率,其表达式如下:
P i x e l A c c u r a c y ( G l o b a l A c c ) = ∑ i n i i ∑ i t i Pixel Accuracy(Global Acc)=\frac{\sum_{i}^{} n_{ii}}{\sum_{i}^{} t_{i}} PixelAccuracy(GlobalAcc)=itiinii

n i j n_{ij} nij:类别i被预测成类别j的像素个数
t i = ∑ j n i j t_{i}=\sum_{j}^{} n_{ij} ti=jnij:目标类别i的总像素个数(真实标签),即标注数据中类别i的像素总数量

2.mean Accuracy

mean Accuracy是指类别准确率的平均值,用于消除类别不平衡的影响。其公式如下所示:
m e a n A c c u r a c y = 1 n c l s ⋅ ∑ i n i i t i mean Accuracy = \frac{1}{n_{cls}}\cdot \sum_{i}^{}\frac{n_{ii}}{t_i} meanAccuracy=ncls1itinii

n i j n_{ij} nij:类别i被预测成类别j的像素个数
t i = ∑ j n i j t_{i}=\sum_{j}^{} n_{ij} ti=jnij:目标类别i的总像素个数(真实标签),即标注数据中类别i的像素总数量
n c l s :目标类别个数 ( 包含背景 ) n_{cls}:目标类别个数(包含背景) ncls:目标类别个数(包含背景)

3.mean IoU

mean IoU是指每个类别交并比的平均值,其公式为
M e a n I o U = 1 n c l s ⋅ ∑ i n i i t i + ∑ j n j i − n i i Mean IoU = \frac{1}{n_{cls}}\cdot \sum_{i}^{}\frac{n_{ii}}{t_i +\sum_{j}^{}n_{ji} -n_{ii}} MeanIoU=ncls1iti+jnjiniinii

n i j n_{ij} nij:类别i被预测成类别j的像素个数
t i = ∑ j n i j t_{i}=\sum_{j}^{} n_{ij} ti=jnij:目标类别i的总像素个数(真实标签),即标注数据中类别i的像素总数量
n c l s :目标类别个数 ( 包含背景 ) n_{cls}:目标类别个数(包含背景) ncls:目标类别个数(包含背景)
j:其他类别的索引

语义分割中的mean IoU和目标检测中的IoU原理是一样,先计算每个类别的IoU再求平均,如下图
在这里插入图片描述
绿色表示为真实标签的分割图,蓝色表示为预测得到的分割图。

n i i n_{ii} nii:预测正确的部分,即相交部分
KaTeX parse error: Expected 'EOF', got '}' at position 6: t_{i}}̲:目标类别i的总像素个数(真实标签),即绿色圆的面积
∑ j n j i \sum_{j}^{}n_{ji} jnji:预测的总像素,即蓝色原的面积

分母为并集部分,因为中间重复的部分计算两次,所以需要减掉中间预测正确的部分 n i i n_{ii} nii,以上就可以求出类别i的 IoU,之后计算所有的类别后除以总的类别数,就可以知道平均的IoU。

举例:通过构建混淆矩阵计算(Pytorch官方),以下图预测标签为例
在这里插入图片描述
针对类别 0 :将所有真实标签中为 0 的位置都画成白色,非零的位置都设置为了灰色。同时将预测结果中所有预测为类别0(预测正确)的都画成绿色;预测错的位置用红色表示,如下图所示。
在这里插入图片描述
预测正确的像素值的数量即为图中绿色部分16,预测错误的数量为红色部分,其真实标签是3,所以在应该在混淆矩阵对应的位置填入16和3,如上图右边所示。依次类推,得到最终的混淆矩阵,如下图所示。
在这里插入图片描述
1.根据混淆矩阵得到像素准确度
G l o b a l A c c u r a c y = 16 + 3 + 16 + 12 + 8 64 ≈ 0.859 Global Accuracy = \frac{16+3+16+12+8}{64}\approx 0.859 GlobalAccuracy=6416+3+16+12+80.859

2.根据每一个类别算出不同类别的Accuracy
在这里插入图片描述
3.根据每一个类别算出不同类别的IoU
在这里插入图片描述

五、语义分割标注工具

分割标注工具下载:
Labelme(手工)
EISeg(半自动)

使用参考:
Labelme
EISeg

结束语

感谢阅读吾之文章,今已至此次旅程之终站 🛬。

吾望斯文献能供尔以宝贵之信息与知识也 🎉。

学习者之途,若藏于天际之星辰🍥,吾等皆当努力熠熠生辉,持续前行。

然而,如若斯文献有益于尔,何不以三连为礼?点赞、留言、收藏 - 此等皆以证尔对作者之支持与鼓励也 💞。

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

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

相关文章

Python 入门 —— 描述器

Python 入门 —— 描述器 文章目录 Python 入门 —— 描述器描述器简单示例定制名称只读属性状态交互验证器类自定义验证器验证器的使用 对象关系映射 描述器 前面我们介绍了两种属性拦截的方式:特性(property)以及重载属性访问运算符&#…

更适合敏感口腔的护理牙刷

最近在用一款清九野小红盾舒敏牙刷,感觉它很适合牙龈敏感的人,让刷牙体验有了显著的提升。这款牙刷的柔软刷毛和精细设计让我的刷牙过程变得轻松愉快。它的内外圈双重植毛技术,在清洁牙齿的同时,还能深入牙缝,温和地去…

设计模式原则——单一职责原则(SPS)

设计模式原则 设计模式示例代码库地址: https://gitee.com/Jasonpupil/designPatterns 单一职责原则(SPS): 又称单一功能原则,面向对象五个基本原则(SOLID)之一原则定义:一个类应…

linux启动jar包,提示jvm内存不足

出现场景 服务器内存还剩余很多,但是启动jar报内存不足 Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00007f66434f0000, 65536, 1) failed; error无法分配内存 (errno12) [thread 140076481570560 also had an error] # # Compiler re…

基于Docker的淘客返利平台部署

基于Docker的淘客返利平台部署 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!在本文中,我们将探讨如何利用Docker技术来部署一个淘客返利平台。Doc…

还能这样执行命令?命令执行绕过及防护规则研究

一、引言 我是渗透工程师->很多小伙伴在做攻防实战时发现有时在命令执行的payload中穿插单双引号命令也能执行成功,有时却又不行。那么到底在什么条件下用什么样的方式能实现对命令的切分呢?其中的原理又是如何?有没有其他绕过方式&#…

openlayers 轨迹回放(历史轨迹),实时轨迹

本篇介绍一下使用openlayers轨迹回放(历史轨迹),实时轨迹 1 需求 轨迹回放(历史轨迹)实时轨迹 2 分析 主要是利用定时器,不断添加feature 轨迹回放(历史轨迹),一般是…

Ubuntu 22.04 MySQL安装并设置远程访问

Ubuntu 22.04 LTS环境下 1 安装 # 更新软件包列表 sudo apt update# 查看可使用的安装包 sudo apt search mysql-server# 安装最新版本(显示冲突装不了,可以先卸了再装) sudo apt install -y mysql-server # 安装指定版本 sudo apt install…

rga_mm: RGA_MMU unsupported Memory larger than 4G!解决

目录 报错完整log如下:解决方案:报错完整log如下: [ 3668.824164] rga_mm: RGA_MMU unsupported Memory larger than 4G! [ 3668.824305] rga_mm: scheduler core[4] unsupported mm_flag[0x0]! [ 3668.824320] rga_mm: rga_mm_map_buffer map dma_buf err

如何有效地优化 Erlang 程序的内存使用,以应对大规模数据处理的需求?

要有效地优化Erlang程序的内存使用,以应对大规模数据处理的需求,可以考虑以下几个方面: 减少不必要的内存分配:避免过多的数据复制和不必要的数据结构创建。可以使用Erlang的二进制数据类型来避免数据复制,使用原子数据…

Linux环境下安装MySQL5.7.20(源码安装)

📣📣📣 哈喽!大家好,本专栏主要发表mysql实战的文章,文章主要包括: 各版本数据库的安装、备份和恢复,性能优化等内容的学习。。 📣 ***如果需要观看配套视频的小伙伴们,请…

【Apache Doris】周FAQ集锦:第 8 期

【Apache Doris】周FAQ集锦:第 8 期 SQL问题数据操作问题运维常见问题其它问题关于社区 欢迎查阅本周的 Apache Doris 社区 FAQ 栏目! 在这个栏目中,每周将筛选社区反馈的热门问题和话题,重点回答并进行深入探讨。旨在为广大用户和…

MySQL集群如何实现读写分离

数据源配置:定义了主从数据库的连接池。读写分离规则:通过MasterSlaveRuleConfiguration定义了主从数据库的读写分离规则。负载均衡算法:定义了从数据库的负载均衡算法。创建ShardingDataSource:使用数据源和读写分离规则创建了Sh…

STM32学习-HAL库 定时器

这里先介绍一些HAL的一些库函数,HAL_XXX_Init()这种是外设初始化函数,一般是传入结构体。 HAL_XXX_MspInit()这种是外设硬件相关的初始化函数,包括GPIO,NVIC,CLOCK等,一般会在HAL_XXX_Init()中调用。HAL_XXX_IT()这是与外设中断相…

Scikit-learn:原理与使用指南

文章目录 1. Scikit-learn 的原理1.1 一致性API1.2 模块化和可扩展性1.3 高效性 2. Scikit-learn 的使用2.1 安装 Scikit-learn2.2 导入必要的库和数据2.3 训练模型2.4 预测和评估2.5 交叉验证和网格搜索 3. 总结 Scikit-learn 是 Python 中一个非常强大且易于使用的机器学习库…

【CSS】深入探讨 CSS 的 `calc()` 函数

深入探讨 CSS 的 calc() 函数 calc() 是一个 CSS 函数,用于在样式表中进行数学计算,从而动态地设置 CSS 属性值。它允许开发者在指定长度、百分比、数值等时,进行加减乘除运算。通过 calc() 函数,我们可以实现更灵活和响应式的设…

vue3项目使用@antv/g6实现可视化流程功能

文章目录 项目需求一、需要解决的问题二、初步使用1.动态数据-组件封装(解决拖拽会留下痕迹的问题,引用图片,在节点右上角渲染图标,实现,事现旋转动画,达到loading效果)2.文本太长,超出部分显示(...),如下函…

Fluent udf编译的一些注意事项

Fluent udf编译的一些注意事项 参考链接:1.fluent UDF编译环境处理_哔哩哔哩_bilibili 2.【觉兽课堂】ANSYS FLUENT UDF教学02:UDF语法及编写 小白入门必备_哔哩哔哩_bilibili #1 需要注意的内容 ##1.1 修改vs的路径 在fluent路径中,打开ud…

Golang笔记:使用serial包进行串口通讯

文章目录 目的使用入门总结 目的 串口是非常常用的一种电脑与设备交互的接口。这篇文章将介绍golang中相关功能的使用。 本文使用的包为 :go.bug.st/serial https://pkg.go.dev/go.bug.st/serial https://github.com/bugst/go-serial 另外还有一些常见的包如&…

cpp入门(命名空间,输入输出与缺省参数)

目录 cpp关键字 命名空间 命名空间的使用 1.加名称及作用域限定符 2.使用using将命名空间中某个成员引入 3.展开命名空间 注意 输入输出 缺省参数 cpp关键字 命名空间 定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字&#xff0c…