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

将VOC2012格式的数据集转为YOLOV8格式

文章目录

  • 简介
  • 1.数据集格式
    • 1.1数据集目录格式对比
    • 1.2标签格式对比
  • 2.格式转换脚本
  • 3.文件处理脚本

简介

  1. 将voc2012中xml格式的标签转为yolov8中txt格式
  2. 将转换后的图像和标签按照yolov8训练的要求整理为对应的目录结构

1.数据集格式

1.1数据集目录格式对比

(1)VOC2012的数据集文件目录如下:
在这里插入图片描述
(2)YOLOv8需要的文件目录
在这里插入图片描述
同时需要生成关于训练集、验证集和测试集图像目录的txt文件,最好是绝对路径
在这里插入图片描述
在这里插入图片描述

1.2标签格式对比

(1)voc数据集标签
在这里插入图片描述
(2)YOLO数据集标签
每一行代表一个目标框的信息:{class_index} {x_center} {y_center} {width} {height}
在这里插入图片描述

2.格式转换脚本

修改脚本中文件目录,然后运行:

python3 trans_voc_yolo.py
# -*- coding: utf-8 -*-
# 在脚本中,你需要将`voc_labels_folder`和`output_folder`两个变量设置为正确的路径
# 分别是VOC2012数据集的XML标签文件夹路径和转换后的YOLO格式标签文件夹路径。同时,你还需要根据VOC2012数据集的类别列表自定义`class_names`变量的内容。
# 执行脚本后,它会遍历VOC2012数据集的XML标签文件夹中的每个XML文件,解析其中的目标实例信息,并将它们转换为YOLO格式的txt标签文件。
# 转换后的txt文件将保存在指定的输出文件夹中,每个txt文件对应相应的XML文件。
# 请确保脚本中的文件路径正确,并提前创建好输出文件夹。运行脚本后,你会在输出文件夹中得到与VOC2012数据集中的每个XML标签文件对应的YOLO格式txt标签文件。import xml.etree.ElementTree as ET
import osvoc_labels_folder = 'Annotations/'  # VOC2012的XML标签文件夹路径
output_folder = 'yolo_labels/'  # 转换后的YOLO格式标签文件夹路径
class_names = ['aeroplane', 'bicycle', 'bird', 'boat', 'bottle', 'bus', 'car', 'cat', 'chair', 'cow', 'diningtable','dog', 'horse', 'motorbike', 'person', 'pottedplant', 'sheep', 'sofa', 'train', 'tvmonitor']  # 类别名称列表if not os.path.exists(output_folder):os.makedirs(output_folder)for xml_file in os.listdir(voc_labels_folder):tree = ET.parse(os.path.join(voc_labels_folder, xml_file))root = tree.getroot()image_width = int(root.find('size/width').text)image_height = int(root.find('size/height').text)txt_file = xml_file.replace('.xml', '.txt')txt_path = os.path.join(output_folder, txt_file)with open(txt_path, 'w') as f:for obj in root.findall('object'):class_name = obj.find('name').textclass_index = class_names.index(class_name)bbox = obj.find('bndbox')x_min = int(float(bbox.find('xmin').text))y_min = int(float(bbox.find('ymin').text))x_max = int(float(bbox.find('xmax').text))y_max = int(float(bbox.find('ymax').text))x_center = (x_min + x_max) / (2 * image_width)y_center = (y_min + y_max) / (2 * image_height)width = (x_max - x_min) / image_widthheight = (y_max - y_min) / image_heightf.write(f'{class_index} {x_center} {y_center} {width} {height}\n')

3.文件处理脚本

将数据集按照7:2:1的比例划分为训练集、验证集和测试集,并生成相应的目录

python3 split_train_val_test.py
# -*- coding: utf-8 -*-import os
import random
import shutil# 设置文件路径和划分比例
root_path = "/home/lusx/data/voc_yolo/"
image_dir = "JPEGImages/"
label_dir = "labels_sum/"
train_ratio = 0.7
val_ratio = 0.2
test_ratio = 0.1# 创建训练集、验证集和测试集目录
os.makedirs("images/train", exist_ok=True)
os.makedirs("images/val", exist_ok=True)
os.makedirs("images/test", exist_ok=True)
os.makedirs("labels/train", exist_ok=True)
os.makedirs("labels/val", exist_ok=True)
os.makedirs("labels/test", exist_ok=True)# 获取所有图像文件名
image_files = os.listdir(image_dir)
total_images = len(image_files)
random.shuffle(image_files)# 计算划分数量
train_count = int(total_images * train_ratio)
val_count = int(total_images * val_ratio)
test_count = total_images - train_count - val_count# 划分训练集
train_images = image_files[:train_count]
for image_file in train_images:label_file = image_file[:image_file.rfind(".")] + ".txt"shutil.copy(os.path.join(image_dir, image_file), "images/train/")shutil.copy(os.path.join(label_dir, label_file), "labels/train/")# 划分验证集
val_images = image_files[train_count:train_count+val_count]
for image_file in val_images:label_file = image_file[:image_file.rfind(".")] + ".txt"shutil.copy(os.path.join(image_dir, image_file), "images/val/")shutil.copy(os.path.join(label_dir, label_file), "labels/val/")# 划分测试集
test_images = image_files[train_count+val_count:]
for image_file in test_images:label_file = image_file[:image_file.rfind(".")] + ".txt"shutil.copy(os.path.join(image_dir, image_file), "images/test/")shutil.copy(os.path.join(label_dir, label_file), "labels/test/")# 生成训练集图片路径txt文件
with open("train.txt", "w") as file:file.write("\n".join([root_path + "images/train/" + image_file for image_file in train_images]))# 生成验证集图片路径txt文件
with open("val.txt", "w") as file:file.write("\n".join([root_path + "images/val/" + image_file for image_file in val_images]))# 生成测试集图片路径txt文件
with open("test.txt", "w") as file:file.write("\n".join([root_path + "images/test/" + image_file for image_file in test_images]))print("数据划分完成!")

相关文章:

将VOC2012格式的数据集转为YOLOV8格式

文章目录 简介1.数据集格式1.1数据集目录格式对比1.2标签格式对比 2.格式转换脚本3.文件处理脚本 简介 将voc2012中xml格式的标签转为yolov8中txt格式将转换后的图像和标签按照yolov8训练的要求整理为对应的目录结构 1.数据集格式 1.1数据集目录格式对比 (1&…...

DevExpress WinForms Pivot Grid组件,一个类似Excel的数据透视表控件(二)

界面控件DevExpress WinForms的Pivot Grid组件是一个类似Excel的数据透视表控件,用于多维(OLAP)数据分析和跨选项卡报表。在上文中(点击这里回顾>>)我们介绍了DevExpress WinForms Pivot Grid组件的性能、分析服务、数据塑造能力等&…...

为什么越来越多的人从事软件测试行业?

1.市场需求增加:随着数字化转型和互联网的普及,各行各业都需要高质量、稳定可靠的软件来支持其业务运作。因此,对软件测试人员的需求也随之增加。同时,新兴技术的发展,如物联网、大数据、区块链、人工智能等&#xff0…...

ERP数据仓库模型

ERP数据仓库模型建设是一个复杂的过程,涉及到多个主题域。以下是一个详细的设计方案: 确定业务需求和目标 在开始设计数据仓库模型之前,需要了解企业的业务需求和目标。这包括了解企业的运营模式、业务流程、关键绩效指标等。通过与业务部门…...

基于单片机的智能小车 (论文+源码)

1. 系统设计 此次可编程智能小车系统的设计系统,结合STM32单片机,蓝牙模块,循迹模块,电机驱动模块来共同完成本次设计,实现小车的循迹避障功能和手机遥控功能,其整体框架如图2.1所示。其中,采用…...

Redis和MySQL双写一致性实用解析

1、背景 先阐明一下Mysql和Redis的关系:Mysql是数据库,用来持久化数据,一定程度上保证数据的可靠性;Redis是用来当缓存,用来提升数据访问的性能。 关于如何保证Mysql和Redis中的数据一致(即缓存一致性问题…...

win10彻底永久关闭自动更新的方法

win10彻底永久关闭自动更新的方法 文章目录 win10彻底永久关闭自动更新的方法一、禁用Windows Update服务二、在组策略里关闭Win10自动更新相关服务 可以参考这个视频的做法: 教学视频搬用 一、禁用Windows Update服务 1、同时按下键盘 Win R,打开运行…...

【webpack】初始化

webpack 旧项目的问题下一代构建工具 Vite 主角 :webpack安装webpack1,mode的选项2,使用source map 精准定位错误行数3,使用watch mode(观察模式),自动运行4,使用webpack-dev-server工具,自动刷…...

服务器GPU占用,kill -9 PID 用不了,解决办法

PID(progress ID 进程ID) 上图为占用情况,使用下面的指令都不管用 kill -9 PID kill -15 PID # 加入sudo 还是不行 # 等等网上的 chatgpt 提供的其他办法,一圈试了下来还是不管用最后解决办法 首先用下面的指令查看进程的树结构…...

Vue学习笔记-Vue3中的toRaw和markRaw

toRaw 作用:将一个由reactive生成的响应式对象转为普通对象 导入: import {toRaw} from vue 使用方法: let data reactive({k1:v1,k2:v2 }) //将对象变为非响应式的普通对象 let raw_data toRaw(data)使用场景:用于读取响应式…...

【Android Audio Focus 音频焦点】

介绍 Android 中的音频焦点(Audio Focus)是一种机制,用于管理应用程序之间的音频资源竞争。当多个应用程序同时请求使用音频设备时,通过音频焦点机制可以确保最终用户的体验不受影响。 两个或两个以上的 Android 应用可同时向同…...

ChatGPT一周年,一图总结2023生成式AI里程碑大事件时间线

带你探索AI的无限可能!AI一日,人间一年,这句话绝非空谈! AI技术在不断地发展,让我们一起期待它未来更多的可能性吧! 2022 年 11 月 30 日,OpenAI 宣布正式推出 ChatGPT。365 天过去,…...

Python 接口测试response返回数据对比的方法

背景:之前写的接口测试一直没有支持无限嵌套对比key,上次testerhome逛论坛,有人分享了他的框架,看了一下,有些地方不合适我这边自己修改了一下,部署在jenkins上跑完效果还不错,拿出来分享一下。…...

LainChain 原理解析:结合 RAG 技术提升大型语言模型能力

摘要:本文将详细介绍 LainChain 的工作原理,以及如何通过结合 RAG(Retrieval-Aggregated Generation)技术来增强大型语言模型(如 GPT 和 ChatGPT 等)的性能。我们将探讨 COT、TOT、RAG 以及 LangChain 的概…...

6-6 堆排序 分数 10

typedef int Datatype; typedef struct {Datatype* elem; int Length; }SqList; typedef SqList HeapType; void swap(int* a, int* b) {int tmp *a;*a *b;*b tmp; } //建大堆 //m: 结点个数 s: 待下调父结点下标 void HeapAdjust(HeapType H, int s, int m) {int child …...

高翔《自动驾驶与机器人中的SLAM技术》第九、十章载入静态地图完成点云匹配重定位

修改mapping.yaml文件中bag_path: 完成之后会产生一系列的点云文件以及Keyframe.txt文件: ./bin/run_frontend --config_yaml ./config/mapping 生成拼接的点云地图map.pcd文件 : ./bin/dump_map --pose_sourcelidar 。、 完成第一次优…...

英语六级翻译

1. 青海是中国西北部的一个省份,平均海拔 3000 以上,大部分地区为高山和高原。青海省得名全国最大的咸水湖青海湖。青海湖被誉为“中国最美的湖泊”,是最受欢迎的旅游景点之一,也是摄影师和艺术家的天堂。 青海山川壮丽,地大物博。石油和天然气储量丰富,省内许多城市的…...

VMware配置Ubuntu虚拟机

目录标题 1. 相关问题 1. 相关问题 Ubuntu虚拟机与主机能ping通,但是xftp无法连接 解决:Ubuntu安装 OpenSSH 服务器:sudo apt install openssh-server...

Backtrader 文档学习-Platform Concepts

Backtrader 文档学习-Platform Concepts 1.开始之前 导入backtrader ,以及backtrader 的指示器、数据反馈的模块 。 import backtrader as bt import backtrader.indicators as btind import backtrader.feeds as btfeeds看看btind模块下有什么方法和属性&#x…...

策略模式(常用)

策略模式的简介 在软件开发中,设计模式是为了解决常见问题而提供的一套可重用的解决方案。策略模式(Strategy Pattern)是其中一种常见的设计模式,它属于行为型模式。该模式的核心思想是将不同的算法封装成独立的策略类&#xff0c…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子&#xff08…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

Java 语言特性(面试系列1)

一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...

基于数字孪生的水厂可视化平台建设:架构与实践

分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...

蓝桥杯3498 01串的熵

问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798&#xff0c; 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

SQL慢可能是触发了ring buffer

简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...

Mysql8 忘记密码重置,以及问题解决

1.使用免密登录 找到配置MySQL文件&#xff0c;我的文件路径是/etc/mysql/my.cnf&#xff0c;有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...

WebRTC从入门到实践 - 零基础教程

WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC&#xff1f; WebRTC&#xff08;Web Real-Time Communication&#xff09;是一个支持网页浏览器进行实时语音…...