深度学习之语义分割概念

news2024/11/18 6:43:04

深度学习之语义分割概念


文章目录

  • 深度学习之语义分割概念
  • 前言
  • 一、语义分割任务常见数据集格式
    • 1.PASCAL VOC
    • 2.MS COCO
  • 二、语义分割结果的具体形式
  • 三、语义分割常见的评价指标
  • 四、语义分割标注工具
    • 1.Labelme
    • 2.EISeg
    • 3.X-Anylabeling
  • 总结


前言

pascal voc

常见的分割任务:

  • 语义分割(semantic segmentation):对图像中的每一个像素进行分类属于哪个类别,语义分割的目标是将图像中的每个像素归类到相应的类别中,但它不能区分不同的物体实例。(FCN)
    语义分割

  • 实例分割(Instance segmentation):不但对图像中的每一个像素进行分类还在具体分类的基础上区别开不同的实例,实例分割看成是目标检测(定位)+语义分割(分割)。(Mask R-CNN)
    实例分割

  • 全景分割(Panoramic segmentation):为图像的每个像素分配一个语义标签和一个唯一的实例标识符,可以看成是语义分割和实例分割的综合方法。(Panoptic FPN)
    三种方法的分割精细程度递增,难度也递增。


一、语义分割任务常见数据集格式

1.PASCAL VOC

根据索引在JPEGImages 文件夹中找到对应的图片。以2007_000323为例,可以找到2007_000323.jpg文件
pascalvoc

标注的图片格式是PNG格式,是一通道的图片,但是采用调色板的格式进行存储,比如像素0对应的是(0,0,0)黑色,像素1对应的是(127,0,0)深红色,像素255对应的是(224,224,129),因此可以映射到彩色图像。
注意,在语义分割中对应的标注图像(.png)用PIL的Image.open()函数读取时,默认是P模式,即一个单通道的图像。在背景处的像素值为0,目标边缘处用的像素值为255(训练时一般会忽略像素值为255的区域),目标区域内根据目标的类别索引信息进行填充,例如人对应的目标索引是15,所以目标区域的像素值用15填充。
Pascalvoc
注意:边缘(难以确定属于哪个物体)和忽略的像素(难以分割的区域)都设置为255,在计算损失时忽略这些地方。
注意
在Pascal VOC数据集中各目标类别名称与类别索引对应关系:

{
	"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
}

参考资料:PASCAL VOC2012数据集介绍

2.MS COCO

MS COCO数据集的标注格式是针对每一个目标都标注了多边形(polygons)坐标[x0,y0,x1,y1…],比如

COCO
但是语义分割的标签希望是PNG格式,那么我们便需要将polygons的坐标信息转换为Pascal VOC的PNG图片,可以示例程序进行转换,读取每张图像的segmentation信息:
官方有给出一个读取MS COCO数据集信息的API–pycocotools

  • Linux系统安装pycocotools:
pip install pycocotools  
  • Windows系统安装pycocotools:
pip install pycocotools-windows
import os
import random

import numpy as np
from pycocotools.coco import COCO
from pycocotools import mask as coco_mask
from PIL import Image, ImageDraw
import matplotlib.pyplot as plt

random.seed(0)

json_path = "/data/coco2017/annotations/instances_val2017.json"
img_path = "/data/coco2017/val2017"

# random pallette
pallette = [0, 0, 0] + [random.randint(0, 255) for _ in range(255*3)]

# load coco data
coco = COCO(annotation_file=json_path)

# get all image index info
ids = list(sorted(coco.imgs.keys()))
print("number of images: {}".format(len(ids)))

# get all coco class labels
coco_classes = dict([(v["id"], v["name"]) for k, v in coco.cats.items()])

# 遍历前三张图像
for img_id in ids[:3]:
    # 获取对应图像id的所有annotations idx信息
    ann_ids = coco.getAnnIds(imgIds=img_id)
    # 根据annotations idx信息获取所有标注信息
    targets = coco.loadAnns(ann_ids)

    # get image file name
    path = coco.loadImgs(img_id)[0]['file_name']
    # read image
    img = Image.open(os.path.join(img_path, path)).convert('RGB')
    img_w, img_h = img.size

    masks = []
    cats = []
    for target in targets:
        cats.append(target["category_id"])  # get object class id
        polygons = target["segmentation"]   # get object polygons
        rles = coco_mask.frPyObjects(polygons, img_h, img_w)
        mask = coco_mask.decode(rles)
        if len(mask.shape) < 3:
            mask = mask[..., None]
        mask = mask.any(axis=2)
        masks.append(mask)

    cats = np.array(cats, dtype=np.int32)
    if masks:
        masks = np.stack(masks, axis=0)
    else:
        masks = np.zeros((0, height, width), dtype=np.uint8)

    # merge all instance masks into a single segmentation map
    # with its corresponding categories
    target = (masks * cats[:, None, None]).max(axis=0)
    # discard overlapping instances
    target[masks.sum(0) > 1] = 255
    target = Image.fromarray(target.astype(np.uint8))

    target.putpalette(pallette)
    plt.imshow(target)
    plt.show()

通过pycocotools读取的图像segmentation信息,配合matplotlib库绘制标注图像如下:
在这里插入图片描述
参考资料:MS COCO数据集介绍以及pycocotools简单使用

二、语义分割结果的具体形式

左图为原图,右图为结果图,结果图是PNG,仍然是单通道,采用调色板模式,mask蒙版,每个像素的数值对应的是一个类别的索引,好处是方便可视化结果。
result

三、语义分割常见的评价指标

在论文中使用最多的评价指标是mean IoU。
在这里插入图片描述
通过构建混淆矩阵来计算评价指标:
预测正确用绿色表示,预测错误的采用红色表示。
在这里插入图片描述
像素准确率(PA):
在这里插入图片描述
平均像素准确率(PA):
在这里插入图片描述
平均mIou:
在这里插入图片描述

四、语义分割标注工具

1.Labelme

Labelme分割标注软件使用

2.EISeg

EISeg分割标注软件使用

3.X-Anylabeling


总结

本文主要介绍语义分割的基本概念,包括数据集格式和分割结果以及标注工具。

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

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

相关文章

大模型“1元购”?AI公司加速奔向应用端“大航海时代”

自字节跳动发布豆包大模型&#xff0c;互联网大厂纷纷就位&#xff0c;击穿“地板价”的打法从C端向B端拓展。这也成为今年“618”最亮眼的价格战。 5月15日&#xff0c;字节跳动率先宣布豆包大模型已通过火山引擎开放给企业客户&#xff0c;大模型定价降至0.0008元/千Tokens&…

Python os.path.isfile() 和 os.path.isdir() 函数

Python os.path.isfile 和 os.path.isdir 函数 正文 正文 在网上看到很多人对这两个函数的用法有过说明&#xff0c;然而感觉都没有说到它们的本质&#xff0c;这里特来记录一下。os.path.isfile() 用来判断所给参数是否一个文件。os.path.isdir() 用来判断所给的参数是否是一…

揭秘CISA:你不知道的信息安全认证,轻松掌握职场先机!

在当今的信息化时代&#xff0c;信息系统的安全和稳定是企业和组织的重要资产。信息系统审计是一项专业的工作&#xff0c;需要具备丰富的知识和经验&#xff0c;以及敏锐的洞察力和判断力。信息系统审计师是信息系统审计领域的专业人士&#xff0c;他们负责对信息系统的设计、…

mmu之TLB的来源与实现

TLB的由来 遇到的问题 对于两级页表(Page Table)的设计&#xff0c;需要访问两次物理内存才可以得到虚拟地址对应的物理地址(一次访问第一级页表&#xff0c;另一次访问第二级页表)&#xff0c;而物理内存的运行速度相对于处理器本身来说&#xff0c;有几十倍的差距; 因此在处…

2024年5月最新高德poi数据采集科普

曾几何时&#xff0c;个人注册高德开发者即可拥有每日一万次免费配额调用&#xff0c;现如今&#xff0c;个人每日只能调用100次&#xff0c;即使额外购买了配额300元/10万次&#xff0c;也会因为短时间大量采集被封号。要想稳定采集&#xff0c;恐怕只有购买商业授权5万/年&am…

【Vue】v-if / v-show条件渲染指令

条件判断指令&#xff0c;用来辅助开发者按需控制 DOM 的显示与隐藏。条件渲染指令有如下两个&#xff0c;分别是&#xff1a; v-show 作用&#xff1a; 控制元素显示隐藏&#xff08;简单的显示隐藏&#xff09; 语法&#xff1a; v-show "表达式" 表达式值为 tru…

爬虫的福音-移动蜂窝代理

在爬虫与反爬虫斗争愈演愈烈的情况下&#xff0c;各大网站和 App 的风控检测越来越强&#xff0c;其中一项就是 IP 封禁。 为了解决 IP 封禁的困扰&#xff0c;一个有效的方式就是设置代理&#xff0c;设置代理之后&#xff0c;爬虫可以借助代理的 IP 来伪装自己的真实 IP 地址…

opencascade AIS_Circle AIS_ColoredDrawer AIS_CameraFrustum 源码学习 圆

类AIS_Circle 构造圆形基准面&#xff0c;用于构建复合形状。 AIS_Circle() [1/2] AIS_Circle::AIS_Circle ( const Handle< Geom_Circle > & aCircle ) 初始化用于构造 AIS 圆形基准面的算法&#xff0c;并初始化圆形 aCircle。 AIS_Circle() [2/2] AIS_Circ…

【测评】雨云香港三区云服务器,2核2G 5兆,仅需38元/月

写在前面 雨云香港三区云服务器&#xff0c;高性能的 AMD EPYC 处理器 企业级 NVME SSD 高性能云服务器。2核2G 10兆 400G防御&#xff0c;仅需38元/月&#xff0c;年付7折仅 319.2元/年。 官网&#xff1a;https://www.rainyun.com 本次测评服务器配置如下&#xff1a; C…

如何实现数据的正确拆分?

我们知道在传统的单块架构中&#xff0c;一个系统中只存在一个独立的服务和数据库实例。 上图中的系统架构实现起来比较简单&#xff0c;但是扩展性和伸缩性都比较差。因此&#xff0c;越来越多的系统开始采用了微服务架构。在微服务架构中&#xff0c;一个系统被拆分成多个服务…

Node性能如何进行监控以及优化?

一、 是什么 Node作为一门服务端语言&#xff0c;性能方面尤为重要&#xff0c;其衡量指标一般有如下&#xff1a; CPU内存I/O网络 CPU 主要分成了两部分&#xff1a; CPU负载&#xff1a;在某个时间段内&#xff0c;占用以及等待CPU的进程总数CPU使用率&#xff1a;CPU时…

memblock_free_all释放page到buddy,前后nr_free的情况

https://www.cnblogs.com/tolimit/p/5287801.html 在zone_sizes_init 之后&#xff0c;各个node&#xff0c;zone的page总数已知。但是此时的每个order的空闲链表是空的&#xff0c;也就是无法通过alloc_page这种接口来分配。此时page还在memblock管控&#xff0c;需要memblock…

HDTune和CrystalDiskInfo硬盘检测S.M.A.R.T.参数当前值最差值阈值

高亮颜色说明&#xff1a;突出重点 个人觉得&#xff0c;&#xff1a;待核准个人观点是否有误 高亮颜色超链接 文章目录 S.M.A.R.T.监控技术磁盘健康状态监测,硬盘检测硬盘检测工具 HD Tune硬盘检测工具 CrystalDiskInfo 当前值最差值阈值原始值的含义二级标题待补充待补充 开头…

IPV4地址介绍

4.1IP地址简介 目前的全球因特网所采用的协议族是TCP/IP协议族。IP是TCP/IP协议族中网络层的协议&#xff0c;是TCP/IP协议族的核心协议。IP协议定义了一种地址编码&#xff0c;称为IP地址&#xff0c;它是网络中网络段、网络设备接口、主机的编码&#xff0c;它并不是一种物理…

Pag格式在vue3中的简单使用方法

目前前端使用pag格式的方法比较少&#xff0c; 在这里我来简单实现一下pag格式在vue3中的使用方式。 第一步 先下载啦 npm i libpag 来对pag文件安装依赖 其次我们在自己想要引入的vue页面进行引入 <script setup> import { ref, computed, watchEffect, nextTick …

应用案例|精密制造中使用复合机器人得到显著提升

精密制造行业对设备的精度、稳定性和效率要求极高&#xff0c;而复合机器人凭借其多功能性、高度灵活性和精准控制能力&#xff0c;正逐渐成为该领域的新宠。以下是一个富唯智能复合机器人在精密制造中的应用案例。 案例背景 某知名汽车零部件制造企业&#xff0c;专注于生产…

光纤现网与接入网概念对应

OLT 一般在机房 一级分光可能在机房也可能在光交交接箱 路边的光交交接箱功能有分光或者光纤汇聚转换一下 二级分光在分光光纤箱里&#xff0c;楼道里面挂着的那种 ONU是家里的光猫

go语言的使用方法

一.go语言的介绍 1.简介 2.应用领域 3.使用go语言的公司 4.go语言开发工具介绍 5.go语言开发环境搭建 【1】搭建Go开发环境-安装和配置SDK 基本介绍: 1).SDK的全称(Software Development Kit软件开发工具包&#xff09;2).SDK是提供给开发人员使用的&#xff0c;其中包含了…

STM32实验之USART串口发送+接受数据(二进制/HEX/文本)

涉及三个实验&#xff1a; 1.USART串口发送和接收数据 我们使用的是将串口封装成为一个Serial.c模块.其中包含了 void Serial_Init(void);//串口初始化 void Serial_SendByte(uint8_t Byte);//串口发送一个字节 void Serial_SendArray(uint8_t *Array,uint16_t Length);//…

第一讲:单片机STC89C52+RA8889驱动控制彩屏(源码公开)

51单片机驱动控制彩屏系列讲座 第一讲&#xff1a;单片机STC89C52RA8889驱动控制彩屏&#xff08;源码公开&#xff09; 单片机通过SPI与RA8889进行通信&#xff0c;由于单片机是5V&#xff0c;RA8889是3.3V,故需要进行电平转换&#xff0c;有现成的模组TXS0108E等可以采用。…