【数据集映射】(含完整可行Python代码)Yolo格式数据(txt)转RCNN格式数据(coco)

1:需求背景

目标检测研究中,通常不同的模型需要不同的数据格式,如yolo需要txt、rcnn需要coco等,因此就需要对标注的数据格式进行转换。

通常的数据格式有txt、coco(json)、Pascal VOC、xml等。

本文的需求是txt转coco,下面提供一种可行的代码(可完全复制)

2:格式转换代码

需要修改的内容是:

1:图像和txt数据集的路径。这个是自己配制的,一般在dataset里面。将图像路径赋给images_dir,txt路径赋给annotations_dir即可。

# 路径配置(根据自己的路径修改)
images_dir = ""
annotations_dir = ""

2:categories内的映射字典。详情可以打开自己的txt文件,查看每一类对应的class_number,例如我们这里的yolo格式中的GD图像分类编号对应0,则映射字典出设置为【0: "xxx",】,其他内容同理。

# 类别映射字典(根据自己的内容修改)
categories = {
    0: "xxx",
}

# 后面可以加1、2、3...

3:数据集图像的大小参数。在以下位置处的【image_width】和【image_height】替换为自己图像的分辨率。

# TODO: 如果每张图片的大小都一样,你可以在这里指定
        # 如果大小不一样,你需要读取图片文件来获取实际尺寸
        image_width = 960
        image_height = 960

4:json文件的保存位置。在以下位置处的路径【'xxx.json'】修改为自己的想要存放的绝对路径/相对路径即可。

# 将COCO数据结构写入JSON文件(保存的json路径自己修改)
with open('xxx.json', 'w') as json_file:
    json.dump(coco_output, json_file, indent=4)

完整代码如下: 

import json
import os# 路径配置(根据自己的路径修改)
images_dir = '/home/ubuntu/datasets'
annotations_dir = '/home/ubuntu/datasets'# 类别映射字典(根据自己的内容修改)
categories = {0: "xxx",
}# COCO格式的基本结构
coco_output = {"info": {},"licenses": [],"images": [],"annotations": [],"categories": [{"id": k, "name": v, "supercategory": ""} for k, v in categories.items()]
}# 图片和标注的ID计数器
image_id = 1
annotation_id = 1# 遍历annotations目录下的所有TXT文件
for filename in os.listdir(annotations_dir):if filename.endswith('.txt'):# 假设文件名与图片文件名一致(不包含扩展名)image_filename = filename.replace('.txt', '.jpg')image_path = os.path.join(images_dir, image_filename)# TODO: 如果每张图片的大小都一样,你可以在这里指定# 如果大小不一样,你需要读取图片文件来获取实际尺寸image_width = 960image_height = 960# 添加图片信息到COCO数据结构coco_output['images'].append({"id": image_id,"file_name": image_filename,"width": image_width,"height": image_height})# 读取每个TXT文件并添加标注信息txt_file_path = os.path.join(annotations_dir, filename)with open(txt_file_path, 'r') as file:for line in file:class_id, x_center, y_center, width, height = map(float, line.strip().split())# COCO要求bbox是[x_min, y_min, width, height],而不是中心点坐标x_min = (x_center - width / 2) * image_widthy_min = (y_center - height / 2) * image_heightwidth = width * image_widthheight = height * image_height# 添加标注信息coco_output['annotations'].append({"id": annotation_id,"image_id": image_id,"category_id": class_id,"bbox": [x_min, y_min, width, height],"area": width * height,"segmentation": [],  # 如果你有分割信息可以在这里添加"iscrowd": 0})annotation_id += 1# 更新图片IDimage_id += 1# 将COCO数据结构写入JSON文件(保存的json路径自己修改)
with open('xxx.json', 'w') as json_file:json.dump(coco_output, json_file, indent=4)print("Conversion completed!")

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

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

相关文章

Java中各个版本JDK分别有哪些常见的垃圾回收算法?它们的适用场景和开启方法是什么?

Java中各个版本JDK分别有哪些常见的垃圾回收算法?它们的使用场景和开启方法是什么? 1.1 JDK 1.8 中的垃圾回收算法1.2 JDK 11 中的垃圾回收算法1.3 JDK17中的垃圾回收算法 1.1 JDK 1.8 中的垃圾回收算法 Java 8引入了一些不同类型的垃圾回收算法&#x…

nginx配置支持PHP

前言 Nginx是通过php-fpm来通信的,所以需要修改的监听9000端口。 当 Nginx 配置支持 PHP 时,它可以将 PHP 请求转发给 PHP-FPM,由 PHP-FPM 处理请求并返回结果。 要配置 Nginx 支持 PHP,你需要在 Nginx 配置文件中添加一个 locat…

如何修改CentOS登录时默认目录

查了一下,有说改/etc/passwd文件的,有说改.bashrc文件的,也有说改.bash_profile,修改的方法都不一样。 我要改的是root登录时的目录,最后修改了/root/.bash_profile文件,只要加一行cd 路径就可以。 这个文…

关于中间件技术

中间件是一种独立的系统软件或服务程序,可以帮助分布式应用软件在不同的技术之间共享资源。中间件可以: 1、负责客户机与服务器之间的连接和通信,以及客户机与应用层之间的高效率通信机制。 2、提供应用的负载均衡和高可用性、安全机制与管…

单片机如何写好一个模块的驱动文件

搞单片机,MCU:STM32/GD32/HC32,通讯模组:4G/WIFI/BT/433,总线:USB/CAN/K/232/485,各种常见的传感器,都接触过。 一开始学习单片机的时候没有形成很好的编写习惯,如LED点亮/熄灭/闪烁…

awk精确筛选

awk精确筛选: $(><):用于对比数值 $n~"字符串"代表第n个字段包括某个字符 $n!~"字符串"代表第n个字段不包括某个字符 $n"字符串"代表第n个字段为某个字符 $n!"字符串"代表第n个字段不为某个字符 $NF:最后一个字段 awk -F…

044_第三代软件开发-保存PDF

第三代软件开发-保存PDF 文章目录 第三代软件开发-保存PDF项目介绍保存PDF头文件源文件使用 关键字&#xff1a; Qt、 Qml、 pdf、 painter、 打印 项目介绍 欢迎来到我们的 QML & C 项目&#xff01;这个项目结合了 QML&#xff08;Qt Meta-Object Language&#xff…

【Windows-软件-FFmpeg】(01)通过CMD运行FFmpeg进行操作,快速上手

前言 通过"cmd"运行"ffmpeg"进行操作&#xff0c;快速上手&#xff1b; 实操 【实操一】 说明 使用"ffmpeg"来合并音频文件和视频文件 &#xff1b; 环境 Windows 11 专业版&#xff08;22621.2428&#xff09;&#xff1b; 代码 &#xf…

Java 性能优化之直接使用成员变量 VS 拷贝副本

背景 刷到一个大佬的 CSDN 博客&#xff0c;仔细看了一下性能优化专栏。联想到我们的日常开发工作&#xff0c;由于业务比较简单&#xff0c;很容就忽略性能问题。但是&#xff0c;性能优化的一下常见思路&#xff0c;也早有耳闻。看了一个 Java 性能优化的方法 「减少操作指令…

Linux进程的优先级

Linux进程的优先级 &#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;Linux &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 本博客主要内容讲解Linux中进程的优先级&#xff0…

安防监控系统EasyCVR视频汇聚平台,如何实现视频汇聚?

关注我们的朋友都知道&#xff0c;EasyCVR平台最初就是以汇聚为核心而进行打造的&#xff0c;那到底什么是汇聚平台呢&#xff1f;又如何进行视频资源汇聚&#xff1f;简单来说&#xff0c;视频汇聚平台是指能够从不同的视频源&#xff08;例如直播、点播等&#xff09;收集、整…

node.js快死了!Bun 1.0 正在改变 JavaScript 游戏规则

在进一步讨论之前&#xff0c;我们需要解释什么是 javascript 运行时以及为什么我们应该关心它的速度。 想象一下&#xff0c;你用JavaScript写了一个故事&#xff0c;你需要有人大声朗读。JavaScript 运行时就像那个友好的叙述者&#xff0c;让你的故事栩栩如生&#xff01;这…

Nginx篇---第二篇

系列文章目录 文章目录 系列文章目录一、请列举Nginx和Apache 之间的不同点二、在Nginx中,如何使用未定义的服务器名称来阻止处理请求?三、请解释Nginx服务器上的Master和Worker进程分别是什么?一、请列举Nginx和Apache 之间的不同点 二、在Nginx中,如何使用未定义的服务器…

[移动通讯]【Carrier Aggregation-13】【Carrier Aggregation】

前言&#xff1a; 前面分享过不同note CA 技术文档 这里主要参考 4G|ShareTechnote 《Carrier Aggregation》 CA SCell 添加的小区的流程&#xff1a; SCell addition and removal&#xff1a; 1 The carrier aggregation additional SCells cannot be activated immediately…

路由器基础(二): BGP原理与配置

BGP 是边界网关协议&#xff0c;目前版本为BGP4, 是一种增强的距离矢量路由协议。该协议运行在不同AS 的路由器之间&#xff0c;用于选择AS之间花费最小的协议。BGP协议基于TCP协议&#xff0c;端口为179。使用面向连接的TCP 可以进行身份认证&#xff0c;可靠地交换路由信息。…

聚合SDK广告收益最大化的关键策略

在移动应用开发和运营中&#xff0c;广告收益一直是一个至关重要的因素。为了最大化应用的广告收益&#xff0c;开发者通常会选择使用聚合SDK&#xff08;Software Development Kit&#xff09;来集成多个广告网络和平台。这样可以提供更多的广告库存&#xff0c;增加广告展示的…

pom.xml详解

我们在开发Java应用程序时&#xff0c;pom.xml文件是项目中的核心配置文件之一&#xff0c;它结合Maven实现对项目依赖的拉取&#xff0c;今天就详细了解一下pom.xml文件的配置 Maven是一种构建工具&#xff0c;它用于构建、管理和发布Java项目pom.xml文件包含了项目的所有重要…

已经不做程序媛4年半了,后悔么?不好说...但再次看到之前写的博客,真的感慨万分。

四年半前&#xff0c;我还在大四实习&#xff0c;做了一年Java开发。四年半后&#xff0c;我是地理信息行业的一名销售经理。 今天&#xff0c;突然点开了CSDN&#xff0c;看到自己的博客有很多人看过&#xff0c;霎时间感慨万千…因为上一次这么认真的对待自己&#xff0c;竟…

Python小试牛刀:GUI(图形界面)实现计算器UI界面(三)

上一篇&#xff1a;Python小试牛刀&#xff1a;GUI&#xff08;图形界面&#xff09;实现计算器UI界面(二)-CSDN博客 回顾前两篇文章&#xff0c;第一篇文章主要实现了计算器UI界面如何布局&#xff0c;以及简单概述Python常用的GUI库。第二篇文章主要实现了计算器UI界面按钮组…

C#学习 - 委托

委托 委托&#xff08;delegate&#xff09;是函数指针的升级版 委托是一种类&#xff08;Class&#xff09;&#xff0c;类是数据类型&#xff0c;所以委托也是一种数据类型 static void Main(string[] args) {Type t typeof(Action);Console.WriteLine(t.IsClass);//输出T…