海上落水人员及障碍物数据集,有500多张并已经标注好了txt格式。已经划分hao训练集和验证集,可直接训练,【来源自建】
2类【溺水人员,障碍物】
1
1
海上落水人员及障碍物检测数据集的完整 YOLOv8 训练与检测系统方案,包含:
✅ 数据集说明
✅dataset.yaml配置
✅ 详细训练代码(支持自定义参数)
✅ 推理与评估脚本
✅ 类别建议(根据常见海上目标)
📊 一、数据集信息
| 项目 | 说明 |
|---|---|
| 图像总数 | 500+ 张(已标注) |
| 标注格式 | YOLO 格式(.txt,每行:class_id cx cy w h) |
| 划分情况 | 已划分train/val(无需再分割) |
| 直接可用 | ✅ 可直接用于 YOLOv5/v8 等训练 |
| 典型类别(建议) | person_in_water(落水人员)、boat(小船)、buoy(浮标)、debris(漂浮障碍物)、life_ring(救生圈)等 |
🔍 若您的
.txt中类别 ID 为 0、1、2…,请确保names顺序与标注一致。
📁 二、推荐目录结构
请确认您的数据组织如下(若不同,请调整路径):
marine_rescue_dataset/ ├── images/ │ ├── train/# 如 400 张│ └── val/# 如 100 张├── labels/ │ ├── train/# 对应 .txt 文件│ └── val/ └── dataset.yaml💡 注意:YOLO 要求
labels/与images/同级且子文件夹名一致。
📄 三、dataset.yaml配置文件
请根据实际类别修改names。以下为示例(假设 4 类):
# dataset.yamltrain:./images/trainval:./images/valnc:4names:['person_in_water','boat','buoy','debris']✅ 如果您只有“落水人员” 和 “障碍物” 两类,可简化为:
nc:2names:['person_in_water','obstacle']🚀 四、YOLOv8 详细训练代码(train.py)
# train.pyfromultralyticsimportYOLOimporttorchdefmain():# 检查 GPU 可用性device='cuda'iftorch.cuda.is_available()else'cpu'print(f"Using device:{device}")# 加载预训练模型(推荐 yolov8s,平衡速度与精度)model=YOLO('yolov8s.pt')# 可选: yolov8n (更快), yolov8m (更准)# 开始训练results=model.train(data='dataset.yaml',# 数据配置文件路径epochs=100,# 总训练轮数(500张图建议 80~150)imgsz=640,# 输入分辨率(可尝试 1280 提升小目标检测)batch=8,# 批次大小(500张图 + GPU 显存有限,建议 8~16)name='marine_rescue_v8s',# 实验名称(结果保存在 runs/detect/...)optimizer='AdamW',lr0=0.001,# 初始学习率lrf=0.01,# 最终学习率 = lr0 * lrfweight_decay=0.0005,warmup_epochs=3,# 学习率预热hsv_h=0.015,# 色调增强(适应海面光照变化)hsv_s=0.7,hsv_v=0.4,degrees=15.0,# 旋转增强(模拟船只晃动)translate=0.1,scale=0.5,fliplr=0.5,# 左右翻转mosaic=0.8,# Mosaic 增强(提升小目标检测)mixup=0.2,copy_paste=0.3,# Copy-Paste 增强(对稀疏目标有效)close_mosaic=10,# 最后10轮关闭 Mosaicdevice=device,workers=4,save=True,save_period=10,# 每10轮保存一次模型exist_ok=False,verbose=True)if__name__=='__main__':main()🔍 五、推理测试代码(detect.py)
# detect.pyfromultralyticsimportYOLOimportcv2# 加载最佳模型model=YOLO('runs/detect/marine_rescue_v8s/weights/best.pt')defdetect_image(image_path,conf_thres=0.3):results=model(image_path,conf=conf_thres)annotated=results[0].plot()# 自动绘制框和标签cv2.imshow("Marine Rescue Detection",annotated)cv2.waitKey(0)cv2.destroyAllWindows()# 批量检测文件夹defdetect_folder(folder_path):results=model(folder_path,conf=0.3,save=True,project="output")print(f"结果保存至: output/")# 示例detect_image("test.jpg")# detect_folder("test_images/")📈 六、验证集评估(evaluate.py)
# evaluate.pyfromultralyticsimportYOLO model=YOLO('runs/detect/marine_rescue_v8s/weights/best.pt')metrics=model.val(data='dataset.yaml',split='val')print(f"mAP@0.5:{metrics.box.map50:.4f}")print(f"mAP@0.5:0.95:{metrics.box.map:.4f}")print(f"Precision:{metrics.box.mp:.4f}")print(f"Recall:{metrics.box.mr:.4f}")⚙️ 七、训练建议(针对海上场景)
| 挑战 | 解决方案 |
|---|---|
| 落水人员目标小 | 使用imgsz=1280,启用copy_paste增强 |
| 海面反光/波浪干扰 | 增强hsv_v(亮度)和degrees(旋转) |
| 样本量少(500+) | 启用强数据增强(Mosaic, MixUp, Copy-Paste) |
| 类别不平衡 | 检查各类别数量,必要时过采样少数类 |
📦 八、项目交付内容
- ✅
dataset.yaml - ✅
train.py(含详细参数注释) - ✅
detect.py(单图/批量推理) - ✅
evaluate.py(性能评估) - ✅ 模型导出(ONNX/TensorRT)支持
该系统可广泛应用于:
- 海上搜救无人机
- 智慧海事监控平台
- 救援机器人视觉模块
- 海洋安防预警系统