label数据(或自定义数据集)转imagenet(用于mmclassification)

server/2024/11/27 21:51:00/

理论上用于分类的图像一般都不需要用labelme来标注的,笔者是因为刚好手上有这么一组数据,所以就顺带处理了。labelme标注完的数据每张还包含了一个json文件,这个在分类任务中用不上。具体的mmclassification使用方法在我的另一篇文章里有,需要注意的是现在分类任务被集合在mmpretrain里了。用法也优点区别,不过也都是细微的修改,都还能用。
数据处理代码如下:

import os, random, shutil# 最开始train的文件夹路径
ori_path = r'F:\Data\doctor_research\Arthritis_mini'# label种类:
label_list = ['arthritis', 'normal']# 抽取比例  ******自己改*******
val_ratio, test_ratio = 0.1, 0.2  # 抽取比例  ******自己改*******# 处理好的数据集路径
result_path = os.path.join(ori_path, 'result')# 存放图片的文件地址
train_path = os.path.join(result_path, 'train')
test_path = os.path.join(result_path, 'test')
val_path = os.path.join(result_path, 'val')# meta文件夹地址
meta_path = os.path.join(result_path, 'meta')
# meta文件夹下的txt文件
train_txt = os.path.join(meta_path, 'train.txt')
test_txt = os.path.join(meta_path, 'test.txt')
val_txt = os.path.join(meta_path, 'val.txt')# 预留内容
traintxt = []
testtxt = []
valtxt = []# 如果没有就创建
if not os.path.exists(result_path):os.mkdir(result_path)if not os.path.exists(meta_path):os.makedirs(meta_path)if not os.path.exists(train_path):os.makedirs(train_path)if not os.path.exists(test_path):os.makedirs(test_path)if not os.path.exists(val_path):os.makedirs(val_path)# 在train  test  val 文件夹中创建对应的label文件夹:
for label in label_list:print(f'label:{label}')os.makedirs(os.path.join(train_path, label), exist_ok=True)# print(f'train_path:{train_path}')os.makedirs(os.path.join(test_path, label), exist_ok=True)# print(f'test_path:{test_path}')os.makedirs(os.path.join(val_path, label), exist_ok=True)# print(f'val_path:{val_path}')ori_pic_path = os.path.join(ori_path, label)print(f'ori_pic_path is : {ori_pic_path}')# 将该label下所有的图像文件名暂存在一个list里面:temp_path = []for pic in os.listdir(ori_pic_path):# 判断是否为图片if pic.endswith('.jpg') or pic.endswith('.jpeg') or pic.endswith('.png'):# 先全部计入到一个临时list里:print(f'pic is {pic}')temp_path.append(pic)# print(f'temp_path is {temp_path}')# 计算该类别下的所有图片数量以及对应的验证集、测试集图片数量print(f'{label} num is {len(temp_path)}')# 验证集数量val_number = int(len(temp_path) * val_ratio)# 测试集数量test_number = int(len(temp_path) * test_ratio)# 抽取val数据集val_sample = random.sample(temp_path, val_number)print(f'val_number is:{val_number}')print(f'val_sample is:{val_sample}')# 把抽取的val数据剔除# temp_path.remove(val_sample)temp_path = [item for item in temp_path if item not in val_sample]# 对应的val文件夹:goal_val_path = os.path.join(result_path, 'val', label)# 将文件移动到val文件夹for name1 in val_sample:goal_name1_path = os.path.join(goal_val_path, name1)shutil.copy(os.path.join(ori_pic_path, name1), goal_name1_path)# 同时将该文件地址记录到val.txt中val_content = goal_name1_path + " " + str(label_list.index(label))valtxt.append(val_content)# with open(val_txt, 'w') as f:#     f.write(goal_name1_path + " " + str(label_list.index(label)) + "\n")# 抽取test数据集test_sample = random.sample(temp_path, test_number)print(f'test_number is:{test_number}')# 把抽取的test数据剔除temp_path = [item for item in temp_path if item not in test_sample]# 对应的test文件夹goal_test_path = os.path.join(result_path, 'test', label)# 将文件移动到test文件夹for name2 in test_sample:goal_name2_path = os.path.join(goal_test_path, name2)shutil.copy(os.path.join(ori_pic_path, name2), goal_name2_path)# 同时将该文件地址记录到test.txt中# 同时将该文件地址记录到test.txt中test_content = goal_name2_path + " " + str(label_list.index(label))testtxt.append(test_content)# with open(test_txt, 'w') as f:#     f.write(goal_name2_path + " " + str(label_list.index(label)) + "\n")# 把剩下的数据移入train数据集goal_train_path = os.path.join(result_path, 'train', label)print(f'goal_train_path is : {goal_train_path}')for name3 in temp_path:goal_name3_path = os.path.join(goal_train_path, name3)shutil.copy(os.path.join(ori_pic_path, name3), goal_name3_path)# 同时将该文件地址记录到test.txt中train_content = goal_name3_path + " " + str(label_list.index(label))traintxt.append(train_content)with open(train_txt, 'w') as f:for item in traintxt:f.write(item + '\n')with open(test_txt, 'w') as f:for item in testtxt:f.write(item + '\n')with open(val_txt, 'w') as f:for item in valtxt:f.write(item + '\n')

http://www.ppmy.cn/server/137770.html

相关文章

基于centos7.9搭建MariaDB10.5高可用集群

MariaDB-HA 环境初始化安装MariaDB配置集群 基于centos7.9搭建MariaDB10.5数据库高可用集群,对标mysql5.7 节点IPnode1192.168.200.101node2192.168.200.102node3192.168.200.103 环境初始化 #!/bin/bash# 定义节点信息 NODES("192.168.200.101 node1"…

C#实现word和pdf格式互转

1、word转pdf 使用nuget: Microsoft.Office.Interop.Word winform页面: 后端代码: //using Spire.Doc; //using Spire.Pdf; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using Sy…

部署Prometheus、Grafana、Zipkin、Kiali监控度量Istio

1. 模块简介 Prometheus 是一个开源的监控系统和时间序列数据库。Istio 使用 Prometheus 来记录指标,跟踪 Istio 和网格中的应用程序的健康状况。Grafana 是一个用于分析和监控的开放平台。Grafana 可以连接到各种数据源,并使用图形、表格、热图等将数据…

Nginx 的 Http 模块介绍(中)

1. preaccess 阶段 在 preaccess 阶段在 access 阶段之前,主要是限制用户的请求,比如并发连接数(limit_conn模块)和每秒请求数(limit_req 模块)等。这两个模块对于预防一些攻击请求是很有效的。 1.1 limi…

如何将MySQL彻底卸载干净

目录 背景: MySQL的卸载 步骤1:停止MySQL服务 步骤2:软件的卸载 步骤3:残余文件的清理 步骤4:清理注册表 步骤五:删除环境变量配置 总结: 背景: MySQL卸载不彻底往往会导致重新安装失败…

【自动化测试】APP UI 自动化(安卓)-本地环境搭建

一、软件准备及版本介绍 软件版本JAVA-SDK1.8.0_181 python 3.10.10 Android SDK Tools 下最新版本即可,无特殊要求 PyCharm 2023.3.5(下最新版本即可,无特殊要求) 二、安装步骤及环境变量配置 2.1 Java安装及配置 1&am…

利用Spring Boot框架打造信息学科平台

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常…

MySQL 和 PostgreSQL 的对比概述

MySQL 和 PostgreSQL 是两种广泛使用的开源关系型数据库管理系统(RDBMS),它们各自有其特点和优缺点。以下将从多个方面对它们进行详细比较。 1. 介绍 MySQL: MySQL 由瑞典公司 MySQL AB 开发,2008 年被 Sun Microsyst…