YOLO模型如何训练SAR船舶检测数据集 1160张 1类 SAR 影像船舶检测数据集 遥感影像,适用于海上船舶识别、海事监测场景
SAR船舶检测 1160张 1类
name:[ ship]
名称:船
共1160张,按8:1:1比例划分为train:928张,val:116张,test:116张。标注文件为xml格式。可以直接用于深度学习训练。
SAR船舶检测数据集(单类别VOC格式)
一、数据集基础信息表
| 项目 | 详情 |
|---|---|
| 数据集名称 | SAR影像船舶检测数据集 |
| 图像总量 | 1160 张 |
| 检测类别 | 单类:ship(船舶) |
| 标注格式 | VOC 标准.xml标注文件,图片与标注一一对应 |
| 数据划分 | 训练集928张、验证集116张、测试集116张(比例 8:1:1,已划分完成) |
| 适用模型 | YOLO、Faster R-CNN、SSD 等主流目标检测算法 |
| 图像特点 | SAR遥感影像,适用于海上船舶识别、海事监测场景 |
二、数据集目录结构(VOC标准格式)
sar_ship_voc/ ├── Annotations/ # 全部xml标注文件 │ ├── train/ │ ├── val/ │ └── test/ ├── JPEGImages/ # 全部图片文件 │ ├── train/ │ ├── val/ │ └── test/ └── ImageSets/ └── Main/ ├── train.txt ├── val.txt └── test.txt三、应用场景
- 海事智能监测:基于SAR遥感影像实现海域船舶自动识别、船只统计、违规船只筛查。
- 海洋安防监管:近海、航道、港口全天候船舶目标检测,不受昼夜、天气影响。
- 算法训练与测试:VOC格式标准数据集,用于遥感影像小目标、弱纹理目标检测算法研发与对比实验。
- 学业/项目实战:计算机视觉、遥感图像处理、深度学习相关毕设、课程项目、竞赛练习。
- 海洋资源管理:结合时序SAR数据,分析海域船只活动规律,辅助海洋运维管理。
四、公众号标签(直接复用)
分类标签
#数据集#目标检测#SAR影像#遥感检测#船舶识别#深度学习#计算机视觉
组合标签(推文/封面)
- 技术向:#VOC数据集 #目标检测 #SAR船舶检测 #CV实战
- 行业向:#遥感影像 #海事监测 #智慧海洋 #智能识别
- 精简标签:#数据集 #船舶检测 #深度学习
五、完整代码实现
环境依赖
pipinstallultralytics lxml opencv-python numpy说明
数据集为VOC(xml)格式,下面提供两套方案:
- 方案一:YOLOv8 直接加载VOC数据集训练(推荐,最简)
- 方案二:VOC转YOLO txt格式脚本(如需原生YOLO标签使用)
5.1 方案一:YOLOv8 直接训练VOC数据集(无需转格式)
1)创建数据集配置文件sar_ship_voc.yaml
# VOC格式 SAR船舶检测配置path:./sar_ship_voctrain:JPEGImages/trainval:JPEGImages/valtest:JPEGImages/test# 类别数 & 类别名nc:1names:0:ship# 标注格式类型format:voc2)训练代码train_sar_ship.py
针对SAR影像特征(对比度低、目标纹理简单、小目标)优化参数
fromultralyticsimportYOLOdeftrain_sar_ship():# 加载预训练权重model=YOLO("yolov8s.pt")model.train(data="./sar_ship_voc.yaml",epochs=120,imgsz=640,batch=16,# 显存不足改为 8/4device=0,# 无GPU填写 device="cpu"workers=4,patience=25,pretrained=True,optimizer="Adam",lr0=0.001,# 数据增强(适配SAR遥感影像)mosaic=0.8,hsv_h=0.01,hsv_s=0.3,hsv_v=0.2,fliplr=0.5,# 检测阈值(SAR小目标适当降低置信度)conf=0.2,iou=0.4,project="runs/sar_ship",name="train_yolov8",exist_ok=True)print("训练完成,最优模型:runs/sar_ship/train_yolov8/weights/best.pt")if__name__=="__main__":train_sar_ship()3)推理测试代码predict_sar.py
fromultralyticsimportYOLO# 加载训练权重model=YOLO("./runs/sar_ship/train_yolov8/weights/best.pt")if__name__=="__main__":# 1. 单张图片检测# model("test_sar.jpg", save=True, conf=0.2)# 2. 批量图片检测model(source="./test_sar_images",save=True,conf=0.2)# 3. 视频检测# model("sea_video.mp4", save=True, conf=0.2)print("检测结果已保存至 runs/detect 目录")5.2 方案二:VOC(xml) 转 YOLO(txt) 格式转换脚本
若你需要传统YOLOtxt标签,运行该脚本批量转换:
importosimportxml.etree.ElementTreeasET# ==================== 配置路径 ====================voc_anno_path="./sar_ship_voc/Annotations"# xml标注目录yolo_label_path="./sar_ship_voc/labels"# 输出txt标签目录classes=["ship"]# 类别列表# 创建输出文件夹ifnotos.path.exists(yolo_label_path):os.makedirs(yolo_label_path)defconvert_voc2yolo(xml_path,txt_path):tree=ET.parse(xml_path)root=tree.getroot()size=root.find("size")img_w=int(size.find("width").text)img_h=int(size.find("height").text)withopen(txt_path,"w")asf:forobjinroot.iter("object"):cls_name=obj.find("name").text.strip()ifcls_namenotinclasses:continuecls_id=classes.index(cls_name)bndbox=obj.find("bndbox")xmin=float(bndbox.find("xmin").text)ymin=float(bndbox.find("ymin").text)xmax=float(bndbox.find("xmax").text)ymax=float(bndbox.find("ymax").text)# VOC坐标 -> YOLO归一化坐标x_center=(xmin+xmax)/2.0/img_w y_center=(ymin+ymax)/2.0/img_h w=(xmax-xmin)/img_w h=(ymax-ymin)/img_h f.write(f"{cls_id}{x_center:.6f}{y_center:.6f}{w:.6f}{h:.6f}\n")# 批量转换forfileinos.listdir(voc_anno_path):iffile.endswith(".xml"):xml_file=os.path.join(voc_anno_path,file)txt_name=os.path.splitext(file)[0]+".txt"txt_file=os.path.join(yolo_label_path,txt_name)convert_voc2yolo(xml_file,txt_file)print("VOC转YOLO标签完成!")转换完成后,使用标准YOLO数据集结构和yaml配置即可训练。
六、使用&调优建议
- SAR影像特点:目标偏小、灰度单一、无彩色信息,不要调高置信度,建议
conf=0.15~0.25。 - 显存不足:降低
batch,使用yolov8n.pt轻量模型。 - 漏检严重:适当调高
mosaic增强,增加小目标样本多样性。 - 部署方向:模型导出ONNX/TensorRT,嵌入遥感解译平台、海事监控系统,实现海上船舶自动巡检。
