当前位置: 首页 > article >正文

修改yolo格式的labels类别、删除yolo格式的labels类别

1、项目中,数据集的类别顺序有时会改变,例如a项目类别1是b项目的类别3,,需要用a项目的数据集,只需要改类别就行,就不需要重新标注了,例如a项目的classes是

b项目的classes是

a项目的数据可以用到b项目,得a项目的类别改成b项目一致,这里就需要把1改成3,2改成5

import os


def gai_labels(labels_path, new_labels_path):
    # 获取labels_path文件夹中所有的文件
    labels_files = os.listdir(labels_path)

    # 如果new_labels_path文件夹不存在,则创建
    if not os.path.exists(new_labels_path):
        os.makedirs(new_labels_path)

    # 遍历每个标签文件
    for labels_file in labels_files:
        # 生成标签文件的完整路径
        file_path = os.path.join(labels_path, labels_file)

        # 创建新的文件路径
        new_file_path = os.path.join(new_labels_path, labels_file)

        # 读取标签文件内容并修改类别
        with open(file_path, 'r') as f:
            lines = f.readlines()

        new_lines = []
        for line in lines:
            parts = line.strip().split()
            # 修改类别1为3,类别2为5,类别3改成4
            if parts[0] == '1':
                parts[0] = '3'
            # elif parts[0] == '2':
            #     parts[0] = '5'
            new_lines.append(" ".join(parts) + '\n')

        # 将修改后的内容写入新的文件
        with open(new_file_path, 'w') as f:
            f.writelines(new_lines)


if __name__ == "__main__":
    labels_path = r"E:\project\CODE\labels"
    new_labels_path = r"E:\project\CODE\gaihou"
    gai_labels(labels_path, new_labels_path)
0 0.070312 0.476042 0.137500 0.164583
1 0.518750 0.760417 0.103125 0.116667
2 0.200781 0.643750 0.139063 0.170833
0 0.307812 0.527083 0.106250 0.145833
1 0.392969 0.240625 0.085938 0.110417
2 0.328906 0.075000 0.117188 0.145833

改后
0 0.070312 0.476042 0.137500 0.164583
3 0.518750 0.760417 0.103125 0.116667
5 0.200781 0.643750 0.139063 0.170833
0 0.307812 0.527083 0.106250 0.145833
3 0.392969 0.240625 0.085938 0.110417
5 0.328906 0.075000 0.117188 0.145833


2、删除类别0,类别1,类别2,类别4,类别5,只留下类别3的标签,代码如下:
import os

def del_labels(labels_path, new_labels_path):
    # 获取labels_path文件夹中所有的文件
    labels_files = os.listdir(labels_path)

    # 如果new_labels_path文件夹不存在,则创建
    if not os.path.exists(new_labels_path):
        os.makedirs(new_labels_path)

    # 遍历每个标签文件
    for labels_file in labels_files:
        # 生成标签文件的完整路径
        file_path = os.path.join(labels_path, labels_file)

        # 创建新的文件路径
        new_file_path = os.path.join(new_labels_path, labels_file)

        # 读取标签文件内容并过滤指定类别
        with open(file_path, 'r') as f:
            lines = f.readlines()

        new_lines = []
        for line in lines:
            parts = line.strip().split()
            # 跳过类别为0、1、2、4、5的行
            if parts[0] in {'0', '1', '2', '4', '5'}:
                continue
            new_lines.append(" ".join(parts) + '\n')

        # 将过滤后的内容写入新的文件
        with open(new_file_path, 'w') as f:
            f.writelines(new_lines)

if __name__ == "__main__":
    labels_path = r"E:\project\CODE\labels"
    new_labels_path = r"E:\project\CODE\del_hou"
    del_labels(labels_path, new_labels_path)

删除后


http://www.kler.cn/a/394082.html

相关文章:

  • 力扣662:二叉树的最大宽度
  • Spring-Webflux + Reactor + Netty 初体验
  • 深度学习中的感受野:从基础概念到多层次特征提取
  • c++写一个死锁并且自己解锁
  • acwing算法基础02一高精度,前缀和,差分
  • C++模板特化实战:在使用开源库boost::geometry::index::rtree时,用特化来让其支持自己的数据类型
  • redis7.x源码分析:(1) sds动态字符串
  • 【回溯法】——组合总数
  • 【AI技术】GPT-SoVits训练日志
  • 蓝桥杯——杨辉三角
  • 【PGCCC】Postgresql 物理流复制
  • 设计模式之工厂模式,但是宝可梦
  • 【Node.js]
  • TCON 相关知识
  • Git - 命令杂谈 - merge、rebase和cherry-pick
  • git修改当前分支名称并推送到远程仓库
  • 【新手友好】用Pyspark和GraphX解析复杂网络数据
  • 【数据分享】中国食品工业年鉴(1984-2023) PDF
  • 确保HTML邮件兼容所有PC和移动设备的样式
  • Vue Canvas实现区域拉框选择
  • Jmeter中的配置原件(五)
  • 微服务电商平台课程四: 搭建本地前端服务
  • WPF学习之路,控件的只读、是否可以、是否可见属性控制
  • 〔 MySQL 〕数据类型
  • 基于HTTP编写ping操作
  • Day44 | 动态规划 :状态机DP 买卖股票的最佳时机IV买卖股票的最佳时机III