1. 背景
海洋作为地球上70%的表面积,承载着人类生活、经济发展和生态系统的重要功能。船舶作为海洋活动的主要载体之一,在海上运输、资源开发、环境监测等方面发挥着重要作用。复杂海洋环境下的船舶目标检测成为了海事管理、海洋资源开发和环境保护等领域的关键技术之一。
2. YOLOv8算法
为什么我应该使用 YOLOv8?
- YOLOv8 具有许多开发人员方便的功能,从易于使用的 CLI 到结构良好的 Python 包。
- YOLO 周围有一个庞大的社区,围绕 YOLOv8 模型的社区也在不断壮大,这意味着计算机视觉圈子里有很多人在你需要指导时可以为您提供帮助。YOLOv8在COCO上实现了很高的准确性。例如,YOLOv8m模型 - 中等模型 - 在COCO上测量时达到50.2%的mAP。当针对Roboflow 100(专门评估各种任务特定域上的模型性能的数据集)进行评估时,YOLOv8的得分明显优于YOLOv5。本文后面的性能分析中提供了有关此内容的更多信息。此外,YOLOv8 中方便开发人员的功能也很重要。与其他模型相反,任务被拆分到您可以执行的许多不同 Python 文件中,YOLOv8 带有一个 CLI,使训练模型更加直观。这是对 Python 包的补充,该包提供了比以前的模型更无缝的编码体验。当您考虑使用模型时,YOLO 周围的社区值得注意。许多计算机视觉专家都知道 YOLO 及其工作原理,并且网上有很多关于在实践中使用 YOLO 的指导。尽管 YOLOv8 在撰写本文时是新的,但网上有许多指南可以提供帮助。以下是一些学习资源,您可以使用它们来提高您对 YOLO 的了解:
- Roboflow 模型上的 YOLOv8 模型卡
- 如何在自定义数据集上训练YOLOv8模型
- 如何在自定义数据集上训练YOLOv8模型
- 用于训练YOLOv8目标检测模型的谷歌Colab笔记本
- 用于训练YOLOv8分类模型的谷歌Colab笔记本
- 用于训练YOLOv8分割模型的谷歌Colab笔记本
- 使用YOLOv8和ByteTRACK跟踪和计数车辆)让我们深入了解架构以及 YOLOv8 与以前的 YOLO 模型的不同之处。
2.1 YOLOv8检测网络
2.2 模型结构
如下图, 左侧为 YOLOv5-s,右侧为 YOLOv8-s。
在暂时不考虑 Head 情况下,对比 YOLOv5 和 YOLOv8 的 yaml 配置文件可以发现改动较小。
3. 软件界面功能
- 可用于实时检测各类复杂场景种的船舶位置,并显示目标数量;
- 支持图片、视频及摄像头进行检测,同时支持图片的批量检测;
- 界面可实时显示目标位置、目标总数、置信度、用时等信息;
- 支持图片或者视频的检测结果保存;
4. 数据集与训练
数据集为各类复杂场景下的船舶图片,并使用Labelimg标注工具对每张图片中的目标边框(Bounding Box)及类别进行标注。一共包含5090张图片,其中训练集包含4576张图片,验证集包含509张图片,测试包含5张图片。
该数据集是专为研究和解决复杂场景下船舶目标检测问题而设计。包含多样性丰富的环境,如交通繁忙的港口、船只密集的渔业区,以及船与岸边混合交通场景。与传统的船舶目标检测数据集不同,本数据集特意考虑了在实际应用场景中常见但在数据集中经常被忽视的问题。例如,船舶在图像或视频帧中不一定是主体,有时仅作为背景出现。此外,数据集还包括船只部分或完全被其他对象遮挡的情况。这些特点使得本数据集非常适用于开发和评估目标检测算法在复杂、多变和部分遮挡条件下的性能。数据集旨在推动船舶目标检测和相关领域的研究进展,以满足日益增长的实际应用需求,例如航海安全、渔业管理以及海洋环境保护等。
data.yaml的具体内容如下:
train: D:\BoatDetection\datasets\Data\train
val: D:\BoatDetection\datasets\Data\val
nc: 1
names: ['boat']
数据准备完成后,通过调用train.py文件进行模型训练,epochs参数用于调整训练的轮数,batch参数用于调整训练的批次大小【根据内存大小调整,最小为1】,代码如下:
from ultralytics import YOLO# 加载预训练模型
model = YOLO("yolov8n.pt")
# Use the model
if __name__ == '__main__':# Use the modelresults = model.train(data='D:\BoatDetection\datasets\Data\data.yaml', epochs=300, batch=4) # 训练模型
4.1 训练结果评估
在深度学习中,我们通常用损失函数下降的曲线来观察模型训练的情况。YOLOv8在训练时主要包含三个方面的损失:定位损失(box_loss)、分类损失(cls_loss)和动态特征损失(dfl_loss),在训练结束后,可以在runs/目录下找到训练过程及结果文件,如下所示:
本文训练结果如下:
PR曲线:
5. 检测结果识别
6. 结论与展望
基于YOLOv8的船舶目标检测系统为复杂海洋环境下的船舶监测与管理提供了一种高效准确的解决方案。未来,随着人工智能和深度学习技术的不断发展,该系统将进一步提升在海洋领域的应用价值,为构建美丽海洋、实现可持续发展做出更大贡献。