YOLO格式数据集转为COCO数据集(简单粗暴)

news2024/11/17 4:43:28

最近需要用的coco格式的数据集,但是在网上找的很多 毕竟麻烦,简单记录一下!

1、调整目录结构(以GC10-DET数据集为例)

YOLO格式数据集目录结构如下:
简单来说就是images文件夹里面有train、val、test三个文件夹都放的图片;
labels文件夹也有train、val、test三个文件夹都放的对应的标注!

在这里插入图片描述

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

2、使用代码进行转换!(修改两个路径and换成你自己数据集的类别名称即可)

import os
import json
from PIL import Image
 
# 设置数据集路径
output_dir = "D:\\AAAAA\\GC10_coco"   #修改为YOLO格式的数据集路径;
dataset_path = "D:\\AAAAA\\GC10_yolo"  # 修改你想输出的coco格式数据集路径
images_path = os.path.join(dataset_path, "images")
labels_path = os.path.join(dataset_path, "labels")
 
# 类别映射
categories = [
    {"id": 0, "name": "1_chongkong"},
    {"id": 1, "name": "2_hanfeng"},
    {"id": 2, "name": "3_yueyawan"},
    {"id": 3, "name": "4_shuiban"},
    {"id": 4, "name": "5_youban"},
    {"id": 5, "name": "6_siban"},
    {"id": 6, "name": "7_yiwu"},
    {"id": 7, "name": "8_yahen"},
    {"id": 8, "name": "9_zhehen"},
    {"id": 9, "name": "10_yaozhe"},
    # 添加更多类别
]
 
 
# YOLO格式转COCO格式的函数
def convert_yolo_to_coco(x_center, y_center, width, height, img_width, img_height):
    x_min = (x_center - width / 2) * img_width
    y_min = (y_center - height / 2) * img_height
    width = width * img_width
    height = height * img_height
    return [x_min, y_min, width, height]
 
 
# 初始化COCO数据结构
def init_coco_format():
    return {
        "images": [],
        "annotations": [],
        "categories": categories
    }
 
 
# 处理每个数据集分区
for split in ['train', 'test', 'val']:
    coco_format = init_coco_format()
    annotation_id = 1
 
    for img_name in os.listdir(os.path.join(images_path, split)):
        if img_name.lower().endswith(('.png', '.jpg', '.jpeg')):
            img_path = os.path.join(images_path, split, img_name)
            label_path = os.path.join(labels_path, split, img_name.replace("jpg", "txt"))
 
            img = Image.open(img_path)
            img_width, img_height = img.size
            image_info = {
                "file_name": img_name,
                "id": len(coco_format["images"]) + 1,
                "width": img_width,
                "height": img_height
            }
            coco_format["images"].append(image_info)
 
            if os.path.exists(label_path):
                with open(label_path, "r") as file:
                    for line in file:
                        category_id, x_center, y_center, width, height = map(float, line.split())
                        bbox = convert_yolo_to_coco(x_center, y_center, width, height, img_width, img_height)
                        annotation = {
                            "id": annotation_id,
                            "image_id": image_info["id"],
                            "category_id": int(category_id) + 1,
                            "bbox": bbox,
                            "area": bbox[2] * bbox[3],
                            "iscrowd": 0
                        }
                        coco_format["annotations"].append(annotation)
                        annotation_id += 1
 
    # 为每个分区保存JSON文件
    with open(os.path.join(output_dir, f"{split}_coco_format.json"), "w") as json_file:
        json.dump(coco_format, json_file, indent=4)

3、转化完之后,把图片挪过去就行了

在这里插入图片描述

🎈大功告成,转化工作虽然不是全自动的,但是相对简单轻松!

🤞代码是参考的一篇博客,但是时间长,找不到了该博客的链接了!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2172484.html

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

相关文章

OJ在线评测系统 在Linux虚拟机搭建Docker 概念 入门 安装

Docker的基本概念 为什么要用docker容器技术 为了提升系统的安全性 把不同的程序和宿主机进行隔离 使得某个程序 应用的执行不会影响到系统本身 docker技术可以实现程序和宿主机的隔离 容器可以理解成对一系列应用程序、服务和环境的封装 从而把程序运行在一个隔离的 封闭…

在阿里云PAI的DSW上面部署InternLM-XComposer2-VL-1.8B和InternVL2-2B

1.准备开发环境 1.1 阿里交互式建模(DWS) 首先,去阿里云账号注册界面注册好自己的账号然后,开通人工智能平台PAI 如果已经开通,可以进入管理控制台点击,“新建实例”实例名称,根据自己的意愿填写资源配额选择"公共资源组(按量付费)"资源规格"ecs.gn7i-c8g1.2x…

回归预测合集|基于灰狼优化21个机器学习和深度学习的数据回归预测Matlab程序 多特征输入单输出

回归预测合集|基于灰狼优化21个机器学习和深度学习的数据回归预测Matlab程序 多特征输入单输出 文章目录 一、清单二、实验结果三、核心代码四、代码获取五、总结 一、清单 基于灰狼优化BP神经网络的数据预测Matlab程序GWO–BP 基于灰狼优化卷积神经网络的数据预测Matlab程序G…

c++day08

思维导图 栈 #include <iostream>using namespace std;template <typename T> class Stack { private:static const size_t MAX 100; // 定义固定容量T data[MAX]; // 存储栈元素的数组size_t len; // 当前栈的大小public:…

华为玄玑感知系统震撼发布:智能穿戴新品引领情绪健康新纪元

在科技日新月异的今天&#xff0c;华为再次以其卓越的创新能力&#xff0c;为智能穿戴领域带来了一场革命性的变革。 8月28日&#xff0c;华为玄玑感知系统暨穿戴创新技术发布会圆满落幕&#xff0c;会上正式揭晓了这款名为“玄玑”的神秘感知系统&#xff0c;预示着穿戴设备将…

9.26 Buu俩题解

[CISCN2019 华东北赛区]Web2 看wp写完之后写的 知识点 存储型XSS与过滤绕过sql注入 题解 好几个页面&#xff0c;存在登录框可以注册&#xff0c;存在管理员页面(admin.php) ->既然存在管理员页面&#xff0c;且直接访问admin.php提示我们 说明存在身份验证&#xff0…

【深度学习】低维向量映射到高维空间的方法

低维向量映射到高维空间的方法 1、全连接层&#xff08;线性层&#xff09;&#xff1a; 全连接层&#xff0c;也称为线性层&#xff0c;是神经网络中最基本的组件之一。它通过一个权重矩阵和一个偏置向量对输入向量进行线性变换。如果输入向量的维度是 din&#xff0c;而我们…

Splashtop 加入 Microsoft 智能安全协会

2024年9月25日 美国加利福尼亚州库比蒂诺 Splashtop Inc . 今天宣布已正式加入 Microsoft 智能安全协会&#xff08;MISA&#xff09;。MISA 由独立软件供应商&#xff08;ISV&#xff09;和托管安全服务提供商&#xff08;MISA&#xff09;组成&#xff0c;他们将其解决方案与…

无人机之视觉导航算法篇

一、图像采集与预处理 图像采集&#xff1a;无人机通过其搭载的摄像头或其他视觉传感器实时采集周围环境的图像信息。 图像预处理&#xff1a;对采集到的图像进行预处理&#xff0c;包括滤波、降噪、增强等操作&#xff0c;以提高图像的质量和清晰度&#xff0c;为后续的特征…

Linux当中的权限问题

文章目录 一、Linux权限的概念1. Linux中的用户分类2. 不同用户之间的转换(1) 普通用户->root(2) root->普通用户(3) 普通用户->普通用户 二、Linux权限管理1. 文件访问者的分类2. 文件类型和访问权限&#xff08;1&#xff09;文件后缀在Linux中的作用&#xff08;2&…

三个视觉领域常用数据标注工具:labelImg 解压安装基础使用、 label-studio 的安装和基础使用【检测数据标注】

&#x1f947; 版权: 本文由【墨理学AI】原创、在CSDN首发、各位大佬、敬请查阅&#x1f389; 声明: 作为全网 AI 领域 干货最多的博主之一&#xff0c;❤️ 不负光阴不负卿 ❤️ 本次博文主要对如下三个视觉领域常用数据标注工具进行初步整理 labelImglabel-studio 工具Robo…

生成式AI如何辅助医药行业智能营销

生成式AI在医药行业的智能营销中发挥着日益重要的作用&#xff0c;它通过多种方式辅助医药企业提升市场洞察能力、优化营销策略、增强客户互动和体验&#xff0c;从而推动销售增长和品牌价值的提升。以下是生成式AI如何辅助医药行业智能营销的具体方式&#xff1a;一、精准市场…

微软Win11 22H2/23H2 九月可选更新KB5043145发布!

系统之家于9月27日发出最新报道&#xff0c;微软针对Windows11系统&#xff0c;发布了九月最新可选更新补丁KB5043145&#xff0c;22H2用户安装后&#xff0c;系统版本号升至22621.4249&#xff0c;23H2用户安装后升至22631.4249。本次更新修复了Edge使用IE模式有时会停止响应等…

JS逆向基础-谷歌浏览器调试技巧(详细)

概述 浏览器的调试工具在 JavaScript 逆向工程中&#xff0c;帮助开发者分析和理解代码执行流程、变量值及其变化&#xff0c;从而揭示隐藏逻辑和加密机制&#xff0c;为破解、修改或复现代码提供重要支持。 调试面板详解 谷歌浏览器的调试面板概览&#xff1a; 顶部操作栏 …

直线模组降噪攻略

直线模组作为现代机械自动化中不可或缺的重要组件&#xff0c;其性能与稳定性直接影响到整个设备的运行效果。在使用过程中&#xff0c;直线模组有时会出现噪音&#xff0c;可能由多种因素导致&#xff0c;当噪音出现时&#xff0c;可以试试以下几个方法&#xff1a; 1、设备选…

Apache Iceberg 数据类型参考表

Apache Iceberg 概述-链接 Apache Iceberg 数据类型参考表 数据类型描述实例方法注意事项BOOLEAN布尔类型&#xff0c;表示真或假true, false用于条件判断&#xff0c;例如 WHERE is_active true。确保逻辑条件的正确性。INTEGER32位有符号整数42, -7可用于计算、聚合&#xf…

检查一个CentOS服务器的配置的常用命令

在CentOS系统中&#xff0c;查看服务器配置的常用命令非常丰富&#xff0c;这些命令可以帮助用户快速了解服务器的硬件信息、系统状态以及网络配置等。以下是一些常用的命令及其简要说明&#xff1a; 1. 查看CPU信息 (1) cat /proc/cpuinfo&#xff1a;显示CPU的详细信息&…

【YashanDB知识库】如何dump数据文件,转换rowid, 查询对应内容

本文来自YashanDB官网&#xff0c;具体内容可见https://www.yashandb.com/newsinfo/7459464.html?templateId1718516 问题现象 客户环境有时候会遇到文件损坏的情况&#xff0c;需要dump文件&#xff0c;根据rowid查询数据情况。 问题的风险及影响 熟练掌握崖山数据文件du…

ROS理论与实践学习笔记——2 ROS通信机制之通信机制实践

5.1 话题发布 需求描述&#xff1a;编码实现乌龟运动控制&#xff0c;让小乌龟做圆周运动。 实现分析&#xff1a; ①乌龟运动控制实现&#xff0c;关键节点有两个&#xff0c;一个是乌龟运动显示节点 turtlesim_node&#xff0c;另一个是控制节点&#xff0c;二者是订阅发布模…

公交换乘C++

题目&#xff1a; 样例解释&#xff1a; 样例#1&#xff1a; 第一条记录&#xff0c;在第 3 分钟花费 10 元乘坐地铁。 第二条记录&#xff0c;在第 46 分钟乘坐公交车&#xff0c;可以使用第一条记录中乘坐地铁获得的优惠票&#xff0c;因此没有花费。 第三条记录&#xff0c;…