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').texty_left_top = obj.find('.//y_left_top').textx_right_top = obj.find('.//x_right_top').texty_right_top = obj.find('.//y_right_top').textx_right_bottom = obj.find('.//x_right_bottom').texty_right_bottom = obj.find('.//y_right_bottom').textx_left_bottom = obj.find('.//x_left_bottom').texty_left_bottom = obj.find('.//y_left_bottom').textname = obj.find('.//name').textangle = 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 weightsmodel.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仿真......希望能帮到你!