深度学习中的自动化标签转换:对数据集所有标签做映射转换

在机器学习中,特别是在涉及图像识别或分类的项目中,标签数据的组织和准确性至关重要。本文探讨了一个旨在高效转换标签数据的 Python 脚本。该脚本在需要更新或更改类标签的场景中特别有用,这是正在进行的机器学习项目中的常见任务。我们将逐步介绍如何使用此脚本并了解其功能。
使用脚本的分步指南
初始设置:
脚本首先导入必要的模块:**os用于文件操作、shutil用于高级文件操作、zipfile用于处理 zip 文件以及datetime**用于时间戳。
定义路径:
您需要指定标签目录的路径。然后,该脚本会自动在同一目录中创建备份 zip 文件路径,并带有时间戳以确保唯一性。
创建备份:
在进行任何更改之前,该脚本会将现有标签文件备份到 zip 存档中。这就像在进行任何更改之前拍摄数据快照一样,确保您有后备选项。
标签转换:
核心功能涉及更新标签文件中的类索引。您定义当前和新的类名称,脚本将它们映射到它们各自的索引。此过程类似于分类系统更改时更新图书馆中的目录。
应用更改:
脚本迭代每个标签文件,应用映射来更新类索引。这就像检查文件柜并更新每个文件夹上的标签。
输出和验证:
提供更改的摘要,包括修改的文件数量以及修改前后最后一个文件内容的比较。此步骤对于验证更改是否符合预期至关重要。
import os
import shutil
import zipfile
from datetime import datetime# 定义标签目录的路径
# 用实际的标签目录路径替换
labels_directory = r"D:\Desktop\20231222\train\labels_backup_20231229152659"# 定义备份 zip 文件路径为原目录的同级目录,带有日期
timestamp = datetime.now().strftime("%Y%m%d%H%M%S")
backup_zip_path = os.path.join(os.path.dirname(labels_directory), f"labels_backup_{timestamp}.zip"
)# 创建一个备份 zip 文件
with zipfile.ZipFile(backup_zip_path, "w") as backup_zip:for foldername, subfolders, filenames in os.walk(labels_directory):for filename in filenames:file_path = os.path.join(foldername, filename)backup_zip.write(file_path, os.path.relpath(file_path, labels_directory))# 定义当前(旧)类别名称和新类别名称
current_names = ["blue", "green", "red", "yellow"]
new_names = ["red", "yellow", "green", "blue"]# 创建一个从旧类别索引到新类别索引的映射,基于名称
name_to_index = {name: index for index, name in enumerate(current_names)}
index_mapping = {name_to_index[name]: new_names.index(name) for name in current_names}# 更新标签文件中的类别索引的函数
def update_class_index(file_path, mapping):with open(file_path, "r") as file:lines = file.readlines()old_content = "".join(lines)new_lines = []for line in lines:parts = line.strip().split()if parts:class_index = int(parts[0])# 使用提供的映射映射类别索引parts[0] = str(mapping.get(class_index, class_index))new_lines.append(" ".join(parts))new_content = "\n".join(new_lines)with open(file_path, "w") as file:file.write(new_content)return old_content, new_content# 记录修改的文件名称和数量
modified_file_names = []
modified_file_count = 0# 找到最后一个修改的文件和内容
last_file_name = None
last_file_old_content = None
last_file_new_content = None# 记录被忽略的文件后缀
ignored_file_extensions = set()# 记录原本的文件数量
original_file_count = 0# 将映射应用于标签目录中的所有 .txt 文件
for filename in sorted(os.listdir(labels_directory)):file_path = os.path.join(labels_directory, filename)# 过滤非文本文件if not filename.endswith(".txt"):ignored_file_extensions.add(os.path.splitext(filename)[1])continueoriginal_file_count += 1old_content, new_content = update_class_index(file_path, index_mapping)modified_file_names.append(filename)modified_file_count += 1last_file_name = filenamelast_file_old_content = old_contentlast_file_new_content = new_content# 输出原本的文件数量
print(f"Original number of files: {original_file_count}")# 输出修改的文件名称和总数
print(f"Modified file names: {modified_file_names}")
print(f"Total number of files modified: {modified_file_count}")# 打印最后一个文件的修改前后内容
if last_file_name:print(f"\nLast modified file: {last_file_name}")print("Before modification:")print(last_file_old_content)print("\nAfter modification:")print(last_file_new_content)# 输出新旧类别名称和索引映射
print("\n映射结果:")
for old_index, new_name in index_mapping.items():old_name = current_names[old_index]print(f"Class '{old_name}' (old, index {old_index}) -> Class '{new_name}' (new, index {new_name})")
进一步探索:
为了加深您的理解,请考虑以下事项:
- 如何修改此脚本以处理不同的文件格式或更复杂的标签结构?
- 不正确的标签转换会产生什么影响,如何检测和纠正它们?
- 如何将该脚本集成到机器学习项目中更大的数据预处理管道中?
数据集预处理脚本专栏
1. 使用 Python进行数据集分割:简洁完美的数据集划分脚本
2. 深度学习中的自动化标签转换:对数据集所有标签做映射转换
3. 识别并处理数据集中不配对图像和标签文件
相关文章:
深度学习中的自动化标签转换:对数据集所有标签做映射转换
在机器学习中,特别是在涉及图像识别或分类的项目中,标签数据的组织和准确性至关重要。本文探讨了一个旨在高效转换标签数据的 Python 脚本。该脚本在需要更新或更改类标签的场景中特别有用,这是正在进行的机器学习项目中的常见任务。我们将逐…...
c语言-函数指针
目录 前言一、函数指针1.1 函数指针定义1.2 函数指针调用函数1.3 函数指针代码分析 总结 前言 本篇文章介绍c语言中的函数指针以及函数指针的应用。 一、函数指针 函数指针:指向函数的指针。 函数在编译时分配地址。 &函数名 和 函数名代表的意义相同…...
conda
一、安装 推荐清华源 https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/?CN&OD选择版本 Miniconda3-py39_4.12.0-MacOSX-arm64.pkg测试命令 conda help二、更换仓库 配置加速 https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/没有 .condarc 文件则执行…...
【Vue】灵魂拷问
1、说说Vue的优缺点 优点:渐进式,组件化,轻量级,虚拟dom,响应式,单页面路由,数据与视图分开缺点:单页面不利于seo,不支持IE8以下,首屏加载时间长 2、为什么…...
Scrapy 1.3.0 使用简介
scrapy 1.3.0 python 2.7 创建一个项目: Before you startscraping, you will have to set up a new Scrapy project. Enter a directory whereyou’d like to store your code and run: scrapy startproject tutorial 然后就会得到一系列文件: 第一个爬…...
单机+内部备份_全备案例
此场景为单机数据库节点内部备份,方便部署和操作,但备份REPO与数据库实例处于同一个物理主机,冗余度较低。 前期准备 配置ksql免密登录(必须) 在Kingbase数据库运行维护中,经常用到ksql工具登录数据库,本地免密登录…...
【kettle】pdi/data-integration 打开ktr文件报错“Unable to load step info from XML“
一、报错内容: Unable to load step info from XML step nodeorg.pentaho.di.core.exception.KettleXMLException: Unable to load step info from XMLat org.pentaho.commons.launcher.Launcher.main (Launcher.java:92)at java.lang.reflect.Method.invoke (Met…...
cocos creator人开发小游戏免费素材资源
1、首先熟悉官方的手册和api文档,文档还是比较详细,游戏的方方面面都涉及到了 官方手册: http://docs.cocos.com/creator/manual/zh/官方api文档: http://docs.cocos.com/creator/api/zh/官方论坛: https://forum.coco…...
除了sd webui,compfy还有一个sd UI
GitHub - VoltaML/voltaML-fast-stable-diffusion: Beautiful and Easy to use Stable Diffusion WebUI...
c++属于同一个类的不同对象之间可相互访问private和protected成员
先看一个代码例子: #include <stdio.h>class A { private:char* name;void printA_Name() const {printf(name);} public:A(char* name) {this->name name;}void printA_Name(const A& a) {printf(a.name);}void printA_Name2(const A& a) {a.pr…...
QT/C++ 远程数据采集上位机+服务器
一、项目介绍: 远程数据采集与传输 课题要求:编写个基于TCP的网络数据获取与传输的应用程序; 该程序具备以下功能: 1)本地端程序够通过串口与下位机(单片机)进行通信,实现数据采集任务 2)本地端程序能将所获取下位机数据进行保存(如csv文本格式等); 3…...
算法每日一题:保龄球游戏的获胜者
大家好,我是星恒 今天的每一一题是一道简单题目,但是没能秒掉,原因就是题意理解不到位,边界问题没有判断清楚 不过这本来就是一个试错,迭代,积累经验的过程,加油加油,相信做多了&…...
Do you know about domestic CPUs
Do you know about domestic CPUs CPU指令集国产CPU CPU指令集 国产CPU 参考文献 国产CPU之4种架构和6大品牌指令集及架构一文深入了解 CPU 的型号、代际架构与微架构国产GPU芯片厂商有哪些深入GPU硬件架构及运行机制详解服务器GPU架构和基础知识...
软件设计模式 --- 类,对象和工厂模式的引入
Q1:什么是软件设计模式? A:软件设计模式,又称设计模式。它是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。综上&…...
LeetCode74二分搜索优化:二维矩阵中的高效查找策略
题目描述 力扣地址 给你一个满足下述两条属性的 m x n 整数矩阵: 每行中的整数从左到右按非严格递增顺序排列。每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target ,如果 target 在矩阵中,返回 true ;否则&…...
三极管组成的光控开关电路原理图
什么是光控开关 光控开关/光控时控器采用先进的嵌入式微型计算机控制技术,融光控功能和普通时控器两大功能为一体的多功能高级时控器(时控开关),根据节能需要可以将光控探头(功能)与时控功能同时启用&…...
【PostgreSQL】从零开始:(四十二)系统列
PostgreSQL 中的系统列 PostgreSQL 中的系统列是一组特殊的列,用于存储关于表和视图的元数据信息。这些列是由 PostgreSQL 数据库自动创建和维护的,并且不能直接修改或删除。 每个表都有多个系统列,这些列由系统隐式定义。因此,…...
快速、准确地检测和分类病毒序列分析工具 ViralCC的介绍和详细使用方法, 附带应用脚本
介绍 viralcc是一个基因组病毒分析工具,可以用于快速、准确地检测和分类病毒序列。 github:dyxstat/ViralCC: ViralCC: leveraging metagenomic proximity-ligation to retrieve complete viral genomes (github.com) Instruction of reproducing resul…...
DNs服务学习笔记
DNS:域名系统(英文:Domain Name System)是一个域名系统,是万维网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。类似于生活中的11…...
获取线程池中任务执行数量
获取线程池中任务执行数量 通过线程池进行任务处理,有时我们需要知道线程池中任务的执行状态。通过ThreadPoolExecutor的相关API实时获取线程数量,排队任务数量,执行完成线程数量等信息。 实例 private static ExecutorService es new Thr…...
19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...
业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...
【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...
MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...
以光量子为例,详解量子获取方式
光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学(silicon photonics)的光波导(optical waveguide)芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中,光既是波又是粒子。光子本…...
Linux 中如何提取压缩文件 ?
Linux 是一种流行的开源操作系统,它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间,使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的,要在 …...
[ACTF2020 新生赛]Include 1(php://filter伪协议)
题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...
「全栈技术解析」推客小程序系统开发:从架构设计到裂变增长的完整解决方案
在移动互联网营销竞争白热化的当下,推客小程序系统凭借其裂变传播、精准营销等特性,成为企业抢占市场的利器。本文将深度解析推客小程序系统开发的核心技术与实现路径,助力开发者打造具有市场竞争力的营销工具。 一、系统核心功能架构&…...
