【目标检测-数据集准备】DIOR转为yolo训练所需格式

【目标检测】DIOR遥感影像数据集,转为yolo系列模型训练所需格式。

在这里插入图片描述
标签文件位于Annotations下,格式为xml,yolo系列模型训练所需格式为txt,格式为

class_id x_center,y_center,w,h

其中,train,text,val按照官方方式划分(DIOR/ImageSets/Main/train.txt),分别含影像5062,5063,11738张。
在DIOR/ImageSets/Main/xx.txt 路径中,txt文件为不包含影像后缀的影像名称,如下图
在这里插入图片描述
yolo训练中需要的train.txt文件内容需要是包括后缀的绝对路径:
在这里插入图片描述

转换代码:
转换中的outpath可以自定义,为后续配置文件中的路径

注意:
(1)将DIOR的影像文件夹改名为images,注意全小写,字母要对
(2)转换后的标签位于影像文件夹下的labels下,不要修改
**images和labels两个文件夹名称不要修改,不要修改,否则会报错:No labels in xx./train.cache

# -*- coding: utf-8 -*-
import xml.etree.ElementTree as ET
import os
from os import getcwdsets = ['train', 'val', 'test']# class names
classes =  ['airplane', 'airport', 'baseballfield', 'basketballcourt', 'bridge', 'chimney', 'dam','Expressway-Service-area', 'Expressway-toll-station', 'golffield', 'groundtrackfield', 'harbor','overpass', 'ship', 'stadium', 'storagetank', 'tenniscourt', 'trainstation', 'vehicle', 'windmill']   # 改成自己的类别
abs_path = os.getcwd()def convert(size, box):dw = 1. / (size[0])dh = 1. / (size[1])x = (box[0] + box[1]) / 2.0 - 1y = (box[2] + box[3]) / 2.0 - 1w = box[1] - box[0]h = box[3] - box[2]x = x * dww = w * dwy = y * dhh = h * dhreturn x, y, w, h#修改路径-----------------------------
datasetpath="E:/dataset/DIOR"
imgpath="E:/dataset/DIOR/images"
outpath="E:/dataset/DIOR/myyolo"def convert_annotation(image_id):in_file = open(datasetpath+'/Annotations/%s.xml' % (image_id), encoding='UTF-8')out_file = open(datasetpath+'/labels/%s.txt' % (image_id), 'w')   #不要修改labels文件夹名称tree = ET.parse(in_file)root = tree.getroot()size = root.find('size')w = int(size.find('width').text)h = int(size.find('height').text)for obj in root.iter('object'):# difficult = obj.find('Difficult').text# cls = obj.find('name').text# if cls not in classes or int(difficult) == 1:#     continuecls = obj.find('name').textif cls not in classes:continuecls_id = classes.index(cls)xmlbox = obj.find('bndbox')b = (float(xmlbox.find('xmin').text), float(xmlbox.find('xmax').text), float(xmlbox.find('ymin').text),float(xmlbox.find('ymax').text))b1, b2, b3, b4 = b# 标注越界修正if b2 > w:b2 = wif b4 > h:b4 = hb = (b1, b2, b3, b4)bb = convert((w, h), b)out_file.write(str(cls_id) + " " + " ".join([str(a) for a in bb]) + '\n')wd = getcwd()
for image_set in sets:if not os.path.exists(datasetpath+'/labels/'):os.makedirs(datasetpath+'/labels/')image_ids = open(datasetpath+'/ImageSets/Main/%s.txt' % (image_set)).read().strip().split()if not os.path.exists(outpath):os.makedirs(outpath)list_file = open(outpath+'/%s.txt' % (image_set), 'w')for image_id in image_ids:list_file.write(imgpath+'/%s.jpg\n' % (image_id))convert_annotation(image_id)list_file.close()

转换后的text文件:
在这里插入图片描述
建立数据集配置文件DIOR.yaml,路径修改为outpath,

train: E:/dataset/DIOR/myyolo/train.txt
val: E:/dataset/DIOR/myyolo/val.txt# number of classes
nc: 20# class names
names: ['airplane', 'airport', 'baseballfield', 'basketballcourt', 'bridge', 'chimney', 'dam','Expressway-Service-area', 'Expressway-toll-station', 'golffield', 'groundtrackfield', 'harbor','overpass', 'ship', 'stadium', 'storagetank', 'tenniscourt', 'trainstation', 'vehicle', 'windmill']

在训练时将data参数设置为DIOR.yaml即可使用yolo系列模型训练DIOR。YOLOv5,v7,v8通用。

parser.add_argument('--data', type=str, default='data/DIOR.yaml', help='data.yaml path')

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

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

相关文章

Python笔记|字符串的转义

重新梳理一遍python的基础知识 除了数字,Python 还可以操作字符串。字符串有多种表现形式,用单引号(……)或双引号("……")标注的结果相同 。反斜杠 \ 用于转义: >>>spam e…

java抽象类的作用及解析

在 Java 中,抽象类是一种特殊的类,它可以用于定义一些抽象的方法和属性,这些方法和属性可能在子类中有不同的实现。 抽象类的主要作用包括: 提供抽象方法:抽象类可以包含一些没有具体实现的抽象方法,这些…

JVM-5

1.选择垃圾收集器 如果你的堆大小不是很大(比如 100MB ),选择串行收集器一般是效率最高的。 参数: -XX:UseSerialGC 。如果你的应用运行在单核的机器上,或者你的虚拟机核数只有单核,选择串行收集器依然是合…

论文阅读:FCB-SwinV2 Transformer for Polyp Segmentation

这是对FCBFormer的改进,我的关于FCBFormer的论文阅读笔记:论文阅读FCN-Transformer Feature Fusion for PolypSegmentation-CSDN博客 1,整体结构 依然是一个双分支结构,总体结构如下: 其中一个是全卷积分支&#xff…

数据结构之链式二叉树

当我们初步了解二叉树后 我们就可以进一步去深入学习二叉树了 1.链式二叉树的遍历 这里我们先去定义链式二叉树的结构 分为两个指针 一左一右 他们分别指向左子树和右子树 typedef int BTDataType;typedef struct BinaryTreeNode {BTDataType data;struct BinartTreeNod…

【设计模式】一、设计模式概述

文章目录 一、设计模式概述(一)设计模式是什么1. 设计模式的定义2. 设计模式的组成要素3、常用设计模式一览表 (二)设计模式的优点(用途)※ 本文小结 一、设计模式概述 (一)设计模式…

tcp/ip协议2实现的插图,数据结构8 (30 - 32章)

(201) 201 三十0 中断优先级补充 (202) 202 三十1 TCP的用户需求 函tcp_usrreq一 (203) 203 三十2 TCP的用户需求 函tcp_usrreq二 (204) 204 三十3 TCP的用户需求 函tcp_usrreq三 (205) 205 三十4 TCP的用户需求 函tcp_usrreq四 (206) 206 三十5 TCP的用户需求 函tcp_usrreq五 …

docker实战(3)

1, jdk17版本的dockerfile FROM eclipse-temurin:17-jre ADD ./target/ods-poc-0.0.1-SNAPSHOT.jar /home/app/app.jar WORKDIR /home/app ENV TZ Asia/Shanghai ENTRYPOINT ["java","-jar","/home/app/app.jar"] EXPOSE 8083dockerfile 1, …

emment语法

文章目录 1. 生成普通的标签2. 生成 div类名3. 生成指定标签类名/id 值4. 生成带有子元素的标签5. 生成内部文本6. 一次可以生成多个标签7. 生成带有指定属性 的元素8. 生成相邻兄弟元素 1. 生成普通的标签 本质使用的就是元素选择器,例如 div p a 标签等等。 2. …

Openlayers入门教程 --- 万字长篇

也许你还不熟悉Openlayers,也许你是一个Openlayers小白,零基础没关系,这篇文章提供最基础的 Openlayers 教程,简单易学,贯穿整个Openlayers 知识体系。读完本文,您将会对 Openlayers 有一个全新的认识。 文…

图像分类技术在电商平台的创新应用与实践

一、引言 在当今快速发展的互联网电商领域,商家面临着激烈的竞争和不断变化的市场需求。我们在服务电商的过程中,利用AI大模型技术创新性地引入了图像分类技术,为供应链管理带来了革命性的变革。接下来,我们将深入探讨这一项目的…

51单片机基础篇系列-超声波测距

🌈个人主页:会编辑的果子君 💫个人格言:“成为自己未来的主人~” HC-SR04产品特点 典型工作用电压:5V 超小静态工作电流:小于2mA 感应角度:不大于15度 探测距离:2cm-400cm 高精度&#…

论文阅读:LAPFormer: A Light and Accurate PolypSegmentation Transformer

这是一个基于Transformer的轻量级图像分割模型。作者们使用MiT(Mix Transformer)作为编码器,并为LAPFormer设计了一个新颖的解码器,该解码器利用多尺度特征,并包含特征精炼模块和特征选择模块,以生成精细的…

16. UE5 RPG获取GE应用的回调,并根据Tag设置数据显示到窗口

在上一篇介绍了对标签如何在项目中设置,这一篇先讲解一下如何在GE里面使用GameplayTag标签。 之前我在第十一章节中 11. UE5 RPG使用GameplayEffect修改角色属性(二)介绍了一些GE的属性,在UE 5.3版本中,修改的配置方式…

药店在线客服机器人的设计与开发

摘要 随着信息技术的快速发展和人工智能领域的不断进步,药店在线客服机器人已经成为现代药店服务模式中不可或缺的一部分,这种机器人技术通过模拟人类客服代表,能够提供24/7的咨询服务,从而大幅提高服务效率和顾客满意度&#xff…

集合系列(二) -List接口详解

一、List简介 List 的数据结构就是一个序列,存储内容时直接在内存中开辟一块连续的空间,然后将空间地址与索引对应。 以下是List集合简易架构图 由图中的继承关系,可以知道,ArrayList、LinkedList、Vector、Stack都是List的四个…

软件设计和体系结构

软件设计和体系结构 一、引言 软件 定义:一系列按照特定顺序组织的计算机数据、指令的集合 特点: 软件不是生产制造,是设计开发软件不会磨损和老化软件需要根据实际情况进行定制开发 软件设计的基本原则 抽象方法 过程抽象:是指…

进程和ELF文件

程序的二进制格式: 关联知识:GCC编译原理与使用-CSDN博客 linux二进制程序的严格格式:ELF(Executeable and Linkable format) 一 预处理,编译,汇编得到的.o文件,就是ELF的第一种类…

Altium Designer快速入门及项目实战教程之层次原理图PCB设计(七)

一、简介 层次PCB设计是电子工程领域中一项至关重要的任务,它涉及到电路板的各个层面的功能分配和布局规划。这一设计过程的关键在于如何合理安排每一层的功能和布局,以确保电路板的性能达到最佳状态,并同时保证其可靠性。 首先&#xff0c…

数据结构 第3章:栈与队列

文章目录 1. 栈1.1 栈的基本概念1.2 栈的基本操作1.3 栈的顺序存储实现1.4 栈的链式存储实现 2. 队列2.1 队列的基本概念2.2 队列的基本操作2.3. 队列的顺序存储实现2.4 队列的链式存储实现2.5 双端队列 3. 栈与队列的应用3.1 栈在括号匹配中的应用3.2 栈在表达式求值中的应用3…