【深度学习实战(26)】标签处理之语义分割标签转换,数据集划分

ops/2024/11/30 8:34:07/

一、标签转换

我们在使用labeme标签工具,标注完数据后会获得json文件。在标注结束过后,我们需要通过标签转换操作,生成jpg格式原始图片和png格式mask标签图。
在这里插入图片描述

1.1 使用img_b64_to_arrjson标签中二进制图像数据变成numpy格式数据,再变成jpg图像

/************ Anaconda3\Lib\site-packages\labelme\utils\image.py *************/
def img_b64_to_arr(img_b64):img_data = base64.b64decode(img_b64)img_arr = img_data_to_arr(img_data)return img_arr

在这里插入图片描述
在这里插入图片描述

# 将输出结果保存,
PIL.Image.fromarray(img).save(osp.join(out_jpgs_path, file_name.split(".")[0]+'.jpg'))

在这里插入图片描述

1.2 使用shapes_to_label将分割标签数据变成单通道png mask标签图

/************ Anaconda3\Lib\site-packages\labelme\utils\shape.py *************/
def shapes_to_label(img_shape, shapes, label_name_to_value):cls = np.zeros(img_shape[:2], dtype=np.int32)ins = np.zeros_like(cls)instances = []for shape in shapes:points = shape["points"]label = shape["label"]group_id = shape.get("group_id")if group_id is None:group_id = uuid.uuid1()shape_type = shape.get("shape_type", None)cls_name = labelinstance = (cls_name, group_id)if instance not in instances:instances.append(instance)ins_id = instances.index(instance) + 1cls_id = label_name_to_value[cls_name]mask = shape_to_mask(img_shape[:2], points, shape_type)cls[mask] = cls_idins[mask] = ins_idreturn cls, ins

在这里插入图片描述
在这里插入图片描述

1.3 语义分割标签转换完整代码

def json2mask(json_file,img_file,filter_cls:list,out_jpgs_path,out_mask_path):assert json_file.endswith(".json") file_name = Path(json_file).stem if os.path.isfile(json_file):data = json.load(open(json_file))# 获取json里面的图片数据,也就是二进制数据imageData = data.get("imageData")# 如果通过data.get获取到的数据为空,就重新读取图片数据if not imageData:# imagePath = os.path.join(json_file, data["imagePath"])imagePath = img_filewith open(imagePath, "rb") as f:imageData = f.read()imageData = base64.b64encode(imageData).decode("utf-8")#  将二进制数据转变成numpy格式的数据img = utils.img_b64_to_arr(imageData)if len(filter_cls):data["shapes"]=[data_item for data_item in data["shapes"] if not data_item['label'] in filter_cls]label_name_2_id =label_name_2_id_sample#  将标签数据变成单通道的png mask图lbl, _ = utils.shapes_to_label(img.shape, data["shapes"], label_name_2_id)label_names = [None] * (max(label_name_2_id.values()) + 1)for name, value in label_name_2_id.items():label_names[value] = namelbl_viz = imgviz.label2rgb(label=lbl, image=imgviz.asgray(img), label_names=label_names, loc="rb")# 将输出结果保存,PIL.Image.fromarray(img).save(osp.join(out_jpgs_path, file_name.split(".")[0]+'.jpg'))utils.lblsave(osp.join(out_mask_path, "%s.png" % file_name.split(".")[0]), lbl)

在这里插入图片描述

二、验证、训练数据集划分

在经过标签转换后,生成原始jpg图片和png mask标签图。我们还需要进一步进行验证集,训练集划分。

def split_mask(mask_path_list,Base_mask,trainval_percent,train_percent):# random.sample随机划分num     = len(mask_path_list) _indexes    = range(num)  tv      = int(num*trainval_percent)  tr      = int(tv*train_percent)  trainval= random.sample(_indexes,tv)  train   = random.sample(trainval,tr)  print("train and val size",tv)print("train size",tr)# 创建txt文件ftrainval   = open(os.path.join(Base_mask,'trainval.txt'), 'w')  ftest       = open(os.path.join(Base_mask,'test.txt'), 'w')  ftrain      = open(os.path.join(Base_mask,'train.txt'), 'w')  fval        = open(os.path.join(Base_mask,'val.txt'), 'w')  # 写入txt文件for i in _indexes:  name = mask_path_list[i].split('.')[0]+'\n'  if i in trainval:  ftrainval.write(name)  if i in train:  ftrain.write(name)  else:  fval.write(name)  else:  ftest.write(name)  # 关闭txt文件ftrainval.close()  ftrain.close()  fval.close()   

生成的验证集,训练集路径txt文件
在这里插入图片描述


http://www.ppmy.cn/ops/22709.html

相关文章

【漏洞复现】WebLogic XMLDecoder反序列化(CVE-2017-10271)

1、漏洞描述 CVE-2017-10271漏洞产生的原因大致是Weblogic的WLS Security组件对外提供webservice服务,其中使用了XMLDecoder来解析用户传入的XML数据,在解析的过程中出现反序列化漏洞,导致可执行任意命令。攻击者发送精心构造的xml数据甚至能…

Andorid复习

组件 TextView 阴影 android:shadowColor"color/red" 阴影颜色android:shadowRadius"3.0" 阴影模糊度(大小)android:shadowDx"10.0" 横向偏移android:shadowDy"10.0" 跑马灯 这里用自定义控件 public cla…

基于CANoe从零创建以太网诊断工程(2)—— TCP/IP Stack 配置的三种选项

🍅 我是蚂蚁小兵,专注于车载诊断领域,尤其擅长于对CANoe工具的使用🍅 寻找组织 ,答疑解惑,摸鱼聊天,博客源码,点击加入👉【相亲相爱一家人】🍅 玩转CANoe&…

【论文阅读】ESRT-Transformer for Single Image Super-Resolution

ESRT-Transformer for Single Image Super-Resolution 论文地址摘要1. 引言2.相关工作2.1 基于 CNN 的 SISR 模型2.2 Vision Transformer Transformer 3. Efficient Super-Resolution Transformer3.1. Lightweight CNN Backbone (LCB)3.2. High-frequency Filtering Module (HF…

常用图像加密技术-流密码异或加密

异或加密是最常用的一种加密方式,广泛的适用于图像处理领域。这种加密方式依据加密密钥生成伪随机序列与图像的像素值进行异或操作,使得原像素值发生变化,进而使得图像内容发生变化,达到保护图像内容的目的。 该加密方法是以图像…

PhaGCN2:病毒聚类

https://github.com/KennthShang/PhaGCN2.0 安装 mamba create -n phagcn2 python3.9 numpy pytorch networkx2.5 pandas mcl14.137 diamond0.9.14 biopython1.78 scipy1.5.2 conda activate phagcn2 git clone https://github.com/KennthShang/PhaGCN2.0cd database tar -zx…

浏览器的本地存储---localstorage

web存储对象 Web 存储对象 localStorage 和 sessionStorage 允许我们在浏览器上保存键/值对。 这两个对象保存再本地(客户端),允许保存至少 5MB 的数据(或更多),这些数据不会因为页面刷新而销毁&#xff0…

QT5之lambda

使用lambda需要 配置c11 所以在点.pro文件里面配置添加如下 CONFIG c11 使用到qDebug 打印包含头文件 #include<QDebug> lambda 表达式使用 代替槽如下 #include "mainwidget.h" #include<QPushButton> #include<QDebug> mainWidget::mainWid…