从零开始:YOLO11 训练 DOTA OBB 遥感数据旋转框目标检测

从零开始:YOLO11 训练 DOTA OBB 遥感数据

1.数据/工具下载

数据下载:https://captain-whu.github.io/DOTA/dataset.html

代码下载:https://github.com/ultralytics/ultralytics

模型下载:https://docs.ultralytics.com/tasks/obb/

数据转换工具:https://ai4wild.com/zeyoo

2. 数据处理

2.1 使用深度学习样本处理工具Zeyoo 可以方面的查看数据和格式转换

https://ai4wild.com/zeyoo

支持3种系统,windows ,mac 和 linux ubuntu

在图像文件夹路径直接选择解压好的dota 里面的images路径,在obb标签文件夹路径我们使用的是v1.5版本,同样直接选择解压好的文件夹路径

由于原始dota数据尺寸较大,长、宽都有上千像素,因此要先裁剪切分为小尺寸的图像。

选择子图像菜单下的分块切割图像。可以选择一些设置参数。

由于数据量很大,因此等待时间较长。

点击右上角重置按钮,关闭已加载的图像,然后在文件里,选择新生成的小尺寸图像和对应label,并通过软件自带的转换工具,转为YOLO格式

YOLO格式的旋转框如下,和DOTA原始格式不同

复制代码
class_index x1 y1 x2 y2 x3 y3 x4 y4

例子:0 0.780811 0.743961 0.782371 0.74686 0.777691 0.752174 0.776131 0.749758

先选择是OBB框标注,可以在类别选项卡里扫描并加载所有类别名,此处可以自定义不同类别对应的YOLO标注序号


勾选:导出包含类别映射的YAML文件,这样下方的yaml可以直接生成:

添加上yolo数据路径即可:

复制代码
path: D:/test_dataset/train/data
train: images/train
val: images/val

names:
  0: large-vehicle
  1: ship
  2: plane
  3: bridge
  4: harbor
  5: helicopter
  6: roundabout
  7: storage-tank
  8: tennis-court
  9: small-vehicle
  10: swimming-pool
  11: container-crane
  12: baseball-diamond
  13: basketball-court
  14: soccer-ball-field
  15: ground-track-field

nc: 16

这里我们重命名为了obb.yaml

建议YOLO数据文件夹命名格式为:

复制代码
dataset/
├── train/
│   ├── images/          
│   │   ├── image1.jpg
│   │   ├── image2.jpg
│   │   └── ...
│   └── labels/          
│       ├── image1.txt
│       ├── image2.txt
│       └── ...
├── val/                 
│   ├── images/
│   └── labels/
├── test/                
│   ├── images/
│   └── labels/
└── data.yaml            # 配置文件

3. 模型运行

3.1 下载模型和对应权重

代码下载:https://github.com/ultralytics/ultralytics

模型下载:https://docs.ultralytics.com/tasks/obb/

新建train.py ,运行。

python 复制代码
import os
import torch


from ultralytics import YOLO

if __name__ == '__main__':
    model = YOLO("yolo11m-obb.pt")

    results = model.train(
        data=r"D:\test_dataset\train\data\obb.yaml",
        epochs=10,
        imgsz=512,
        batch=5,
        device=0,
        workers=0, 
    )

测试输出:

python 复制代码
import os
from pathlib import Path
from ultralytics import YOLO
import cv2


def predict_obb(input_folder: str, output_folder: str, model_path):
    os.makedirs(output_folder, exist_ok=True)
    model = YOLO(model_path)
    
    image_extensions = {'.jpg', '.jpeg', '.png', '.bmp', '.tif', '.tiff', '.webp'}
    input_path = Path(input_folder)
    image_files = [f for f in input_path.iterdir() 
                   if f.is_file() and f.suffix.lower() in image_extensions]
    
    if not image_files:
        print(f"在 {input_folder} 中未找到图像文件")
        return
    
    print(f"找到 {len(image_files)} 张图像,开始预测...")
    
    for img_file in image_files:
        results = model(str(img_file))
        
        for result in results:
            result_img = result.plot()
            output_path = Path(output_folder) / f"{img_file.stem}_result{img_file.suffix}"
            cv2.imwrite(str(output_path), result_img)
        
        print(f"已处理: {img_file.name}")
    
    print(f"\n预测完成!结果保存在: {output_folder}")


if __name__ == '__main__':
    INPUT_FOLDER = r"D:\test_dataset\test_images"
    OUTPUT_FOLDER = r"D:\test_dataset\obb_results"
    MODEL_PATH = r"runs/obb/train11/weights/best.pt"
    
    predict_obb(INPUT_FOLDER, OUTPUT_FOLDER, MODEL_PATH)
相关推荐
Hello.Reader1 天前
PyFlink 向量化 UDF(Vectorized UDF)Arrow 批传输原理、pandas 标量/聚合函数、配置与内存陷阱、五种写法一网打尽
python·flink·pandas
曲幽1 天前
FastAPI + SQLite:从基础CRUD到安全并发的实战指南
python·sqlite·fastapi·web·jwt·form·sqlalchemy·oauth2
用户4303510250681 天前
Python 中除 Ecception 外的三类系统异常
python
搂着猫睡的小鱼鱼1 天前
基于Python的淘宝评论爬虫
开发语言·爬虫·python
小途软件1 天前
基于深度学习的人脸属性增强器
java·人工智能·pytorch·python·深度学习·语言模型
ai_top_trends1 天前
AI 生成工作计划 PPT 是否适合年初规划与年度汇报
人工智能·python·powerpoint
天才测试猿1 天前
自动化测试基础知识总结
自动化测试·软件测试·python·测试工具·程序人生·职场和发展·测试用例
棒棒的皮皮1 天前
【深度学习】YOLO模型精度优化全攻略
人工智能·深度学习·yolo·计算机视觉
技术净胜1 天前
Python 连接 MySQL 数据库步骤
数据库·python·mysql