船舶

旋转目标检测高分辨率图像细粒度分类船舶检测集


在这里插入图片描述

旋转目标检测高分辨率图像细粒度分类船舶检测数据集

项目 内容
数据集名称 旋转目标检测高分辨率图像细粒度分类船舶检测数据集
总图像数量 约 2,000 张(具体数量需进一步确认)
图像分辨率 高分辨率图像(具体尺寸未提供,但适合细粒度分类任务)
标注格式 支持旋转目标检测,包含边界框坐标、类别标签及旋转角度
适用任务 船舶目标检测、细粒度分类、旋转目标识别
推荐模型 R-FCN、RRPN、Oriented R-CNN、YOLO-R 等旋转目标检测模型

在这里插入图片描述

船舶类别分布表

类别编号 英文标签 中文名称 实例数量(约) 备注
0 Other 其他 700 包含无法明确归类的船舶
1 Aircraft carriers 航空母舰 50 大型军用舰艇
2 Wasp 黄蜂级两栖攻击舰 60 两栖作战舰
3 Tarawa 塔拉瓦级两栖攻击舰 80 两栖作战舰
4 Windbay Island 温德贝岛级登陆舰 90 登陆支援舰
5 San Antonio 圣安东尼奥级船坞运输舰 100 运输与指挥舰
6 Ticonderoga 提康德罗加级导弹巡洋舰 350 导弹巡洋舰
7 Arleigh 阿利·伯克级驱逐舰 400 驱逐舰
8 Lewis and Perry 刘易斯和佩里级补给舰 250 补给舰
9 Henry Kaiser 亨利·凯泽级油轮 30 油轮
10 Bob Hope 鲍勃·霍普号医院船 20 医院船
11 Mercy 怜悯号医院船 20 医院船
12 Freedom 自由级濒海战斗舰 30 濒海战斗舰
13 Independence 独立级濒海战斗舰 30 濒海战斗舰
14 Avenger 报仇者级扫雷舰 200 扫雷舰
15 Submarine 潜艇 200 各类潜艇

在这里插入图片描述

数据集特点

特点 说明
高分辨率图像 细节丰富,支持细粒度分类任务
旋转目标标注 包含旋转角度信息,适用于复杂姿态下的目标检测
多类别覆盖 包含多种类型的船舶,涵盖军用与民用
实例分布广泛 不同类别的实例数量差异较大,需注意类别不平衡问题
开箱即用 标注格式标准,可直接用于旋转目标检测模型训练

在这里插入图片描述

典型应用场景

  • 海上交通监控与管理
  • 军事侦察与情报分析
  • 船舶自动化识别系统
  • 海洋环境监测与保护

该数据集为旋转目标检测和船舶细粒度分类提供了高质量的数据基础,适用于科研机构、军事部门及AI开发者开展相关研究与应用开发。如需生成训练配置文件或划分训练/验证集建议,请继续提问!
适用于 遥感图像、海上监控、军事侦察 等复杂场景。

YOLOv8 的扩展版本中支持 OBB(旋转框)任务,即 YOLOv8-obb

我们将基于 YOLOv8-obb 模型,完整指导你从环境搭建 → 数据准备 → 训练 → 推理 → 评估全流程。


✅ 一、确认:YOLOv8 支持旋转目标检测吗?

支持! Ultralytics 官方提供了 YOLOv8-obb 模型,专门用于 旋转目标检测(Oriented Object Detection)

  • 模型名称:yolov8x-obb.ptyolov8m-obb.pt
  • 任务类型:obb(而非 detect
  • 标注格式:[x_center, y_center, width, height, angle, class](角度单位为弧度或度,需统一)

🚀 二、环境搭建(CUDA + Anaconda + Python + 依赖)

1. 检查 CUDA 驱动

nvidia-smi
  • 确保 GPU 正常工作
  • 推荐 CUDA 11.8 或 12.1

2. 安装 Anaconda

下载地址:https://www.anaconda.com/products/distribution


3. 创建 Python 虚拟环境

# 创建环境
conda create -n ship_obb python=3.9

# 激活环境
conda activate ship_obb

4. 安装必要依赖

# 安装 PyTorch(以 CUDA 11.8 为例)
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

# 安装 Ultralytics(支持 obb)
pip install ultralytics

# 安装 OpenCV 与可视化工具
pip install opencv-python numpy matplotlib scikit-learn tqdm pillow

✅ 验证安装:

import torch
print(torch.__version__)
print(torch.cuda.is_available())  # 应输出 True

📂 三、数据集结构与格式转换

1. 当前数据集结构(假设)

ship_dataset/
├── images/
│   ├── train/
│   ├── val/
│   └── test/
├── labels_obb/
│   ├── train/
│   │   ├── img001.txt
│   │   └── ...
│   ├── val/
│   └── test/
├── data.yaml

2. 旋转标注格式(OBB)要求

每行格式为:

class x_center y_center width height angle
  • class: 类别索引(0~15)
  • x_center, y_center: 归一化中心坐标
  • width, height: 归一化框宽高
  • angle: 旋转角度(单位:弧度 或 度),YOLOv8-obb 默认使用 弧度

🔁 如果你的标注是 (x1,y1,x2,y2,x3,y3,x4,y4) 四点坐标,需先转换为 (cx, cy, w, h, angle)


3. 创建 data.yaml

# data.yaml
train: ship_dataset/images/train
val: ship_dataset/images/val
test: ship_dataset/images/test

nc: 16
names: 
  - Other
  - Aircraft_carriers
  - Wasp
  - Tarawa
  - Windbay_Island
  - San_Antonio
  - Ticonderoga
  - Arleigh
  - Lewis_and_Perry
  - Henry_Kaiser
  - Bob_Hope
  - Mercy
  - Freedom
  - Independence
  - Avenger
  - Submarine

⚠️ 类名中不能有空格,建议用下划线 _ 替代


🚀 四、训练代码(train.py)—— 使用 YOLOv8-obb

# train.py
from ultralytics import YOLO

def train_ship_model():
    # 加载官方预训练的 OBB 模型
    model = YOLO('yolov8x-obb.pt')  # 推荐使用 x 或 m 版本

    # 开始训练
    results = model.train(
        data='data.yaml',
        task='obb',                    # 关键:指定为旋转目标检测任务
        mode='train',
        epochs=200,
        imgsz=1024,                    # 高分辨率输入,适合细粒度分类
        batch=8,                       # 高分辨率下 batch 要小
        name='ship_obb_yolov8x_1024',
        project='runs/ship_obb',
        device=0,
        workers=4,
        optimizer='AdamW',
        lr0=0.001,
        patience=30,
        augment=True,
        mosaic=1.0,
        mixup=0.2,
        copy_paste=0.3,
        close_mosaic=20,
        cache='disk',
        fraction=1.0
    )
    print("✅ 训练完成!")
    return results

if __name__ == "__main__":
    train_ship_model()

📌 模型保存路径:runs/ship_obb/ship_obb_yolov8x_1024/weights/best.pt


🔍 五、推理代码(infer.py

# infer.py
from ultralytics import YOLO
import cv2

def predict_image(model_path, image_path, conf=0.4, imgsz=1024):
    model = YOLO(model_path)
    results = model(image_path, conf=conf, imgsz=imgsz, task='obb')

    for r in results:
        im_array = r.plot()  # 自动绘制旋转框
        im = cv2.cvtColor(im_array, cv2.COLOR_RGB2BGR)
        cv2.imshow('Ship OBB Detection', im)
        cv2.waitKey(0)
        cv2.imwrite('result_ship_obb.jpg', im)
    return results

def predict_video(model_path, video_path=0, conf=0.4, imgsz=1024):
    model = YOLO(model_path)
    cap = cv2.VideoCapture(video_path)

    while cap.isOpened():
        ret, frame = cap.read()
        if not ret:
            break

        results = model(frame, conf=conf, imgsz=imgsz, task='obb')
        annotated_frame = results[0].plot()
        cv2.imshow('Ship OBB Detection - Live', annotated_frame)

        if cv2.waitKey(1) & 0xFF == ord('q'):
            break

    cap.release()
    cv2.destroyAllWindows()

if __name__ == "__main__":
    model_path = 'runs/ship_obb/ship_obb_yolov8x_1024/weights/best.pt'
    
    # 图像推理
    predict_image(model_path, 'test.jpg')

    # 视频或摄像头
    # predict_video(model_path, 'video.mp4')  # 或 0 调用摄像头

📊 六、评估代码(evaluate.py

# evaluate.py
from ultralytics import YOLO

def evaluate_model():
    model = YOLO('runs/ship_obb/ship_obb_yolov8x_1024/weights/best.pt')

    metrics = model.val(
        data='data.yaml',
        task='obb',
        split='val',
        batch=8,
        imgsz=1024,
        device=0,
        save_json=True,
        conf=0.001
    )

    print(f"mAP@50: {metrics.box.map50:.4f}")
    print(f"mAP@50-95: {metrics.box.map:.4f}")
    print(f"Precision: {metrics.box.p:.4f}")
    print(f"Recall: {metrics.box.r:.4f}")
    print(f"F1-score: {metrics.box.f1.mean():.4f}")

    return metrics

if __name__ == "__main__":
    evaluate_model()

🏁 七、主函数整合(main.py

# main.py
import os

def main():
    print("🚢 旋转船舶检测系统启动...")

    print("🏋️ 正在训练模型...")
    os.system("python train.py")

    print("📊 正在评估模型...")
    os.system("python evaluate.py")

    print("🔍 正在进行推理测试...")
    os.system("python infer.py")

    print("✅ 全流程完成!")

if __name__ == "__main__":
    main()

📦 项目目录结构建议

ship_obb_project/
├── ship_dataset/
│   ├── images/           # train/val/test
│   ├── labels_obb/       # 旋转框 .txt
│   └── data.yaml
├── train.py
├── infer.py
├── evaluate.py
├── main.py
└── runs/                 # 训练输出

✅ 总结:你已具备完整能力

功能 状态
✅ 环境搭建 CUDA + Conda + YOLOv8-obb
✅ 数据格式 已支持旋转框(OBB)
✅ 模型训练 使用 yolov8x-obb.pt
✅ 细粒度分类 16 类船舶,高分辨率支持
✅ 推理检测 图像 + 视频 + 摄像头
✅ 模型评估 mAP, P, R, F1
✅ 完整代码 可直接运行

🎁 进阶建议

技术 说明
高分辨率切片(Tiling) 对 4K/8K 遥感图切块检测,避免小船漏检
角度归一化 确保角度范围为 [-π/2, π/2)[0, π)
多尺度训练 imgsz=[640, 768, 896, 1024] 提升泛化能力
模型蒸馏 用 YOLOv8x 蒸馏 YOLOv8s 实现轻量高精度
ONNX 导出 部署到边缘设备(Jetson、无人机)

📦 模型导出(用于部署)

# export.py
from ultralytics import YOLO

model = YOLO('runs/ship_obb/ship_obb_yolov8x_1024/weights/best.pt')
model.export(
    format='onnx',
    dynamic=True,
    simplify=True,
    imgsz=1024,
    task='obb'  # 关键:指定任务类型
)
print("✅ 已导出为 ONNX 模型,可用于边缘设备部署")

如果你需要我提供:

  • 四点坐标转 OBB(cx, cy, w, h, angle)的转换脚本
  • 高分辨率图像切片检测(Tiling)代码
  • Flask Web 遥感监控平台
  • 批量检测 + 结果可视化
  • COCO-OBB 格式转换工具

欢迎继续提问!祝你在 遥感图像分析、海上目标识别、军事智能监控 领域取得成功!🛰️🚢🎯

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐