将YOLO格式数据集转换为YOLO-Mamba等特定工具指定的数据集格式

目录

  • 克隆Github YOLO-Mamba源码
  • YOLO-Mamba数据集格式
  • 下载的公开数据集目录
    • 边界框坐标文件
    • 类别标签文件
  • 数据集格式转换代码
  • 转换格式的效果展示

今天为大家解析YOLO-Mamba这篇论文开源的代码,首先讲解YOLO格式数据集转换为YOLO-Mamba等特定工具指定的数据集格式的操作。

在这里插入图片描述

克隆Github YOLO-Mamba源码

git clone https://github.com/SwjtuMa/FER-YOLO-Mamba.git

YOLO-Mamba数据集格式

FER_YOLO_Mamba/data/2007_val.txt中可以看到YOLO-Mamba接受的特定数据集格式

注意:相比源码最高级文件夹,我的文件夹修改为FER_YOLO_Mamba

在这里插入图片描述

/workspace/yolox/VOCdevkit/VOC2007/JPEGImages/Hangover_011409414_00000041.jpg 431,124,535,285,3

这种指定格式实际上不是标准的YOLO格式,而是更接近Pascal VOC或自定义的文本标注格式。这种格式通常包含图像文件的路径,以及每个目标物体的坐标和类别信息,但表达方式与YOLO格式有所不同。

  • 图像路径:每行开始是图像的完整文件路径,例如 /workspace/yolox/VOCdevkit/VOC2007/JPEGImages/...jpg
  • 坐标信息:紧接着是一个由逗号分隔的坐标序列,通常表示目标框的左上角和右下角坐标(而非YOLO格式中的中心坐标和宽高比例)。例如,431,124,535,285 表示一个目标框左上角位于图像坐标(431, 124),右下角位于(535, 285)。
  • 类别ID:坐标序列之后是一个整数,表示目标物体的类别ID。例如,3 表示第三个类别。

这种格式与标准YOLO格式的主要区别在于:

  • 坐标表示:标准YOLO格式使用边界框的中心点坐标(归一化到图像尺寸的百分比)和宽高比例,而上述格式使用的是绝对像素坐标来直接表示边界框的左上角和右下角。
  • 信息排列:YOLO格式每行数据包含一个物体的所有信息(类别ID+中心点坐标+宽高比例),而上述格式首先是图像路径,随后是每个物体的坐标和类别ID,没有直接体现中心点坐标和宽高比例的归一化信息。

这种格式是为了适应例如YOLO-mamba的特定处理流程或工具,比如某些数据集处理脚本或自定义的数据加载器,它不一定遵循YOLO算法的标准输入格式。

下载的公开数据集目录

以下是我从Kaggle官网下载的一个RAF-DB表情识别数据集目录
在这里插入图片描述

在bbox坐标文件FER_YOLO_Mamba/data/rafdb_basic/Annotation/boundingbox/test_0001_boundingbox.txt

153.841080 130.382935 327.412231 355.140106 

在类别标签文件FER_YOLO_Mamba/data/rafdb_basic/EmoLabel/list_patition_label.txt

train_12267.jpg 7
train_12268.jpg 7
train_12269.jpg 7
train_12270.jpg 7
train_12271.jpg 7
test_0001.jpg 5
test_0002.jpg 1
test_0003.jpg 4
test_0004.jpg 1

YOLO(You Only Look Once)是一种广泛使用的实时目标检测算法,它的数据标注格式简洁明了,主要用来指示图像中目标物体的位置和类别。在上述例子中,涉及到两个文件:一个是边界框坐标文件,另一个是类别标签文件。下面我将分别解释这两个文件的内容和格式。

边界框坐标文件

在YOLO格式中,每个目标物体的边界框坐标信息通常按照以下格式存储在一个文本文件中,每行代表一个目标物体的信息,具体到上述例子:

153.841080 130.382935 327.412231 355.140106 

这四个数字分别代表:

  • 第一个和第二个数字是边界框的中心点坐标相对于图像宽度和高度的归一化值。即 x_center, y_center。在这个例子中,中心点坐标为 (153.841080, 130.382935),这些值通常范围在0到1之间,表示相对于图像宽度和高度的比例位置。
  • 第三个和第四个数字是边界框的宽度和高度相对于图像尺寸的归一化值。即 width, height。这里边界框的宽度为 327.412231 - 153.841080,高度为 355.140106 - 130.382935 的比例,同样也是归一化的。

类别标签文件

这个文件每一行对应一张图像及其对应的类别标签,格式为:

image_filename.jpg category_id

例如:

test_0001.jpg 5

这意味着文件名为 test_0001.jpg 的图像被标记为类别ID为5的情感表情。类别ID是整数,对应于特定的情感分类,如高兴、悲伤、愤怒等。在实际应用中,通常会有一个类别ID与实际情感名称的映射表,以解释每个ID所代表的情感。

结合上述两个文件,可以理解为在图像test_0001.jpg中有一个目标物体,其边界框信息由boundingbox/test_0001_boundingbox.txt文件提供,且该目标物体表达的情感类别为ID为5的情感(具体情感需参照类别ID映射表)。这种格式使得YOLO算法能够直接读取并理解图像中的目标及其类别信息,进而进行目标检测和分类。

数据集格式转换代码

import osdef load_class_labels(label_file_path):"""加载类别标签文件,返回一个字典,键为图像ID,值为类别ID。"""labels_dict = {}with open(label_file_path, 'r') as label_file:for line in label_file:img_id, class_id = line.strip().split()labels_dict[os.path.splitext(img_id)[0]] = int(class_id)  # 去除文件扩展名,确保与img_id匹配return labels_dictdef separate_and_merge_yolo_txts(input_folder, label_file_path, train_output, test_output):"""将带有'train_'和'test_'前缀的YOLO格式标签文件分别合并到训练集和测试集的输出文件中,并整合类别标签。:param input_folder: 包含所有单个txt标签文件的目录:param label_file_path: 类别标签文件路径:param train_output: 训练集合并后的输出文件路径:param test_output: 测试集合并后的输出文件路径"""class_labels = load_class_labels(label_file_path)train_file = open(train_output, 'w')test_file = open(test_output, 'w')for txt_file in os.listdir(input_folder):if txt_file.endswith('.txt'):img_id = os.path.splitext(os.path.splitext(txt_file)[0])[0].replace("_boundingbox", "")prefix = img_id.split('_')[0]txt_path = os.path.join(input_folder, txt_file)with open(txt_path, 'r') as infile:# 读取并转换坐标为整数float_strings = infile.read().split()int_values = list(map(int, map(float, float_strings)))str_value = ' '.join(map(str, int_values))# 获取并添加类别IDclass_id = class_labels.get(img_id)if class_id is None:print(f"Warning: No class label found for {img_id}. Skipping.")continue# 写入相应文件if prefix == 'train':train_file.write("FER_YOLO_Mamba/data/rafdb_basic/Image/original/" + f"{img_id}.jpg {str_value} {class_id}\n")elif prefix == 'test':test_file.write("FER_YOLO_Mamba/data/rafdb_basic/Image/original/" + f"{img_id}.jpg {str_value} {class_id}\n")train_file.close()test_file.close()# 使用示例
input_folder = 'FER_YOLO_Mamba/data/rafdb_basic/Annotation/boundingbox'
label_file_path = 'FER_YOLO_Mamba/data/rafdb_basic/EmoLabel/list_patition_label.txt'
train_annotation = 'FER_YOLO_Mamba/data/rafdb_basic/Annotation/train_bbox.txt'
test_annotation = 'FER_YOLO_Mamba/data/rafdb_basic/Annotation/test_bbox.txt'
separate_and_merge_yolo_txts(input_folder, label_file_path, train_annotation, test_annotation)

转换格式的效果展示

在这里插入图片描述

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

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

相关文章

C++聚合类型初始化

如果你的代码中没有定义构造函数,而你依然能够成功编译和运行 String a("Hello");,那么你可能使用的是一个支持聚合初始化的编译器版本。这种情况下,C 标准允许聚合类型使用这种形式的初始化,但这仅在特定条件下有效。 …

GoogLeNet论文解读—Going deeper with convolutions2015(V1)

GoogLeNet论文解读—Going deeper with convolutions2015 说明:本文只解读GooleNet的14年参赛的v1版本,之后的改进版本可能在日后的学习中继续更新 研究背景 更深的卷积神经网络 认识数据集:ImageNet的大规模图像识别挑战赛 LSVRC-2014&…

Java面试八股之Thread类中的yeild方法有什么作用

Thread类中的yeild方法有什么作用 谦让机制:Thread.yield()方法主要用于实现线程间的礼让或谦让机制。当某个线程执行到yield()方法时,它会主动放弃当前已获得的CPU执行权,从运行状态(Running)转变为可运行状态&#…

快速失败“fail-fast”和安全失败“fail-safe”

目录 快速失败——fail-fast 异常原因 正常原因 安全失败“fail-safe” 快速失败——fail-fast java的快速失败机制是java集合框架中的一种错误检测机制,当多个线程对集合中的内容进行修改时可能就会抛出ConcurrentModificationException异常。不仅仅在多线程状态…

网络安全等级保护2.0(等保)是什么

等保的全称是信息安全等级保护,是《网络安全法》规定的必须强制执行的,保障公民、社会、国家利益的重要工作。 通俗来讲就是:公司或者单位因为要用互联网,但是网上有坏人,我们不仅要防御外部坏人,还要看看…

2016届蓝桥杯大赛软件类国赛Java大学B组 愤怒小鸟 数学模拟

注意开浮点数 ​​​​ import java.util.Scanner;public class Main {static Scanner scnew Scanner(System.in);public static void main(String[] args) {double t0;int cnt0;double distance1000;while(distance>1){//相撞时间tdistance/60.0;distance-t*20;cnt;}Syste…

一个程序员的牢狱生涯(39)购物

星期一 购 物 头铺对我和大镣说完话后,就让我俩回了号子,然后头铺也走回来坐在通铺边。 “叮铃铃……”的铃声在上午10点的时候准时响起。原本刺耳的铃声如今的我已经习惯,感觉并不是那么让人心惊,号子里的所有人都知道,上午的坐班已经结束。因为今天是星期一,到了小卖铺…

Android 测量App启动时间

Android 测量App启动时间 adb shell am start -W com.example.test/.TestActivityStarting: Intent { actandroid.intent.action.MAIN cat[android.intent.category.LAUNCHER] cmpcom.example.test/.TestActivity } Warning: Activity not started, intent has been delivered…

python中的Matplotlib 中文和正负号乱码问题

在 Matplotlib 中遇到中文和正负号符号显示有问题,这通常是由于Matplotlib 默认字体可能不支持中文,可以通过修改 rcParams 中的 font.sans-serif 或 font.family 参数来指定一个支持中文的字体。例如,可以使用 SimHei、FangSong、Noto Sans …

SpringBootTest测试框架四

dubbo调用mock 同理,为了实现dubbo的mock,也是要在dubbo调用的过程中添加拦截器 dubbo原始的执行拦截器 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/316413014e2f48c583368809c82d4ea4.png#pic_center)Proxy.getProxy(interfaces).newInstance(new InvokerI…

python中的 Matplotlib 绘制多子图时的重叠问题

当使用 Matplotlib 绘制多个子图(subplots)时,如果标签或标题文字交叉或重叠,可以通过以下几种方法来调整文字大小和子图之间的间距: 1.调整子图间距 使用 plt.subplots_adjust() 函数来调整子图之间的间距和边距。例…

【python】torch.expand()广播机制|torch.norm()

1. torch.expand()广播机制 在处理3D点云时, 有时需要对两帧点云进行逐点的三维坐标相加减、做点积等运算, 但是读入的PCD文件中,点云数量并不一定是相等的 那么首要的一个问题就是, 如何将两帧点云处理成大小相同的矩阵然后进行计算? torch 中一个常用的方法是expand函数,…

Text Control 控件 中 Service Pack 3:MailMerge 支持 SVG 图像

图像的合并方式与报告模板中的合并字段相同。占位符在设计时添加,并与文件、数据库或内存中的数据合并。可以将图像对象添加到具有指定名称的模板中。数据列必须包含字节数组形式的二进制图像数据、System.Drawing.Image 类型的对象、文件名、十六进制或 Base64 编码…

【Linux进程篇】父子进程fork函数||进程生死轮回状态||僵尸进程与孤儿进程

W...Y的主页 😊 代码仓库分享💕 前言:上篇文章中我们认识了进程,可执行程序在内存中加载运行被称作进程,而操作系统是通过给每一个可执行程序创建一个PCB来管理进程的。并且学习了一些查看进程的指令,认识…

香橙派AIpro开发板开箱体验,国产AI计算力实现可控

一、引言 1. 嵌入式AI技术背景与发展趋势 近年来,随着人工智能技术的飞速发展,嵌入式AI技术在各个领域得到了广泛应用。作为智能设备的核心部件,嵌入式AI开发板为开发者提供了高效、便捷的开发环境,推动了智能设备的不断创新和进步…

新闻稿推广策略有哪些?建议收藏

新闻稿推广是一种有效的公关工具,它可以帮助企业或组织传递信息、提升品牌知名度、建立权威形象,并最终促进销售。新闻稿推广策略有哪些?接下来伯乐网络传媒就来给大家分享一下。 确定目标受众:在撰写新闻稿之前,明确你…

重生之 SpringBoot3 入门保姆级学习(06、属性绑定)

重生之 SpringBoot3 入门保姆级学习(06、属性绑定) 2.3.1 使用 ConfigurationProperties2.3.2 使用 EnableConfigurationProperties 2.3.1 使用 ConfigurationProperties application.properties 文件书写相关配置 pig.id1 pig.name王萍 pig.age21方法一…

揭秘淘宝API接口:轻松连接电商巨头,打造无限商业可能

淘宝API接口是淘宝平台对外开放的一系列接口,通过这些接口,开发者可以获取淘宝平台上的商品信息、订单信息、物流信息等数据,实现与淘宝平台的交互。淘宝API接口支持多种数据格式,如JSON、XML等,方便开发者根据自己的需…

实时工业数据采集分析平台:推动工厂智能化的关键

在当今的工业领域,随着科技的飞速发展和竞争的日益激烈,实现工厂的智能化已成为企业追求持续发展的关键目标。而实时工业数据采集分析平台作为推动工厂智能化的重要力量,正发挥着重要的作用。 实时工业数据采集分析平台能够全方位、高精度地…