[DIOR | DIOR-R]旋转目标检测数据集——基于YOLOv8obb,map50已达81.8%

DIOR是一个用于光学遥感图像目标检测的大规模基准数据集。涵盖20个对象类。这20个对象类是飞机、机场、棒球场、篮球场、桥梁、烟囱、水坝、高速公路服务区、高速公路收费站、港口、高尔夫球场、地面田径场、天桥、船舶、体育场、储罐、网球场、火车站、车辆和风磨。

1. DIOR简介

1.1 数据说明

DIOR由23463张遥感图像和190288个目标实例组成,这些目标实例用轴向对齐的边界框手动标记,由192472个轴对齐的目标边界框注释组成。数据集中图像大小为800×800像素,空间分辨率为0.5m ~ 30m。该数据集分为训练验证集(11725张图像)和测试集(11738张图像)。

https://arxiv.org/ftp/arxiv/papers/1909/1909.00133.pdf

DIOR-R数据集是在DIOR数据集的基础上,对目标实例重新标注边框,采用旋转框标注,这样避免了水平框的重叠问题。

https://arxiv.org/pdf/2110.01931.pdf

1.2 DIOR-R数据格式

下载地址:

http://www.escience.cn/people/gongcheng/DIOR.html

解压后,标签内的Horizontal Bounding Boxes为水平框,Oriented Bounding Boxes为旋转框,如下所示为旋转框示例,可以看到相关的信息,如坐标、角度、标签等信息。

2.DIOR-R数据处理

2.1 处理成如下格式

133 237 684 237 684 672 133 672 golffield 0

处理代码如下:

import os
import xml.etree.ElementTree as ET
# 输入文件夹和输出文件夹路径
input_folder = 'xmls'
output_folder = 'labels'
# 确保输出文件夹存在
os.makedirs(output_folder, exist_ok=True)
# 遍历输入文件夹中的所有XML文件
for xml_file in os.listdir(input_folder):
    if xml_file.endswith(".xml"):
        xml_path = os.path.join(input_folder, xml_file)
        # 读取XML文件
        tree = ET.parse(xml_path)
        root = tree.getroot()
        # 构建输出txt文件路径
        txt_file = os.path.join(output_folder, os.path.splitext(xml_file)[0] + '.txt')
        # 打开txt文件进行写入
        with open(txt_file, 'w') as f:
            # 循环遍历每个object节点
            for obj in root.findall('.//object'):
                # 提取需要的信息
                x_left_top = obj.find('.//x_left_top').text
                y_left_top = obj.find('.//y_left_top').text
                x_right_top = obj.find('.//x_right_top').text
                y_right_top = obj.find('.//y_right_top').text
                x_right_bottom = obj.find('.//x_right_bottom').text
                y_right_bottom = obj.find('.//y_right_bottom').text
                x_left_bottom = obj.find('.//x_left_bottom').text
                y_left_bottom = obj.find('.//y_left_bottom').text
                name = obj.find('.//name').text
                angle = obj.find('.//angle').text
                # 写入到txt文件
                line = f"{x_left_top} {y_left_top} {x_right_top} {y_right_top} {x_right_bottom} {y_right_bottom} {x_left_bottom} {y_left_bottom} {name} {angle}\n"
                f.write(line)
print("批量转换完成。")

 2.2进行obb格式的转换

转换后的结果如下:

9 0.16625 0.29625 0.855 0.29625 0.855 0.84 0.16625 0.84

转换代码如下所示:

from ultralytics.data.converter import convert_dota_to_yolo_obb
convert_dota_to_yolo_obb('C:\myyolo\ultralytics-main\dataobb')
#关于dataobb文件下的目录可参考https://blog.csdn.net/qq_41301570/article/details/135540398

对应的convert_dota_to_yolo_obb函数下的class_mapping修改如下:

class_mapping = {
        "airplane": 0,
        "airport": 1,
        "baseballfield": 2,
        "basketballcourt": 3,
        "bridge": 4,
        "chimney": 5,
        "dam": 6,
        "Expressway-Service-area": 7,
        "Expressway-toll-station": 8,
        "golffield": 9,
        "groundtrackfield": 10,
        "harbor": 11,
        "overpass": 12,
        "ship": 13,
        "stadium": 14,
        "storagetank": 15,
        "tenniscourt": 16,
        "trainstation": 17,
        "vehicle": 18,
        "windmill": 19,
    }
9 0.16625 0.29625 0.855 0.29625 0.855 0.84 0.16625 0.84

2.3进行训练

如果你不想浪费时间进行数据的处理,可私戳!!!

from ultralytics import YOLO
import os
​
def main():
    model = YOLO('yolov8s-obb.yaml').load('yolov8s-obb.pt')  # build from YAML and transfer weights
    model.train(data='dior8-obb.yaml', epochs=300, imgsz=[1280, 659], batch=4, workers=4)
if __name__ == '__main__':
    main()

 2.4进行验证

from ultralytics import YOLO
def main():
    model = YOLO(r'runs/obb/train/weights/best.pt')
    model.val(data='dior8-obb.yaml', imgsz=1024, batch=4, workers=4)
if __name__ == '__main__':
    main()

 2.5测试集上的表现

最后:

如果你想要进一步了解更多的相关知识,可以关注下面公众号联系~会不定期发布相关设计内容包括但不限于如下内容:信号处理、通信仿真、算法设计、matlab appdesigner,gui设计、simulink仿真......希望能帮到你!

5a8015ddde1e41418a38e958eb12ecbd.png

  • 20
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

MatpyMaster

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

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

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

打赏作者

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

抵扣说明:

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

余额充值