【道友避坑】CUB数据集转yolov5格式

news/2024/5/20 15:47:59/文章来源:https://blog.csdn.net/qq_47959003/article/details/131201070

写在前面:最近我拿到一个CUB_200_2011鸟类训练模型,但是我想将他转为yolov的格式进行应用。看了些其他博主博客后,发现跳跃性有些强。再此记录转换过程,希望各位道友修得此法后,能有所收获!

一、获取数据集

官网下载:Perona Lab - CUB-200-2011Perona Lab -- CUB-200-2011https://www.vision.caltech.edu/datasets/cub_200_2011/百度网盘:

鸟类训练模型icon-default.png?t=N4P3https://pan.baidu.com/s/1ASDDX7h_SYBRJXPp2aZKqA?pwd=1234

二、数据集目录结构

创建存放转换结果的目录,结构如下:

  1. 在yolov5-master同级目录下创建datasets目录
  2. 进入datasets目录,创建birds目录,用来存放转后的数据集
  3. 进入birds目录,创建images和lables目录
  4. 在images和lables目录下,分别创建train和vla目录,如下所示:

下图是CUB_200_211鸟类数据集目录结构,放置的路径如上图中步骤所示。

 三、数据集转换

 梳理:我们想得到什么?

(1)上面分类好的yolov5数据集

(2)birds.yaml 数据配置文件

1. 在yolov5-master项目下创建datasetshub2yolo.py文件,如下图:

 2. 执行文件代码

  • labpath和imapath建议写绝对路径,相对路径容易报错
  • 代码最后几行是调用方法,如果你多次执行的话,会累加,数据会重复。所以你想再次执行,最好把原来的数据删除。
import shutil
import cv2path = '../CUB_200_2011'
labpath = 'D:/python/yolov5/datasets/birds/lables'
imapath = 'D:/python/yolov5/datasets/birds/images'def get_yaml():# get birds.yamlwith open(path + '/classes.txt', 'r') as fo, open('birds.yaml', "a") as fi:  # r只读,w写,a追加写for num, line in enumerate(fo):  # enumerate为枚举,num为从0开始的序号,line为每一行的信息s = '  ' + str(num) + ': ' + line.split(" ")[-1]  # 以空格分隔,去掉末尾的换行fi.write(s)  # 追加写入目标文件def get_alllab():dataall = {}  # 字典用于存放txt中的各种信息with open(path + '/images.txt', 'r') as imagesall, open(path + '/image_class_labels.txt', 'r') as classall, \open(path + '/train_test_split.txt', 'r') as splitall, open(path + '/bounding_boxes.txt', 'r') as boxall:for num, line in enumerate(imagesall):  # 值用列表存储,方便后续添加元素,-1去掉末尾的/ns = line.split(" ")dataall[s[0]] = [s[1][:-1]]for num, line in enumerate(classall):s = line.split(" ")dataall[s[0]].append(s[1][:-1])for num, line in enumerate(splitall):s = line.split(" ")dataall[s[0]].append(s[1][:-1])for num, line in enumerate(boxall):s = line.split(" ")dataall[s[0]].extend([s[1], s[2], s[3], s[4][:-1]])print('dataall have got...')for item in dataall:na = item.rjust(12, '0')  # item为字典的键,左侧扩充0,改为所需名字格式(未看到明确要求)image = cv2.imread(path + '/images/' + dataall[item][0])  # 读取图片,使用shape获取图片宽高# 这两行代码为验证boundingbox信息,手动画框,图片存储至test文件夹,左上角和右下角坐标,image.shape[1] 宽度  image.shape[0] 高度# cv2.rectangle(image, (int(float(dataall[item][3])), int(float(dataall[item][4]))), (int(float(dataall[item][3]))+\#             int(float(dataall[item][5])),int(float(dataall[item][4]))+int(float(dataall[item][6]))), (0, 0, 255), 3)# cv2.imwrite(imapath+'/test2017/' + na + '.jpg', image)  # 带小数的str需先转为float才能转为intx = (float(dataall[item][3]) + float(dataall[item][5]) / 2) / image.shape[1]y = (float(dataall[item][4]) + float(dataall[item][6]) / 2) / image.shape[0]w = float(dataall[item][5]) / image.shape[1]h = float(dataall[item][6]) / image.shape[0]s = str(int(dataall[item][1]) - 1) + ' ' + str('%.6f' % x) + ' ' + str('%.6f' % y) + \' ' + str('%.6f' % w) + ' ' + str('%.6f' % h)  # 将cub的boundingbox转换为yolov5格式if dataall[item][2] == '1':  # 划分训练集验证集,shutil.copy(a,b)为复制图片,a为原路径,b为目标路径(带名字则自动重命名)with open(labpath + '/train/{}.txt'.format(na), 'w') as lab:lab.write(s)  # 写入文件 已存在就覆盖,没有就生成shutil.copy(path + '/images/' + dataall[item][0], imapath + '/train/' + na + '.jpg')elif dataall[item][2] == '0':with open(labpath + '/val/{}.txt'.format(na), 'w') as lab:lab.write(s)shutil.copy(path + '/images/' + dataall[item][0], imapath + '/val/' + na + '.jpg')if __name__ == "__main__":get_yaml()get_alllab()

3. 转换后的结果展示

(1)birds.yaml

(2)数据集部分展示

 4. 数据精细化处理

将转换后的birds.yaml文件拷贝到data目录下。参考coco128.yaml文件,将birds.yaml文件的上面配置替换了,可以参考我下面的配置。

 

 至此,数据集的CUB数据集转换成yolov5格式的工作完毕,至于训练部分,我如果有时间就开一个yolov系列专栏慢慢更新把~希望道友能顺利通过本篇博客!!

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

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

相关文章

为什么年龄越大工作失误越多水平越低能力越差-个人案例

此为内容创作模板,在发布之前请将不必要的内容删除 在日复一日的工作中,我们免不了会产生一些失误,会因此感到沮丧和失望。但如何正确地对待和处理这些失误才是最重要的,它直接影响到我们的工作表现和个人成长。一起来谈谈作为职…

信贷产品的贷前获客营销策略搭建

在竞争激烈的信贷市场中,有效的贷前获客营销策略对于吸引潜在借款人、提高转化率以及保持客户忠诚度至关重要。本文将分享一些关于信贷产品贷前获客营销策略搭建的基本框架和经验分享,希望能对大家有所启发。 1、市场调研和目标客户定义 在制定贷前获客…

使用Unity开发一个游戏类型的区块链 [独立区块链]

ArouseBlockchain [Unity独立区块链] 这是一个学习性质的项目,使用了Unity进行独立区块链游戏的开发。 徽章维护者如何贡献使用许可 项目说明 关于本项目的使用说明 背景安装使用说明 生成器 区块链简述 区块链的基础知识简述 背景 未来趋势 区块链未来趋势的…

【什么是iMessage推送,im群发】苹果推iMessage是苹果公司为其设备用户提供的即时通讯服务

iMessage是苹果公司为其设备用户提供的即时通讯服务,拥有一系列强大的功能和特点。然而,至今为止,苹果并未提供官方的群发部署功能。iMessage主要被设计为点对点的通信工具,即用户可以与一个或多个人进行私密的聊天对话。以下是关…

VMware Workstation 17 的安装

一、简介 VMware Workstation 17.0是一款功能非常强大的虚拟机,可以帮助用户在Windows系统上同时开启多个系统,不仅能在虚拟机上安装上不同的操作系统,比如Mac、Linux以及Windows10/11等,还能与云技术和容器技术(如 D…

SpringCloud Eureka注册服务提供者(七)

这里我们在原来的服务提供者项目 microservice-student-provider-1001 上面直接修改&#xff1a; 首先pom.xml修改&#xff0c;加上eureka客户端依赖&#xff1a; <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>…

1.7C++流插入运算符重载

C流插入运算符重载 在 C 中&#xff0c;流插入运算符&#xff08;<<&#xff09;用于输出数据到流中的运算符&#xff0c;流插入运算符可以被重载&#xff0c;使得程序员可以自定义输出对象的方式。 重载流插入运算符的一般形式如下&#xff1a; 其中&#xff0c;T 是…

运维(SRE)成长之路-第1天 搭建虚拟机(图示)

1.Linux安装前准备 虚拟机&#xff1a;用软件&#xff08;如&#xff1a;vmware,virtualbox等&#xff09;模拟硬件,方便实验的灵活配置 虚拟化软件&#xff0c;建议使用 Vmware Workstation 虚拟硬件配置 CPU&#xff1a;2核或更多 内存&#xff1a;1G以上&#xff0c;推荐2…

天线设计中的磁介质材料 探索可重构潜力

​from&#xff1a;IEEE Antennas & Propagation Magazine (Vol. 61 / No. 1 / Feb. 2019, pp:29-40) -- 文 前 -- 这篇文章针对铁氧体在外置磁场下磁导率发生变化这个特点&#xff0c;探讨铁氧体在可重构天线中的应用。文中对铁氧体材料的选择&#xff0c;磁导率数学模型…

Linux系统的tty架构及UART驱动详解

​一、模块硬件学习 1.1. Uart介绍 通用异步收发传输器&#xff08;Universal Asynchronous Receiver/Transmitter)&#xff0c;通常称为UART&#xff0c;是一种异步收发传输器&#xff0c;是电脑硬件的一部分。它将要传输的资料在串行通信与并行通信之间加以转换。 作为把并…

基于Hexo和Butterfly创建个人技术博客,(5) 使用Hexo的Tags Plugin插件增强博客文章内容和视觉表现力

Hexo官司网查看 这里 注意&#xff1a; Tags语法是Hexo插件提供的&#xff0c;是非标准语言&#xff0c;写文章时要注意以下几点&#xff1a; 用于在文章中快速插入特定的内容&#xff0c;作用等同于其它语言&#xff0c;可理解为一种增强版本的markdown&#xff1b;可混合Mark…

嵌入式软件开发岗位----求职过程记录(基础知识和面经总结)

1、本栏用来记录社招找工作过程中的内容&#xff0c;包括基础知识以及面试问题等&#xff0c;以便于后续个人回顾学习&#xff1b; 暂时只有2023年3月份&#xff0c;第一次社招找工作的过程&#xff1b; 2、个人经历&#xff1a; 研究生期间课题是SLAM在无人机上的应用&#xf…

Elastic 8.8 版引入了全新的 Learned Sparse Encoder 模型,并宣布正式推出合成监测

作者&#xff1a;Brian Bergholm 2023年5月25日 今天&#xff0c;我们非常高兴地宣布 Elastic 8.8 版正式发布。 新增功能 Elastic 企业搜索可帮助开发人员利用 Elasticsearch 实现强大的现代搜索和发现体验。 请在 “Elastic 企业搜索亮点” 博文或 8.8 版发行说明中&#…

MySQL启停要十分钟?

一、问题背景 基础环境&#xff1a; 主机类型&#xff1a;x3850 X6 操作系统&#xff1a;DB:Red Hat Enterprise Linux 9.1 7.8 存储&#xff1a;IBM存储&#xff0c;500GB 内存&#xff1a;64 G CPU型号&#xff1a;E7-4830 v3 2.10GHz CPU核数&#xff1a;32CORE 数据…

png转jpg,直接改后缀?

通过把.png改为.jpg可以改变图片的格式么&#xff1f; 将PNG文件扩展名改为JPEG的扩展名&#xff08;.jpg或.jpeg&#xff09;不会更改图像的格式。它只是更改了文件扩展名&#xff0c;这可能导致一些图像查看器和编辑器无法正确识别和处理该文件。 PNG和JPEG是两种不同的图像文…

RadEx Pro处理电火花数据操作步骤(上)

最近单位采集了很多的电火花测线&#xff0c;同事在使用GeoSuite AllWorks 2022R1处理这些测线的时候&#xff0c;发现二次波对地层辨识和划分干扰比较严重。GeoSuite AllWorks 压制二次波的能力有限&#xff0c;有人推荐我们试一试地震处理软件RadEx Pro。 两个中文文档“RadE…

零基础想转行做python爬虫及数据分析方向的程序员,有哪些书可以推荐?

学习Python语言是一个不错的选择&#xff0c;一方面Python的应用广泛&#xff0c;在大数据、人工智能、Web开发等领域有大量的使用&#xff0c;另一方面Python语言本身比较简单&#xff0c;非常适合初学者。 Python是完全可以自学的&#xff0c;如果英语基础还可以的话&#x…

MySQL(六):基本的SELECT语句

基本的SELECT语句 前言一、SELECT...二、SELECT ... FROM三、列的别名四、去除重复行五、空值参与运算六、着重号七、查询常数八、显示表结构九、过滤数据 前言 本博主将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识&#xff0c;有兴趣的小伙伴可以关注博主&#…

力扣题库刷题笔记4--寻找两个正序数组的中位数

1、题目如下&#xff1a; 2、个人Python代码实现如下&#xff1a; 代码如下&#xff1a; class Solution: def findMedianSortedArrays(self, nums1: List[int], nums2: List[int]) -> float: nums nums1 nums2 #合并数组 nums.sort() …

CSDN原力值解析:功能作用、获取方法、积分对应等级关系详解

开篇声明&#xff1a;本博主非官方人员&#xff0c;也是非所谓的 CSDN 内容合伙人&#xff0c;所以本文博主站在一个中立的角度、以博主自身的主观观点的角度来解答 CSDN 的一个叫做 “原力值” 东西&#xff0c;本文欢迎随时在留言区讨论&#xff0c;但是拒绝硬杠&#xff0c;…