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

旋转目标检测高分辨率图像细粒度分类船舶检测数据集
| 项目 | 内容 |
|---|---|
| 数据集名称 | 旋转目标检测高分辨率图像细粒度分类船舶检测数据集 |
| 总图像数量 | 约 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 | 各类潜艇 |

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

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

适用于 遥感图像、海上监控、军事侦察 等复杂场景。
YOLOv8 的扩展版本中支持 OBB(旋转框)任务,即 YOLOv8-obb,
我们将基于 YOLOv8-obb 模型,完整指导你从环境搭建 → 数据准备 → 训练 → 推理 → 评估全流程。
✅ 一、确认:YOLOv8 支持旋转目标检测吗?
✅ 支持! Ultralytics 官方提供了 YOLOv8-obb 模型,专门用于 旋转目标检测(Oriented Object Detection)
- 模型名称:
yolov8x-obb.pt、yolov8m-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 格式转换工具
欢迎继续提问!祝你在 遥感图像分析、海上目标识别、军事智能监控 领域取得成功!🛰️🚢🎯
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)