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

一、标签转换

我们在使用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.mzph.cn/bicheng/4729.shtml

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

相关文章

selenium在Pycharm中结合python的基本使用、交互、无界面访问

下载 下载与浏览器匹配的浏览器驱动文件,这里一定注意的是,要选择和浏览器版本号相同的驱动程序,否则后面会有很多问题。 (1)浏览器(以google为例)版本号的查询: 我这里的版本号是1…

java实现模板填充word,word转pdf,pdf转图片

Java实现Word转PDF及PDF转图片 在日常开发中,我们经常需要将文件操作,比如: 根据模板填充wordword文档中插入图片Word文档转换为PDF格式将PDF文件转换为图片。 这些转换可以帮助我们在不同的场景下展示或处理文档内容。下面,我将…

Leetcode—1256. 加密数字【中等】Plus(bitset、find_first_not_of、erase)

2024每日刷题(120) Leetcode—1256. 加密数字 实现代码 class Solution { public:string encode(int num) {string ans;num 1;while(num ! 0) {ans to_string(num & 1);num num >> 1;}if(ans.empty()) {return "";} else {stri…

coreldraw2024精简版绿色版安装包免费下载

CorelDRAW 2024是一款矢量图形设计软件,于2024年3月5日正式在全球范围内发布。这款软件在多个方面进行了更新和改进,为用户提供了更多高效、灵活和便捷的设计工具。 首先,CorelDRAW 2024新增了绘画笔刷功能,这些笔刷不仅模拟了传…

Ubuntu20.04 [Ros Noetic]版本——在catkin_make编译时出现报错的解决方案

今天在新的笔记本电脑上进行catkin_make的编译过程中遇到了报错,这个报错在之前也遇到过,但是,我却忘了怎么解决。很是头痛! 经过多篇博客的查询,特此解决了这个编译报错的问题,于此特地记录!&…

[论文笔记]SEARCHING FOR ACTIVATION FUNCTIONS

引言 今天带来另一篇激活函数论文SEARCHING FOR ACTIVATION FUNCTIONS的笔记。 作者利用自动搜索技术来发现新的激活函数。通过结合详尽的搜索和基于强化学习的搜索,通过实验发现最佳的激活函数 f ( x ) x ⋅ sigmoid ( β x ) f(x) x \cdot \text{sigmoid}(βx…

瓦片编辑器成功移植到小熊猫C++ 2.25.1版本,解决_findnext移植问题

移植之后出现绿色屏幕闪退 查了版本回滚直到不闪退,发现是在读取自定义文件上出问题 然后在找读取自定义文件函数,发现是读取图片部分出问题 然后就卡住了 调试半天,不是数据溢出,于是就看 函数_findnext,网上搜 ———_findn…

4.Docker本地镜像发布至阿里云仓库、私有仓库、DockerHub

文章目录 0、镜像的生成方法1、本地镜像发布到阿里云仓库2、本地镜像发布到私有仓库3、本地镜像发布到Docker Hub仓库 Docker仓库是集中存放镜像的地方,分为公共仓库和私有仓库。 注册服务器是存放仓库的具体服务器,一个注册服务器上可以有多个仓库&…

项目开发规范

Restful REST,表述性状态转换,他是一种软件架构风格 使用URL定位资源,HTTP动词描述操作 根据发出请求类型来区分操作 GET: 查询id为1的用户POST:新增用户PUT:修改用户DELETE:删除id为1的用户 …

springboot权限验证学习-上

创建maven项目 创建父工程 这类项目和原来项目的区别在于&#xff0c;打包方式是pom 由于pom项目一般都是用来做父项目的&#xff0c;所以该项目的src文件夹可以删除掉。 创建子工程 子工程pom.xml 父工程pom.xml 添加依赖 父工程导入依赖包 <!--导入springboot 父工程…

18.Nacos配置管理-微服务读取Nacos中的配置

需要解决的问题 1.实现配置更改热更新&#xff0c;而不是改动了配置文件还要去重启服务才能生效。 2.对多个微服务的配置文件统一集中管理。而不是需要对每个微服务逐一去修改配置文件&#xff0c;特别是公共通用的配置。 配置管理服务中的配置发生改变后&#xff0c;回去立…

病理组学+配对 mIHC 验证+转录组多组学

目录 病理DeepRisk网络模型构建 DPS和新辅助化疗 mIHC 验证 STAD转录组层面 病理DeepRisk网络模型构建 自有数据训练&#xff0c;TCGA数据进行验证&#xff0c;然后配对mIF验证&#xff0c;最后还在转录组层面分析。 该模型基于中山数据集&#xff08;n 1120&#xff09…

【AIGC调研系列】Sora级别的国产视频大模型-Vidu

Vidu能够达到Sora级别的标准。Vidu被多个来源认为是国内首个Sora级别的视频大模型[2][3][4]。它采用了团队原创的Diffusion与Transformer融合的架构U-ViT&#xff0c;能够生成长达16秒、分辨率高达1080P的高清视频内容[1][6]。此外&#xff0c;Vidu的一致性、运动幅度都达到了S…

【Spring】IOC/DI中常用的注解@Lazy、@Scope与@Conditional

目录 1、Lazy 懒加载bean 1.1、与component配合使用 1.2、与Bean注解配合使用 2、Scope bean的作用域 2.1、不指定Scope 2.2、指定Scope为 prototype 3、Conditional 条件注解 1、Lazy 懒加载bean Lazy用于指定单例bean实例化的时机&#xff0c;在没有指定此注解时&…

基于SpringBoot+Vue校园竞赛管理系统的设计与实现

项目介绍&#xff1a; 传统信息的管理大部分依赖于管理人员的手工登记与管理&#xff0c;然而&#xff0c;随着近些年信息技术的迅猛发展&#xff0c;让许多比较老套的信息管理模式进行了更新迭代&#xff0c;竞赛信息因为其管理内容繁杂&#xff0c;管理数量繁多导致手工进行…

安卓常用组件(启停活动页面、活动之间传递信息、收发应用广播、操作后台服务)

启停活动页面 Activity的启动和结束 页面跳转可以使用startActivity接口&#xff0c;具体格式为startActivity(new Intent(this, 目标页面.class));。 关闭一个页面可以直接调用finish();方法即可退出页面。 Activity的生命周期 页面在安卓有个新的名字叫活动&#xff0c;因…

微软ML Copilot框架释放机器学习能力

摘要&#xff1a;大模型席卷而来&#xff0c;通过大量算法模型训练推理&#xff0c;能根据人类输入指令产生图文&#xff0c;其背后是大量深度神经网络模型在做运算&#xff0c;这一过程称之为机器学习&#xff0c;本文从微软语言大模型出发&#xff0c;详解利用大型语言模型&a…

取得Claude模型的Key

目录 1.登录Claude \ Anthropic。需要美丽国IP。 2.取得Key 3.可用模型 4.帮助文档地址 5.使用这个key 6.取得Credit 1.登录Claude \ Anthropic。需要美丽国IP。 2.取得Key 3.可用模型 4.帮助文档地址 https://docs.anthropic.com/claude/docs/intro-to-claude --------…

前后端分离,使用sa-token作为安全框架快速搭建一个微服务项目

之前写过一个单体项目&#xff0c;现在想把它升级为微服务项目。在拆分升级的过程中发现了很多问题&#xff0c;本次就来记录一下遇到的问题和解决方法。&#xff08;这篇文章只是记录一下拆分项目的基础架构&#xff0c;并使用sa-token做微服务项目的安全框架&#xff0c;快速…

upload-labs后续(14-)

图片马 在图片中加入木马&#xff0c;然后上传让浏览器解析&#xff0c;达到上传木马的目的 制作图片马&#xff1a;可以在notepad或者winhex中打开文件&#xff0c;在文件头中加入图片的文件头&#xff0c;再在文件末尾加入木马即可。 图片文件头如下&#xff1a; 1.Png图片…