基于YOLOv8深度学习的智慧交通舰船目标检测与识别系统
随着智能交通技术的不断发展态势,舰船目标检测识别技术在海洋交通治理、安全监管、航海安全等多个领域发挥着越来越重要的作用。传统的舰船识别手段主要倚重人工注释与传统图像处理手段,难以满足高效精准的大规模应用要求。针对这一技术瓶颈,本研究创新性地提出了一种基于YOLOv8深度学习算法的智能化解决方案,该方案专门应用于智慧交通系统的舰船目标检测识别任务中。通过设计与优化深度神经网络架构,本研究旨在显著提升舰船目标识别的精确度与实时响应能力,从而确保其在多海域及复杂环境下的实用效果
在本研究中, 系统对不同类型的船舶图像进行了训练, 包括货轮与渔船(两者皆用于运送货物), 客轮与消防 ship(两者皆用于运送人员), 高速渡轮与集装箱 ship(两者皆用于旅游服务), 散货 ship 与油 well ship(两者皆用于能源运输)以及 warship and submersible. 系统具备了高效的目标识别与分类能力. 每类船舶都具有独特的形态特征, 多样的尺寸分布以及多样的颜色配置和复杂的结构组成, 这使得目标检测变得更加复杂. 因此, 本研究通过构建了一个多样化的船舶数据集, 结合了最新的深度学习技术, 显著提升了模型的目标识别性能.
在系统开发方面
通过系统性的训练和验证,在各类舰船检测精度与召回率指标方面均实现了明显的性能进步。特别是在应对多变的天气状况、不同的光照环境以及复杂的背景设置时,YOLOv8模型展现了卓越的适应能力。该系统不仅具备处理海量数据的能力,并且能够即时生成精确的检测报告,在海洋交通管理与安全监控的实际需求中表现尤为突出
本研究的关键创新之处体现在:首先,在整合了YOLOv8架构与数据增强技术的基础上,并针对海上舰船目标的多样性与复杂性这一特点,在提出了一种高效的检测方案的同时;其次,在利用PyQt5框架开发了一个易于使用的界面的基础上,则使系统的应用变得更加便捷;最后,在保证了系统展现出卓越的实时检测性能的同时,则从而为海洋交通管理提供了有力的支持。
本文提出的基于YOLOv8的舰船目标检测与识别系统,在准确率与处理速度之间实现了良好的平衡,并且具有显著的实际应用价值。经过模型优化升级及数据规模扩充,该系统将在智能海洋交通管理、航行安全监控、环境质量评估等多个领域发挥更加显著的作用,并展现出广泛的应用前景。
硬件环境
基于两组不同的硬件平台配置进行系统调试和训练。(1)采用便携式 Alienware M16 笔记本电脑作为测试设备。(2)使用ThinkPad T410服务器作为高性能服务器平台的实验环境。

(2)惠普 HP暗影精灵10 台式机:

上面的硬件环境配备了充足的计算能力, 既能支撑大规模图像数据集的有效训练, 又能实现快速运算. GPU 的引入明显缩短了模型收敛所需时间. 通过采用多种硬件架构进行调试与实验, 能够全方位验证系统的性能特点及其稳定性表现. 这种方法不仅显著提升了系统的抗干扰能力和预测准确性, 同时降低了开发成本并提高了运行效率, 从而为其在实际场景中的应用奠定了坚实的基础.
算法流程
全面剖析项目的算法流程,并系统梳理其核心技术实现路径。从数据导入及预处理阶段入手,在结构安排上做到条理清晰,在语言表达上力求简洁明了地阐述每个环节的关键点,并最终深入挖掘其内在原理并阐明实现思路。

项目数据
通过从数据集中收集各种舰船相关的图像,并利用Labelimg标注工具对每张图片进行精确标注,在13个具体的分类中分别识别出:货船、客船、游轮、散货船、油轮、帆船、拖船、渔船、钻井平台、消防船、集装箱船、军舰和潜艇。
目标检测标注工具
(1)LabelImg: 一个免费提供源代码的图像标注工具,默认支持分类任务和目标检测功能,默认采用Python编写并基于Qt开发图形界面,默认操作简便但默认为英文界面;其注释结果以Pascal VOC格式保存为XML文件形式,默认适用于ImageNet数据集;同时该工具也支持COCO数据集格式导入与处理。
(2)在CMD中安装LabelImg可通过执行以下命令完成:pip install labelimg -i https://pypi.tuna.tsinghua.edu.cn/simple

结束后,在cmd中输入labelimg

初识labelimg

打开后,我们自己设置一下
在View中勾选Auto Save mode

接下来我们打开需要标注的图片文件夹

为了设置标注文件保存的目录(上图中的Change Save Dir),开始进行标注操作。使用矩形框选中目标区域,并为选定的目标添加标签。完成后切换至下一幅图片进行同样的操作,并循环操作下去。

Labelimg的快捷键

(3)数据准备
通常做法是先创建一个名为data的文件夹(这一做法并非常规),然后在其内部新建一个名为images的子文件夹以存储待标注的图像样本;接着建立一个命名为labels的数据夹以存放相应的标注信息;最后在同一个目录下创建一个命名为classes.txt的文本文件来记录所有要进行标注的类别名称。
data目录下的文件组织如下:
当需要标识分类数量较多时建议创建该分类信息列表以方便后续处理
首先在images这个文件夹放置待标注的图片。
生成文件如下:

“classes.txt”定义了你的 YOLO 标签所引用的类名列表。

(4)YOLO模式创建标签的样式
存储标签数据的文件名应与图片名称一致,并包含N行5列的数据。每一条记录代表一个标注的目标。通常情况下包含五个参数:第一个参数为类别ID;第二个和第三个参数分别为标注框中心坐标的X轴和Y轴值;最后两个参数分别表示标注框在X轴方向上的宽度与Y轴方向上的高度。
注意:这里的中心点坐标、宽和高都是相对数据!!!

固定不变地存储标签类别的文件名定义为classes.txt, 用于存储创建的分类标记
完成后可进行后续的yolo训练方面的操作。
模型训练
模型的训练、评估与推理
1.YOLOv8的基本原理
YOLOv8被认为是最先进的物体检测模型(SOTA),它是基于Yolo系列历史版本的发展而来,并融入了许多新功能与优化点以显著提升其性能与适应性。该方法已成为实现目标检测、图像分割以及人体姿态估计等多种任务的理想方案。其主要创新之处体现在三个方面:首先采用了全新的主干网络架构;其次设计出创新性的Ancher-Free检测头;最后引入了改进型损失函数;这些技术方案能够在多种硬件设备上稳定运行(从CPU到GPU)。

YOLOv8系列模型是当前物体检测与实例分割领域的佼佼者,在各项性能指标上均实现了全面超越现有同类模型。该系统在继承并优化了Yolov5、Yolov6以及YoloX等前代模型设计优势的基础上,在提升模型架构的同时充分保持了Yolov5工程化应用中的简洁高效特性
Yolov8模型网络结构图如下图所示:

2.数据集准备与训练
本研究采用了包含舰船目标的图像数据集,并利用Labelimg工具对图像中的目标边界框及其类别进行了标注。随后基于该数据集应用了YOLOv8n模型进行训练工作。经过训练后完成了模型在验证集上的性能评估与对比分析任务,并将整个过程划分为三个主要阶段:首先是数据准备阶段……接着是模型训练阶段……最后是模型评估阶段……实验结果表明本次标注的主要类别集中在舰船领域方面……统计数据显示该数据集中共有35474张图片……其中舰船类占58.2%、飞机类占17.9%、船只类占13.4%等几大类
训练数据集:约2.55万张图像用于模型学习与性能调优;
验证数据集:约2.8千张样本用于评估模型对未见过数据的泛化能力;
测试数据集:约7千张图片用于评估模型的实际应用效果表现。
该数据集的分布情况
该数据集的分布情况

部分数据集图像如下图所示:

部分标注如下图所示:

该数据分布策略有效支持了模型在训练、验证和测试阶段的均衡性分布,并构成了YOLOv8n模型开发与性能评估的重要支撑。
在项目根目录中创建一个名为datasets的子目录,并将收集到的图像样本按照训练集和验证集进行分类整理后放置于该目录内。

随后需要创建一个data.yaml文件以存储训练数据的位置以及模型需检测的类别。YOLOv8在执行模型训练过程时会利用该文件中的信息来进行相应的学习与验证。

该文件确定了用于模型训练和验证的数据集路径,并指出了模型需要检测的目标类别
完成数据准备后, 我们将运行train.py文件以启动该脚本用于模型学习. 其中, epochs变量将决定模型被启动进行多少轮次的学习, 而batch变量则控制每批处理的数据量. 这种批量处理的数据量将根据可用内存空间进行调节, 其最低设置为1个样本以防止内存溢出.
CPU/GPU训练代码如下:

导入预训练的YOLOv8模型文件yolov8n.pt。
通过YOLO模型进行训练,并详细说明主要参数设置:
- 数据集配置文件指定为data_yaml_path。
- 设置模型进行150轮的完整训练周期。
- 每个批次的样本数量设为4。
- 使用SGD优化器完成参数更新。
- 此次实验命名为train_v8。
3.YOLOv8模型训练结果与性能评估
在深度学习的学习过程中,默认情况下我们依赖于分析损失函数的变化趋势来评估模型的表现。YOLOv8 模型的具体训练过程则主要由三类关键损失构成:用于定位目标的目标框损失(box_loss)、用于分类目标对象的类别损失(cls_loss)以及用于优化动态特征的目标点分布损失(dfl_loss)。这些关键性的优化步骤对于提高目标检测算法的整体性能具有重要意义。
损失函数作用说明:
(1)定位损失 (box_loss):衡量预测框与标定框之间的差异程度(GIoU),值越小表明定位越精确。
(2)分类损失 (cls_loss):评估锚框对应的分类标记是否准确(正确性),值越小分类结果越可靠。
(3)动态特征损失 (dfl_loss):DFLLoss用于计算预测框与目标框之间的距离,并根据特征图的比例进行缩放(归一化),从而显著提升目标检测模型的定位精度。
训练和验证结果文件存储:
训练完成后,相关的训练过程和结果文件会保存在 runs/ 目录下,包括:

(1)损失函数曲线图(Loss Functions)
(2)性能指标变化趋势图(mAP、精确率与召回率)
(3)分类效果分析表(Confusion Matrix)
(4)该模型的Precision-Recall (P-R) 曲线绘制如下
损失曲线(Loss Curve)和性能指标分析:

训练指标如下:
train/box_loss:
评估预测边界框与真实边界框之间的差异程度。
在模型不断优化的过程中,在初始阶段Box Regression Loss约为0.8,并逐渐降至约0.4水平。
train/cls_loss:
定义为分类损失函数。
趋势显示数值从2.0急剧下降至约0.3附近,并表明模型在分类任务上的性能得到了显著提升。
train/dfl_loss:
描述:对数似然损失函数用于评估边界框预测结果的质量。
趋势:该指标从1.2下降至约0.95,在训练过程中表明模型在分布预测方面的能力持续增强。
验证指标分析:
val/box_loss:
在验证集中评估边界框回归损失。
观察到该指标从训练集的0.7下降至验证集的0.45,并与训练集趋势一致。
val/cls_loss:
描述: 验证集中分类损失函数用于评估验证集的分类性能。
趋势:随着模型训练的进行, 损失值逐渐下降至0.4, 表明验证集分类性能得到了显著提升
val/dfl_loss:
描述: 验证集中分布对数损失。
趋势:从 1.15 降至接近 0.95,与训练集一致。
性能指标:
metrics/precision(B):
描述:精确度衡量的是在所有被预测为正的样本中实际为正的比例。
趋势:该指标从大约0.6稳步增长至接近0.95,并未出现明显波动或下降情况。
这表明模型在误检方面的能力逐渐减弱。
metrics/recall(B):
描述: 召回率评估在实际为正的所有样本中被正确识别为正的比例。
趋势: 从0.6稳步提升至接近0.9,表明模型漏检率逐渐下降。
metrics/mAP50(B):
描述: 平均精度指标(mAP)在IoU=0.5时被定义为目标检测任务的关键评估指标之一。
趋势: 该指标值从验证集训练期间的初始水平稳步提升至最高点(达到0.95),表明模型在目标检测任务上的性能得到了显著提升。
metrics/mAP50-95(B):
描述: 平均精度指标(mAP)在IoU=0.5至0.95范围内进行评估,并全面考察目标检测系统的性能表现。
趋势: 指标从基准水平逐步提高至80%,这一变化趋势表明模型在多个IoU阈值下展现出稳定的性能水平。
Precision-Recall(P-R)曲线分析:

曲线说明:
蓝色 (细线):
类别项 cargo (货船)
类别: passenger (客船)
mAP@0.5值为0.948:该模型在针对客船的任务中展现出优异的性能表现;其精确度与召回率均维持在较高的水平。绿色
分类:cruise(游轮)
分类:散货船;平均精度值为0.982;模型对散货船的识别能力非常出色
类别: tankers
mAP值为98.4%
含义:该模型在油轮检测方面的性能表现出色,并且具有较高的精确度与召回率
类别: sailingboat
mAP@0.5: 0.953
含义: 该模型在帆船检测任务中的表现较为优异。其mAP@0.5值达到0.953,并且其召回率略低于tanker和cruise两类别的物体,在某种程度上可能与样本类别复杂度相关。
类别: 拖船 (tug)
mAP@0.5: 0.884
含义: 检测效果欠佳, 主要表现为在实际应用中难以捕捉到足够多的拖船实例, 这可能源于拖船特征不够明显或样本量不足。
分类项:fishing(渔船)
mAP@0.5值为0.828
检测性能最低的分类项可能与样本数量不足有关,并因背景复杂而使模型难以准确分类。
浅黄色:
类别: drill (钻井平台);mAP@0.5值为0.976;该检测系统表现极为出色,在mAP@0.5评估指标下取得优异成绩;通过曲线位于右上方接近顶端的特征位置可见模型具备高度的识别能力;该系统采用青蓝色标记技术进行分类标注
类别:firefighting(消防员) mAP@0.5:0.938 含义:检测效果显著但召回率略低于预期。这可能与所用的消防船样本中存在一些相似背景有关。浅蓝色
类别:集装箱船(Containership);mAP@0.5:0.926;含义:该模型在集装箱船检测方面的表现较为优异,在准确识别集装箱船方面表现突出;但其对复杂场景下的召回率略显不足。颜色:深灰色
类别: warship(战舰)
mAP@0.5: 95%
含义: 该模型在验证集上的平均精度达到95%,表明其具备较高的识别能力以区分不同类型的战舰。
橄榄绿色:
类别:潜艇
类别:submarine
评估指标: 总体mAP@0.5
模型在mAP@0.5指标上的表现值为0.947
该模型在各类别上的检测能力均表现出色
结论:
模型在整体精度方面表现优异,并能够适应实际应用需求。验证了该模型在检测任务中的稳定性和通用性。mAP@0.5 已达到或超过 0.947 的水平,在检测任务中展现出良好的抗干扰能力和广泛的适用性
混淆矩阵 (Confusion Matrix) 用于评估分类模型性能

结论:
该混淆矩阵显示了模型在大部分类别上表现出色的能力,在小型目标和复杂背景分类方面仍需进一步优化。通过增加训练样本、优化数据增强技术和微调模型参数等措施,可以显著提升分类性能。
4.检测结果识别
在模型经过完整训练后,我们能够获取一个最佳的最佳实践指导文档best-practice-guide.txt,并将其保存于runs/practice-best/weights文件夹内使用。此外,在完成模型训练后,请注意查看位于runs/train/weights目录中的best.pt文件,并利用其进行后续推理与检测工作。

加载所需库:
(1)从ultralytics库导入YOLO模型类(用于进行目标检测)。
(2)引入OpenCV库(用于图像处理和显示)。
请加载模型路径和图片路径:
(1)请使用path = ‘models/best.pt’:指定预训练模型的路径,请使用该模型进行目标检测任务。
(2)请使用img_path = “TestFiles/imagetest.jpg”:指定待检测的图片文件的具体位置。
(1)model = \text{YOLO}(path, task=\text{'detect'}):通过指定路径加载YOLO模型,并配置检测任务为目标检测 (detect)。
(2)配置目标检测的置信度阈值为 conf 参数;同时配置非极大值抑制(NMS)的交并比(IoU)阈值为 iou 参数。
完成图片识别任务:
(1)results = model(img\_path):模型对指定的图片进行目标识别任务;返回相应的识别信息。
显示检测结果:
(1)res = results[0].plot():将获取到的检测结果展示至图片中。
(2)cv2.imshow(“YOLOv8 Detection”, res):通过OpenCV库显示处理后的图像,并设置窗口标题为“YOLOv8 Detection”。
(3)cv2.waitKey(0):程序将暂停运行直至用户提供按键以关闭显示窗口。
执行imgTest.py代码后,会将执行的结果直接标注在图片上,结果如下:

这段输出由YOLOv8模型生成,并用于对图片'imagetest.jpg'进行检测的结果
图像信息:
(1)处理的图像路径为:TestFiles/imagetest.jpg。
(2)图像尺寸为448×640像素。
检测结果:
(1)模型在图片中检测到 1 个消防船(firefighting)。
处理速度:
(1)预处理时间: 4.0 毫秒
(2)推理时间: 39.0 毫秒
(3)后处理时间: 49.2 毫秒
该模型部署于NVIDIA GeForce RTX 4070 Ti SUPER上运行,在此平台上展现出高效的性能表现,并特别适合应用于实时目标检测任务
运行效果
– 运行 MainProgram.py

主要功能:
(1)支持实时识别图像中的舰船目标;
(2)能够处理图像、视频流以及摄像头输入,并且能够批量处理图像数据;
(3)系统界面实时显示目标位置坐标、总数统计、置信度评分以及完成时间等关键数据;
(4)能够将检测结果存储为图像文件或视频文件格式。
2.检测结果说明:

(1)置信度阈值:当前设置为0.25,表示检测系统只会考虑置信度高于25%的目标进行输出,置信度越高表示模型对检测结果的确信度越高。
(2)交并比阈值:当前设置为0.70,表示系统只会认为交并比(IoU)超过70%的检测框为有效结果。交并比是检测框与真实框重叠区域的比值,用于衡量两个框的相似程度,值越高表明重叠程度越高。
这两个参数常用于目标检测系统中;改变它们会决定模型的检测准确率和误报率。
这张图表展示了基于YOLOv8算法框架的目标检测系统的结果界面图示。以下是对该界面中各个字段的具体说明:

(1)该模型完成检测所需的时间为0.049秒。
(2)该模型体现了其实时性特征,并具有极快的运行效率。
目标数目(Object detection count): (1)物体被检测的数量为一, 这表示这是当前被检测到的第一个目标。
(1)该列表提供多种选项供用户选择查看的目标类型。
(2)当当前设置为“全部”时,则会展示系统检测到的所有目标相关信息。
目标检测类型:

当前所选的结果显示为 "大型运输船舶" 或 "bulker"。
置信度(Confidence):
(1)这表明模型对于检测到的目标属于"散货船"类别拥有93.26%的置信度。
(2)置信度反映的是模型对于检测结果的信心程度,在此情况下其值越大则表示该检测结果被赋予的信心越强。
目标位置(Object location):
(1)xmin=48,ymin=89:该区域由x方向起始点48、y方向起始点89定位,并用于确定图像中的目标区域位置。
(2)xmax=395,ymax=732:该区域由x方向终止点395、y方向终止点732定位,并用于确定图像中的目标区域范围。
这些坐标表示在图像中的目标区域范围,框定了检测到的“散货船”的位置。
该图表呈现了舰船目标的一次探测记录。详细记录了探测时间、探测到的目标类型、各项行为的概率值以及目标位置的具体信息。研究人员可通过图形界面观察和解析这些数据,并据此优化算法参数设置,在此基础上显著提高了其识别舰船的能力。
3.图片检测说明













单击图片按钮启动图像识别功能,请指定待检测的图像文件;或单击文件夹按钮选择并指定批量处理的图像目录。
操作步骤如下:
(1)单击目标下拉框以选择特定的目标信息显示;
(2)单击保存按钮以执行结果存储操作,默认存储路径设为save_data目录。
系统检测出舰船的目标详细情况,并呈现检测结果。具体来说,系统不仅识别出图片中的舰船及其详细情况,并且会展示总数量(total targets)、完成时间(elapsed time)、各目标类型(target types)、置信度水平(confidence levels)以及每个目标的位置坐标信息(position coordinate details)等关键数据
4.视频检测说明

单击“视频检测”按钮后会启动程序以获取当前屏幕上的实时图像流。随后系统会自动识别并分析这些图像内容,并将最终识别结果以实时更新的形式呈现在界面上。如果需要则可多次执行该操作以获取后续连续的画面数据。
单击“保存结果”按钮将会执行以下操作:系统会将当前获取的所有图像数据以及相应的分析信息存储到指定位置即save_data目录下。
检测结果:该系统对视频进行实时分析运行处理,并识别出舰船目标后记录其位置信息。表格记录了视频中多个检测结果的相关置信度和位置数据。
检测结果:该系统对视频进行实时分析运行处理,并识别出舰船目标后记录其位置信息。表格记录了视频中多个检测结果的相关置信度和位置数据。
该界面呈现了系统在视频帧中的多目标检测能力。系统能够通过精确识别舰船目标实现智能化分析功能,并能输出详细的数据结果以及相应的置信度评估。
5.摄像头检测说明

单击摄像头控制按钮以启动摄像头,并即可实现摄像头的开启;同时支持实时目标检测操作;再次单击该按钮将关闭摄像头设备
检测结果:通过摄像头实现了实时数据采集。识别出目标船只,并将分析结果予以呈现。持续监控摄像头的画面内容,并对识别出的行为位置进行了标记。数据记录表中列示了每帧图像中的详细分析数据。
检测结果:通过摄像头实现了实时数据采集。识别出目标船只,并将分析结果予以呈现。持续监控摄像头的画面内容,并对识别出的行为位置进行了标记。数据记录表中列示了每帧图像中的详细分析数据。
6.保存图片与视频检测说明

保存
点击【保存

该CSV文件记录了图片的相关信息,并包含以下几项具体数据:每张图片的路径信息、每张图片中目标物体的具体数量及其对应的编号、每种物体所属的目标类别以及检测结果的置信水平,并详细标注出每个目标物体在图像中的具体位置坐标值(具体指的是每个检测框在图像中占据的位置范围的坐标值)。

(1)图片保存

(2)视频保存

– 运行 train.py
1.训练参数设置

(1)data = \texttt{data\_yaml\_path}: 采用\texttt{data.yaml}中配置的数据集参数进行训练。
(2)epochs = 150: 设置训练迭代次数为150次。
(3)batch = 4: 每个批量处理4个图像样本(批量大小)。
(4)name = \texttt{'train_v8'}: 训练完成后模型参数将被存储在以\texttt{train_v8}命名的目录下。
(5)$optimizer = \texttt{'SGD'}: 采用随机梯度下降法(SGD)算法优化模型参数。
然而,在多数情况下(即大部分深度学习任务中),GPU一般能够提供更高的计算效率。因此,在某些特定场景下(例如面临硬件限制或其他因素),可能会导致用户不得不选择使用CPU来进行训练。
一般来说,在使用个人计算单元(CPU)进行深度学习模型的训练时,在处理速度方面相较于图形处理器(GPU)会显得较慢得多。例如YOLOv8这类具有较高计算需求的模型尤其明显。为了提高效率并节省时间安排,请考虑优先采用更为高效的方式进行训练。
2.训练日志结果

这张图展示了使用YOLOv8进行模型训练的详细过程和结果。
(1)经过150轮的持续训练后,该模型总耗时为20.194小时.
(2)本次训练基于NVIDIA GeForce RTX 4070 Ti SUPER GPU执行.
(3)该模型展现出卓越的训练效率,归功于YOLOv8优化设计与高性能硬件的强大支持.
验证结果:
(1)该模型在mAP@0.5时展现出色的性能,在目标类别检测方面表现出高度准确性。
(3)经过评估,在不同IoU阈值下该模型的平均精度达83.7%,证明其在严格评估标准下的卓越表现仍具竞争力
速度:
(1)0.1ms 预处理时间
(2)0.6ms 推理时间
(3)0.6ms 后处理时间
(4)总推理速度非常快。
该方法对验证结果进行了存储,并将其存储至 runs\detect\train_v8 目录中。
完成情况:(1)流程完成状态为exit code 0:表明整个验证流程顺利完成无误通过。
总结:
(1)YOLOv8模型在经过150次的训练后,在检测与分类任务方面表现出色,并且在其应用中尤其在大型舰船领域取得了显著成果。
(2)在少数小样本类别中(包括渔船与潜艇这类),该算法目前的表现仍需进一步优化。
(3)其推理速度极快,在实时应用需求方面表现优异。
