【目标检测数据集处理】DOTA数据集转换coco格式

有时候dota数据集格式无法使用,需要转换为coco数据集。代码如下

import os
import cv2
import json
from tqdm import tqdm
import numpy as np


def txt2xywh(txt_file_path, image_width, image_height):
    with open(txt_file_path, 'r') as f:
        lines = f.readlines()
    boxes = []
    for line in lines:
        parts = line.strip().split(',')
        category = parts[0].split()
        x1, y1, x2, y2, x3, y3, x4, y4, confidence = category[1:]
        x1 = float(x1)
        x2 = float(x2)
        x3 = float(x3)
        x4 = float(x4)
        y1 = float(y1)
        y2 = float(y2)
        y3 = float(y3)
        y4 = float(y4)
        xmin = float(min(x1, x2, x3, x4))
        xmax = float(max(x1, x2, x3, x4))
        ymin = float(min(y1, y2, y3, y4))
        ymax = float(max(y1, y2, y3, y4))
        width = xmax - xmin
        height = ymax - ymin
        x_min = xmin / image_width
        y_min = ymin / image_height
        width = width / image_width
        height = height / image_height
        boxes.append([x_min, y_min, width, height])
    return int(category[0]), float(confidence), boxes


def yolo2txt(originLabelsDir, originImagesDir, saveTempTxt, img_suffix='png'):
    """
    将yolo的标签全部存入一个txt文件中
    将yolo格式的标签:classId, xCenter, yCenter, w, h转换为
    coco格式:classId, xMin, yMim, xMax, yMax格式
    coco的id编号从1开始计算,所以这里classId应该从1开始计算
    最终annos.txt中每行为imageName, classId, xMin, yMim, xMax, yMax, 一个bbox对应一行
    originLabelsDir: 原始yolo标签路径
    originImagesDir: 原始图像路径
    ssaveTempTxt: 保存txt路径
    )
    """
    txtFileList = os.listdir(originLabelsDir)
    with open("data.json", "w") as f:
        # data = json.load(f)
        for txtFile in tqdm(txtFileList, desc="generating COCO format"):
            classes, score, bbox = txt2xywh(originLabelsDir+'/'+txtFile, 1024, 1024)
            data={
                "image_id": txtFile,
                "bbox":bbox[0],
                "score":score,
                "category_id":classes
            }
            json.dump(data,f)
            break
        


if __name__ == "__main__":
    # 原始标签路径
    originLabelsDir = '/Users/aoxin/CODE/python/dota2coco/labels'
    # 转换后的文件保存路径
    saveTempTxt = '/Users/aoxin/CODE/python/dota2coco/annos_temp.txt'
    # 原始标签对应的图片路径
    originImagesDir = '/Users/aoxin/CODE/python/dota2coco/labels' # meaningless
    yolo2txt(originLabelsDir, originImagesDir, saveTempTxt)

当然这是将旋转框数据集转换为正框数据集,会出现很多误差,但是比如yolov5-obb一些算法计算iou时都是采用的诸如此类的方法。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
### 回答1: 将DOTA(Defense of the Ancients)数据集处理成YOLO(You Only Look Once)格式可以通过以下步骤完成: 1. 数据预处理:首先,需要对DOTA数据集进行预处理,包括将标注文件和图像文件分开保存。标注文件通常以.xml或.txt格式提供,其中包含了每个图像中目标的位置和类别信息。图像文件则以.jpg或.png格式保存。 2. 类别和标签映射:根据DOTA数据集的类别标签定义,创建一个类别到整数的映射表。例如,将“plane”映射为0,“ship”映射为1,“storage tank”映射为2等等。 3. 调整坐标:DOTA数据集使用四边形框标记目标的位置,而YOLO需要使用矩形框表示。因此,需要将四边形框转换为矩形框。可以使用几何转换算法,例如旋转矩形框的最小外接矩形或最小旋转矩形,将四边形框调整为矩形框。 4. 数据标注格式转换:使用上述的类别标签映射和调整后的矩形框位置,可以将DOTA数据集的标注格式转换为YOLO格式。YOLO格式通常是一个文本文件,每一行对应一张图像,以如下格式呈现:类别索引 x中心坐标 y中心坐标 宽度 高度。例如,对于一辆车在图像中的位置,可以表示为“0 0.5 0.6 0.3 0.2”,其中0是类别的索引,(0.5, 0.6)是矩形框的中心坐标,0.3和0.2分别是矩形框的宽度和高度。 5. 数据分割:将处理后的YOLO格式标注文件和对应的图像文件分别移动到训练、验证和测试数据集的相应文件夹中,以便YOLO模型可以正确加载和训练。 通过以上步骤,就可以将DOTA数据集处理成YOLO格式,便于后续使用YOLO算法进行目标检测处理后的数据集可以直接用于训练YOLO模型。 ### 回答2: 要将Dota数据集处理成YOLO格式,需要进行以下步骤: 1. 下载Dota数据集:首先,需要从官方网站或其他资源中下载Dota数据集。该数据集包含Dota游戏中的图像及其对应的边界框标注信息。 2. 数据预处理:对数据集中的图像进行预处理操作。包括调整图像大小、转换图像格式等。可以使用图像处理库(如OpenCV)来实现这些操作。 3. 边界框转换:将Dota数据集中的边界框标注转换为YOLO格式。YOLO格式中的边界框使用相对坐标和尺寸表示,同时需要标注每个边界框的类别。因此,需要将Dota数据集中的边界框标注信息转换为YOLO格式要求的标签格式。 4. 标签文件生成:将转换后的YOLO格式的标签与对应的图像文件进行关联,生成YOLO格式的标签文件。YOLO要求每个图像对应一个标签文件,该文件包含每个边界框的类别和位置信息。 5. 数据集划分:将处理后的数据集划分为训练集、验证集和测试集,可以按比例划分,通常是70%的数据用于训练,20%用于验证,10%用于测试。 6. 数据集路径配置:将数据集的路径配置到YOLO配置文件中,以便YOLO模型能够正确读取和处理数据集。 7. 训练模型:使用YOLO框架进行训练。通过配置YOLO框架的参数和超参数,选择适当的优化算法、学习率等进行训练。此步骤需要使用GPU进行模型训练,以加速计算量。 8. 模型评估和测试:使用训练好的YOLO模型,对测试集进行评估和测试。评估指标可以使用mAP、IoU等常用指标进行衡量。 以上是将Dota数据集处理成YOLO格式的主要步骤,通过这些步骤可以将Dota数据集转换为适用于YOLO模型的输入形式,从而进行目标检测任务。具体的实现过程可能需要根据数据集和工具的不同进行相应的调整。 ### 回答3: 要将DOTA数据集处理成YOLO格式,首先需要理解DOTA数据集的结构和YOLO的要求。 DOTA数据集是一个常用的对象检测数据集,包括大量的航拍图像和标注信息。每个图像的标注信息通常以文本文件(.txt)的形式提供,其中包含了检测目标的类别、边界框的位置和其他相关信息。 YOLO(You Only Look Once)是一种基于深度学习的目标检测算法,要求输入图像和对应的标注信息采用特定的格式处理DOTA数据集成YOLO格式的步骤如下: 1. 首先,进入DOTA数据集的文件夹,检查数据集的目录结构。一般来说,数据集包含图像文件夹和标注文件夹。 2. 在YOLO格式中,每个图像对应一个文本文件,而不是使用DOTA数据集中的单个文本文件。因此,需要遍历每张图像并处理它们。 3. 对于每张图像,读取对应的标注文件,解析文本内容。通常标注文件中的每一行表示一个目标,其中包括目标的类别、边界框的位置和其他相关信息。将这些信息提取出来。 4. 将目标的类别转换为YOLO格式要求的类别序号。可以根据目标的类别名称和YOLO中的类别列表进行匹配。 5. 将边界框的位置信息转换为YOLO格式要求的形式。YOLO格式要求的边界框位置是相对于图像尺寸的标准化坐标,通常用边界框的中心点坐标、宽度和高度来表示。 6. 将转换后的目标类别和边界框位置信息写入新的文本文件,作为该图像的标注文件。 7. 重复上述步骤,处理所有的图像。 处理完成后,DOTA数据集就可以转换成YOLO格式,可以用于训练YOLO模型。但需要注意的是,不同的YOLO版本对于标注信息的要求可能有所不同,需要根据具体的YOLO版本进行相应的调整和修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

麦滋堡的摸鱼芝士

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值