【目标检测-数据集准备】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 getcwd

sets = ['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 - 1
    y = (box[2] + box[3]) / 2.0 - 1
    w = box[1] - box[0]
    h = box[3] - box[2]
    x = x * dw
    w = w * dw
    y = y * dh
    h = h * dh
    return 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:
        #     continue
        cls = obj.find('name').text
        if cls not in classes:
            continue
        cls_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 = w
        if b4 > h:
            b4 = h
        b = (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')

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

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

相关文章

数据结构 之 队列(Queue)

​​​​​​​ 🎉欢迎大家观看AUGENSTERN_dc的文章(o゜▽゜)o☆✨✨ 🎉感谢各位读者在百忙之中抽出时间来垂阅我的文章,我会尽我所能向的大家分享我的知识和经验📖 🎉希望我们在一篇篇的文章中能够共同进步&#xff0…

数据结构知识点汇总(持续更新版)

数据结构 一、绪论 检测知识: 1.1基本概念 以前的计算机 弹道计算机 现如今 主要运用于非数值的计算 基本概念和术语 数据:是信息的载体,描述客观事物属性的值,字符以及所有能输入到计算机中并被计算机程序识别和处理的符号的…

vite打包流程和原理

文章目录 打包原理Vite比Webpack快?在生产环境下的表现启动项目后,完成加载比较慢?Esbuild & Rollup热更新 打包原理 vite利用了ES module这个特性,使用vite运行项目时,首先会用esbuild进行预构建,将所…

Java 根据IP获取IP地址信息(离线)

<!-- https://mvnrepository.com/artifact/org.lionsoul/ip2region --><dependency><groupId>org.lionsoul</groupId><artifactId>ip2region</artifactId><version>2.7.0</version></dependency> 地址&#xff1a;http…

影响交易收益的因素有哪些?

在尝试做交易时&#xff0c;你可能会问自己一个问题&#xff1a;交易一天能赚多少钱&#xff1f;“如果我全职投入交易&#xff0c;一天能赚多少&#xff1f;”或者更广泛地说&#xff0c;“交易能为我带来怎样的财富&#xff1f;”这些问题本质上都充满了不确定性&#xff0c;…

PCM和I2S区别

I2S和PCM接口都是数字音频接口&#xff0c;而所见的蓝牙到cpu以及codec的音频接口都是用PCM接口&#xff0c;是不是两个接口有各自不同的应用呢&#xff1f;先来看下概念。 PCM&#xff08;PCM-clock、PCM-sync、PCM-in、PCM-out&#xff09;脉冲编码调制&#xff0c;模拟语音信…

力扣L12--- 125验证回文串(java版)-2024年3月15日

1.题目 2.知识点 注1&#xff1a;在 Java 中&#xff0c;toString() 方法用于将对象转换为字符串表示形式。对于数组对象&#xff0c;toString() 方法将返回数组的字符串表示形式&#xff0c;其中包含数组中每个元素的字符串表示形式&#xff0c;以逗号分隔&#xff0c;并且包…

使用IDEA2023创建传统的JavaWeb项目并运行与调试

日期:2024-0312 作者:dusuanyun 文档环境说明: OS:Deepin 20.9(Linux) JDK: OpenJDK21 Tomcat:10.1.19 IDEA: 2023.3.4 (Ultimate Edition) 本文档默认已经安装JDK及环境变量的配置。 关键词…

【RPG Maker MV 仿新仙剑 战斗场景UI (四)】

RPG Maker MV 仿新仙剑 战斗场景UI 四 三级战斗指令菜单效果代码完成效果 下篇预告 三级战斗指令菜单 仙剑1中三级战斗的菜单内容如下&#xff1a;使用、投掷、装备这三项。 效果 在RMMV中原始菜单中是没有这三级菜单的&#xff0c;因此需要重新进行添加进去。 代码 这里贴…

量子遗传算法优化VMD参数,五种适应度函数任意切换,最小包络熵、样本熵、信息熵、排列熵、排列熵/互信息熵...

关于量子遗传算法&#xff0c;在众多文献均有应用。下面简述一下原理。 &#xff08;1&#xff09;量子比特编码 子遗传算法通过引入量子比特来完成基因的存储和表达。量子比特是量子信息中的概念&#xff0c;它与经典比特不同&#xff0c;是因为它可以在同一时刻处于两个状态的…

Leet code 438 找到字符串中所有字母异位词

解题思路&#xff1a;滑动窗口 三步走 进窗口 判断 出窗口 然后更新结果 定义两个hash表在第一个表中存 p的有效字符 比如 abc a一个 b一个 c一个 这样就存在三个有效字符 在第二个hash表中进行滑动窗口的运行 定义一个常量count 如果滑动窗口中有效字符存在一个就…

string模拟实现

前言 上一期我们对STL进行了简单的介绍以及学习了string常用API的基本使用&#xff01;本期我们来探索它的底层实现&#xff01;自己对string的常用的接口进行模拟实现&#xff01; 本期内容介绍 常用成员函数模拟实现 常用非成员函数模拟实现 成员函数 构造函数 在进行模拟…

计算机网络 谢希仁(001-2)

计算机网络-方老师 总时长 24:45:00 共50个视频&#xff0c;6个模块 此文章包含1.5到1.7的内容 1.5计算机网络类别 连通 共享 分类方法 广域网是边缘部分和核心部分的核心部分 以前是拨号连接 现在是光纤 总线型 星型 环形网 1.6计算机网络的性能 带上单位之后就不是…

git bash 命令行反应慢、卡顿(定位出根本原因)

参考该博主&#xff1a; https://blog.csdn.net/weixin_50212044/article/details/131575987?utm_mediumdistribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-0-131575987-blog-130024908.235v43pc_blog_bottom_relevance_base4&spm1001.210…

IP证书有什么作用?怎么申请?

关于IP地址证书&#xff0c;它的主要作用有这么几个点&#xff1a; 1.验明正身&#xff1a;就像身份证一样&#xff0c;它可以证明某个服务器的IP地址是真的、合法的&#xff0c;让咱知道咱们连接的就是正确的服务器&#xff0c;而不是冒牌货。这样一来&#xff0c;就可以降低像…

使用OpenCV实现人脸特征点检测与实时表情识别

引言&#xff1a; 本文介绍了如何利用OpenCV库实现人脸特征点检测&#xff0c;并进一步实现实时表情识别的案例。首先&#xff0c;通过OpenCV的Dlib库进行人脸特征点的定位&#xff0c;然后基于特征点的变化来识别不同的表情。这种方法不仅准确度高&#xff0c;而且实时性好&am…

塑料工厂5G智能制造数字孪生可视化平台,推进塑料行业数字化转型

塑料工厂5G智能制造数字孪生可视化平台&#xff0c;推进塑料行业数字化转型。塑料制造行业作为重要的工业领域&#xff0c;亟需借助这一平台实现产业升级与转型&#xff0c;以适应市场的变化和提高生产效率。传统的塑料制造过程往往存在生产效率低下、资源浪费、环境污染等问题…

鸿蒙车载原生开发,拓展新版图

一天内连发“五弹”、HiCar 4.0首次上车 华为鸿蒙狂扩“汽车朋友圈”-上游新闻 汇聚向上的力量 3月15日&#xff0c;在“华为云&华为终端云服务创新峰会2024”上&#xff0c;华为首批汽车行业伙伴广汽传祺、岚图汽车、零跑汽车、凯翼汽车加入鸿蒙生态合作&#xff0c;华为…

Python - 应用篇 :ChatGPT +Pycharm 序列号自动生成

前言&#xff1a; 客户要求在产品外壳上新增可追溯的二维码贴花&#xff0c;二维码信息内容如下&#xff1a; 编码格式&#xff1a;SBD 零部件代码 控制盒序列号 控制盒厂家 例如&#xff1a;[)>06P725-18428S24031410001ZJL SBD 零部件代码&#xff1a;[)>06P725-184…

考研复习C语言进阶(3)

结构体 1 结构体的声明 1.1 结构的基础知识 结构是一些值的集合&#xff0c;这些值称为成员变量。结构的每个成员可以是不同类型的变量。 1.2 结构的声明 struct tag { member-list; }variable-list; 例如描述一个学生&#xff1a; struct Stu { char name[20];//名字 int ag…