摘要 : 本文将详细介绍如何利用当前先进的深度学习目标检测算法 YOLOv11,结合强大的计算机视觉库 OpenCV,构建一个高效、准确的海面目标检测系统。我们将从环境搭建、数据准备、模型训练到最终的检测应用,手把手带你完成整个流程,为海上交通监控、搜救行动、港口安防、滨海旅游管理等场景提供智能化的视觉感知解决方案。
关键词: YOLOv11, OpenCV, 海面目标检测, 深度学习, 目标检测, Python
1. 引言
在海洋经济、海上安全与应急救援领域,对海面目标的实时感知至关重要。无论是港口船舶调度、非法入侵预警,还是落水人员搜救、海上游乐设施监管,都需要快速、准确地识别海面上的关键目标。传统依赖雷达或人工瞭望的方式成本高、覆盖有限,而基于视觉的智能检测系统可提供低成本、高密度的补充感知能力。
YOLO(You Only Look Once)系列算法以其高速度和高精度在目标检测领域独树一帜。最新的 YOLOv11 在继承前代优点的同时,进一步优化了架构和训练策略,性能更上一层楼 ,尤其适合处理海面场景中尺度差异大、背景复杂(波浪、反光、雾气)、目标易受遮挡等特点。OpenCV 作为最流行的开源计算机视觉库,提供了丰富的图像处理功能。本文将结合 YOLOv11 和 OpenCV,实现对以下 5 类典型海面目标的精准检测:
boat(船只):各类中小型船舶buoy(浮标):导航、警示或系泊用浮标jetski(摩托艇):高速水上娱乐载具life_saving_appliances(救生设备):救生圈、救生衣、漂浮担架等swimmer(游泳者):水中或水面人员

2. 环境准备
2.1 软件依赖
首先,确保你的开发环境满足以下要求:
- Python: 推荐使用 Python 3.8 或更高版本。
- PyTorch: YOLOv11 基于 PyTorch 框架,需安装相应版本。
- YOLOv12 : 通过
ultralytics包安装。 - OpenCV: 用于图像处理和可视化。
- PyQT: 可视化UI(可选)。
安装命令:
bash
# 安装 PyTorch (根据你的CUDA版本选择)
pip install torch torchvision torchaudio
# 安装 YOLOv11
pip install ultralytics
# 安装 OpenCV
pip install opencv-python
3. 数据集准备与标注
高质量的数据集是模型成功的关键。
3.1 数据收集
收集大量海面图像或视频帧,涵盖:
- 不同海域(近岸、港口、开阔海域)
- 不同天气与光照(晴天、阴天、逆光、薄雾)
- 不同海况(平静、中浪、大浪)
- 不同目标尺度(远距离小目标 vs 近距离大目标)
- 不同视角(岸基摄像头、无人机航拍、船载相机)
数据可来源于:
- 自主采集(无人机/巡逻艇)
- 公开数据集(如 SeaShips、HRSC2016、SAR Ship Dataset)
- 合作海事、海警或港口管理部门
3.2 数据标注
使用标注工具(如 LabelImg, CVAT, Roboflow 等)对图像中的每一个海面目标进行标注:
- 框出目标边界(Bounding Box)
- 赋予对应类别标签
标注格式 :YOLO 使用 .txt 文件存储标注信息,格式为:
txt
<class_id> <x_center> <y_center> <width> <height>
所有坐标值都是相对于图像宽高的归一化值(0-1)。
类别 ID 映射如下:
| class_id | 目标类别 |
|---|---|
| 0 | boat |
| 1 | buoy |
| 2 | jetski |
| 3 | life_saving_appliances |
| 4 | swimmer |
💡 注意:
swimmer和life_saving_appliances通常较小,需仔细标注;buoy可能部分被波浪遮挡。
3.3 数据集划分
将数据集划分为训练集(train)、验证集(val)和测试集(test),通常比例为 7:2:1 或 8:1:1。
3.4 数据集配置文件
创建一个 YAML 配置文件(如 marine_targets.yaml),定义数据集路径和类别信息:
yaml
train: /path/to/dataset/images/train
val: /path/to/dataset/images/val
test: /path/to/dataset/images/test
# 类别数量
nc: 5
# 类别名称(顺序必须与 class_id 一致)
names: ['boat', 'buoy', 'jetski', 'life_saving_appliances', 'swimmer']
4. 模型训练
4.1 选择 YOLOv11 模型
YOLOv11 提供了多个预训练模型(yolov11n.pt, yolov11s.pt, yolov11m.pt, yolov11l.pt, yolov11x.pt)。对于海面目标检测(目标尺度跨度大、小目标多),推荐使用 yolov12m.pt 或 yolov12l.pt 以提升对 swimmer 和 buoy 等小目标的检出率。
4.2 开始训练
使用 ultralytics 提供的命令行工具或 Python API 进行训练。
命令行方式:
bash
yolo train data=marine_targets.yaml model=yolov11m.pt epochs=120 imgsz=1280
Python API 方式:
python
from ultralytics import YOLO
# 加载预训练模型
model = YOLO('yolov11m.pt') #
# 训练模型
results = model.train(data='marine_targets.yaml', epochs=120, imgsz=1280)
# 评估模型
results = model.val()
💡 建议使用较大输入尺寸(如
1280)以更好捕捉远处的小目标。
5. 海面目标检测实现
训练完成后,使用训练好的模型进行检测。
5.1 加载模型
python
from ultralytics import YOLO
import cv2
# 加载训练好的模型
model = YOLO('runs/detect/train/weights/best.pt') # 替换为你的最佳权重路径
5.2 图像检测
python
# 读取图像
img_path = 'coastal_scene.jpg'
img = cv2.imread(img_path)
# 使用模型进行预测
results = model(img)
# 解析结果
for result in results:
boxes = result.boxes # 获取边界框
for box in boxes:
# 提取坐标、置信度和类别
x1, y1, x2, y2 = box.xyxy[0].cpu().numpy().astype(int)
conf = box.conf.cpu().numpy()[0]
cls = int(box.cls.cpu().numpy()[0])
label = model.names[cls]
# 为不同目标设置颜色(便于区分)
colors = [
(0, 255, 0), # boat - 绿
(255, 0, 0), # buoy - 蓝
(0, 0, 255), # jetski - 红
(255, 255, 0), # life_saving_appliances - 黄
(255, 0, 255) # swimmer - 紫
]
color = colors[cls % len(colors)]
# 在图像上绘制边界框和标签
cv2.rectangle(img, (x1, y1), (x2, y2), color, 2)
cv2.putText(img, f'{label} {conf:.2f}', (x1, y1 - 10),
cv2.FONT_HERSHEY_SIMPLEX, 0.9, color, 2)
# 显示结果
cv2.imshow('Marine Target Detection', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

5.3 视频流/无人机实时检测
可部署于无人机或岸基监控系统,实现实时海面态势感知:
python
cap = cv2.VideoCapture('drone_feed.mp4')
while True:
ret, frame = cap.read()
if not ret:
break
results = model(frame)
# ... (同上,处理并绘制结果)
cv2.imshow('Live Marine Monitoring', frame)
if cv2.waitKey(1) == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
6. 结果与分析
- 精度 : YOLOv11 在高质量海面数据集上对
boat、jetski等大目标 mAP@0.5 可达 0.90+,对swimmer等小目标也能保持较高召回率。 - 速度: 在 NVIDIA RTX 4080 上,1280x1280 输入可达 30+ FPS,满足近实时监控需求。
- 鲁棒性: 模型对海面反光、波浪干扰、轻度雾气具有一定适应能力。
挑战:
- 小目标漏检 : 远距离
swimmer或buoy像素极少。 - 类间混淆 : 白色
buoy与白色life_saving_appliances外观相似。 - 动态模糊 : 高速
jetski运动导致图像模糊。
优化方向:
- 使用 Mosaic 、Copy-Paste 增强小目标样本。
- 引入 注意力机制 提升关键区域特征响应。
- 结合 多尺度测试(Multi-scale Inference)提升检测稳定性。
- 部署时采用 跟踪算法(如 ByteTrack)减少目标闪烁,支持轨迹分析。
7. 总结
本文详细介绍了基于 YOLOv11 和 OpenCV 实现海面目标检测的完整流程。通过端到端的目标检测框架,我们能够同时识别 5 类关键海面目标,为海上安全、应急救援、港口管理和滨海旅游提供强大的视觉智能支持。该系统可集成至无人机、巡逻艇、岸基监控平台,构建全天候、全覆盖的"智慧海防"感知网络,在海洋强国战略中发挥重要作用。
🚨 应用场景延伸:
- 搜救任务中自动定位落水者(
swimmer)与救生设备- 港口禁航区监控非法船只(
boat/jetski)闯入- 海上游乐区统计摩托艇数量,保障游客安全
