弱监督语义分割伪标签可视化(把单通道灰度图转为voc格式语义分割标签的彩色形式)

一、目的

以图片2007_001960为例,voc数据集中的原图和对应的语义分割标签分别如下:

图1                                                                        图2

图像级标签WSSS任务第一阶段最后生成的pseudo mask如下:

图3

我们的目的是把最后一张图生成彩色模式(第二张图那样),方便比较分割结果。

二、方法1(从voc标签中读取颜色类别信息)

参考文章PASCAL VOC数据集-分割标签索引颜色对照及程序中的代码。在voc数据集语义分割标签中随意找一张标签,读取图片的调色板信息,然后对我们的pseudo mask进行着色。

##测试voc的调色盘

from PIL import Image
import numpy as np
import imageio

#读取调色板信息
label_path = '/data6/VOCdevkit/VOC2012/SegmentationClass/2007_000033.png'
label_img = Image.open(label_path)
color_map = label_img.getpalette()
color_map_arr = np.array(color_map)
color_palette = np.reshape(color_map_arr,(256,1,3)).astype(np.uint8)

#读取pseudo mask,然后着色
gray_label=np.asarray(imageio.imread('./sem_seg/2007_001960.png'))
gray_label = Image.fromarray(gray_label,mode='L')
gray_label.putpalette(color_palette)
gray_label.save('new_img.png')

结果:

 

三、方法2(直接给类别编码颜色)

直接把voc的类别与颜色编码信息嵌入到代码中:

(图源上述参考文章)

import numpy as np
import cv2
from PIL import Image
from matplotlib import pyplot as plt

# 获取VOC语义分割标签的类别颜色编码
def get_voc_color_encoding():
    color_encoding = {
        0: (0, 0, 0),
        1: (128, 0, 0),
        2: (0, 128, 0),
        3: (128, 128, 0),
        4: (0, 0, 128),
        5: (128, 0, 128),
        6: (0, 128, 128),
        7: (128, 128, 128),
        8: (64, 0, 0),
        9: (192, 0, 0),
        10: (64, 128, 0),
        11: (192, 128, 0),
        12: (64, 0, 128),
        13: (192, 0, 128),
        14: (64, 128, 128),
        15: (192, 128, 128),
        16: (0, 64, 0),
        17: (128, 64, 0),
        18: (0, 192, 0),
        19: (128, 192, 0),
        20: (0, 64, 128)
    }
    
    return color_encoding

# 将灰度标签转换为VOC语义分割标签的形式
def convert_gray_to_voc_label(gray_label):
    voc_color_encoding = get_voc_color_encoding()
    height, width = gray_label.shape[:2]
    voc_label = np.zeros((height, width, 3), dtype=np.uint8)

    # 使用灰度标签作为索引获取对应的颜色编码,并赋值给voc_label
    for label in range(len(voc_color_encoding)):
        indices = np.where(gray_label == label)
        voc_label[indices] = voc_color_encoding[label]

    return voc_label

# 读取灰度标签图像
gray_label = np.asarray(Image.open('./sem_seg/2007_001960.png'))

# 将灰度标签转换为VOC语义分割标签的形式
voc_label = convert_gray_to_voc_label(gray_label)

# 保存VOC语义分割标签图像
plt.imsave('voc_label_1.png', voc_label)

 结果:

 中间有一个小插曲,使用这个方法(最开始我是用opencv读取的图片),生成了这样的图片:

后来发现是opencv默认 读取和显示图片是bgr而非rgb,所以才出现颜色不一样的问题。具体可以参考文章基础知识(一) 图片格式RGB 与 BGR—— python、opencv、PIL、plt

四、其他说明

数据集标注的语音分割标签中前景的边界会有米色的边界。而我们生成的没有,是因为:在弱监督语义分割任务中,第一阶段是生成pseudo mask(伪掩膜),生成的掩膜每个像素位置的值都是类别。

对于voc中的标签和自己着色的标签,可能由于米色边界影响视觉看着不太一样,用着色器确认了一下,是一样的:

PS. 其中一些原理没有说明,后面有时间补充。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【雕爷学编程】MicroPython动手做(33)——物联网之天气预报3

天气(自然现象) 是指某一个地区距离地表较近的大气层在短时间内的具体状态。而天气现象则是指发生在大气中的各种自然现象,即某瞬时内大气中各种气象要素(如气温、气压、湿度、风、云、雾、雨、闪、雪、霜、雷、雹、霾等&#xff…

react中PureComponent的理解与使用

一、作用 它是一个纯组件,会做一个数据的浅比较,当props和state没改变的时候,不会render重新渲染, 改变后才会render重新渲染,提高性能。 二、使用 三、注意 它不能和shouldComponentUpdate生命周期同时使用。因为它…

如何获取最新的底图边线数据(高德)

由于近期的大屏项目需要地图的边界线的数据,找了很多方式,都有局限性,就是不能保证是最新的,所以使用高德地图提供的边线数据,那就肯定是最新的了,之前仔细看文档,现在仔细看了,才发…

【云原生】k8s中Contrainer 生命周期回调/策略/指针学习

个人主页:征服bug-CSDN博客 kubernetes专栏:kubernetes_征服bug的博客-CSDN博客 目录 1 容器生命周期 2 容器生命周期回调/事件/钩子 3 容器重启策略 4 自定义容器启动命令 5 容器探针 1 容器生命周期 Kubernetes 会跟踪 Pod 中每个容器的状态&am…

Python 批量处理JSON文件,替换某个值

Python 批量处理JSON文件,替换某个值 直接上代码,替换key TranCode的值 New 为 Update。输出 cancel忽略 import json import os import iopath D:\\Asics\\850\\202307 # old path2 D:\\test2 # new dirs os.listdir(path) num_flag 0 for file…

【Spring练习项目】博客系统

目录 1.项目展示2.项目结构设计3.项目功能设计4 数据库准备4.1 建表4.2 DB相关数据 5.项目模块6.添加项目公共模块6.1 common6.2 实现前端界面 7.功能实现7.1实现博客列表约定前后端交互接口实现服务器代码实现客户端代码 7.2实现博客详情约定前后端交互接口实现服务器代码实现…

基于图片、无人机、摄像头拍摄进行智能检测功能

根据要求进行无人机拍摄的视频或图片进行智能识别,开发过程需要事项 1、根据图片案例进行标记,进行模型训练 2、视频模型训练 开发语言为python 根据需求功能进行测试结果如下 根据车辆识别标记进行的测试结果截图 测经过查看视频 8月1日

opencv-33 图像平滑处理-中值滤波cv2.medianBlur()

中值滤波是一种常见的图像处理滤波技术,用于去除图像中的噪声。它的原理是用一个滑动窗口(也称为卷积核)在图像上移动,对窗口中的像素值进行排序,然后用窗口中像素值的中值来替换中心像素的值。这样,中值滤…

【二等奖方案】Web攻击检测与分类识别赛题「机器学习」团队解题思路

2022 CCF BDCI 数字安全公开赛 赛题「Web攻击检测与分类识别」 地址:http://go.datafountain.cn/4Zj 机器学习战队 获奖方案 团队简介 我们团队由五名成员组成,对机器学习都非常感兴趣,同时在机器学习领域有着丰富的实战经验&#xff0c…

LeetCode 42. 接雨水(动态规划 / 单调栈)

题目: 链接:LeetCode 42. 接雨水 难度:困难 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 1: 输入:height [0,1,0,2,1,0,1,3,2,1,2…

爆肝整理,Postman接口测试-参数关联实战(详细步骤)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 接口测试什么时候…

ES6及以上新特性

ES6(ECMAScript 2015)及以上版本引入了许多新特性,每个版本都有不同的增强和改进。以下是 ES6 及以上版本的新特性的详细描述: ES6(ECMAScript 2015): let 和 const 声明:引入块级作…

瑞吉外卖实战-笔记

软件开发的流程 角色分工 软件环境 开发环境的搭建 数据库环境 maven环境 1.创建完成后&#xff0c;需要检查一下编码、maven仓库、jdk等 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</a…

pytorch 中 view 和reshape的区别

在 PyTorch&#xff08;一个流行的深度学习框架&#xff09;中&#xff0c; reshape 和 view 都是用于改变张量&#xff08;tensor&#xff09;形状的方法&#xff0c;但它们在实现方式和使用上有一些区别。下面是它们之间的主要区别&#xff1a; 实现方式&#xff1a; reshap…

机器学习--课后作业--hw1

机器学习(课后作业–hw1) 本篇文章全文参考这篇blog 网上找了很多教程&#xff0c;这个是相对来说清楚的&#xff0c;代码可能是一模一样&#xff0c;只是进行了一些微调&#xff0c;但是一定要理解这个模型具体的处理方法&#xff0c;这个模型我认为最巧妙的它对于数据的处理…

HTTP(超文本传输协议)学习

关于HTTP补学 一、HTTP能干什么 通过下图能够直观的看出&#xff1a;“交换数据 ” 二、HTTP请求例子 一个 HTTP 方法&#xff0c;通常是由一个动词&#xff0c;像 GET、POST 等&#xff0c;或者一个名词&#xff0c;像 OPTIONS、HEAD 等&#xff0c;来定义客户端执行的动作。…

Django之JWT库与SimpleJWT库的使用

Django之JWT库与SimpleJWT库的使用 JWTJWT概述头部(header)载荷(payload)签名(signature) Django使用JWT说明jwt库的使用安装依赖库配置settings.py文件配置urls.py文件创建视图配置权限 SimpleJWT库的使用安装SimpleJWT库配置Django项目配置路由创建用户接口测试身份认证自定义…

MP的开发流程-2

RESTful的实现等级 0级&#xff1a;传统的RPC&#xff0c;基于SOAP的WS&#xff0c;调用的服务名&#xff0c;参数放在HTTP协议的body里面&#xff0c;同时必须以POST方式提交&#xff0c;问题在于你必须清楚的知道所有服务&#xff0c;子服务&#xff0c;及其参数的信息&…

FileZilla Server同时共享多个目录(手把手教你使用FileZilla Server同时设置多个目录)

网上的基本全是一句话带过怎么共享多个目录&#xff0c;没图很烦&#xff0c;所以我自己就写一个过程 目录 1、创建ftp用户并设置密码 1.1、进入用户管理 1.2、新建用户 1.3、设置密码 2、添加共享的目录 2.1、选择用户添加目录 2.2、给予用户访问权限 2.2.1、客户端访…

长相思·罚站墙Vue

优化前 看效果图 Vue长相思 刚学Vue&#xff0c;正好在追剧&#xff0c;看到这个小案例觉得挺好玩的&#xff0c;第一天学&#xff0c;代码太简陋了 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta…