基于YOLOv8深度学习的智慧海洋SAR图像舰船目标检测系统
随着海上交通日趋繁忙以及海上安全管理需求日益提升,在这个背景下基于合成孔径雷达(SAR)图像进行舰船目标检测的技术被视为海上监控系统中不可或缺的重要研究方向。本研究开发了一款基于YOLOv8算法设计的舰船目标检测系统。该系统不仅具备高效处理SAR图像的能力,并且能够实现对舰船目标的自动识别。为了提升目标检测系统的准确率与实时响应能力,本研究通过训练与优化YOLOv8模型来提升其在SAR图像分析中的性能,并开发了一个集成了PyQt5技术的应用程序界面(GUI)。该界面不仅支持交互式的操作流程,并且还提供了结果可视化功能。
本文经过预处理与增强处理SAR图像数据集,并详细介绍了该数据集的构建过程。接着,在YOLOv8网络架构的基础上,并结合SAR图像的独特特性展开针对性模型训练及性能优化工作。通过对比实验分析发现,在舰船目标检测任务中展示了显著的优势表现。具体而言,在检测精度方面表现突出,在推理速度方面也取得了显著提升效果。
为提高用户体验与可视化效果,在深入研究的基础上进一步开发了一个PyQt5应用界面
实验结果显示出基于YOLOv8实现的舰船目标自动识别系统在多维度评估标准上均取得优异成绩,并不仅满足了实际应用需求还为SAR图像分析提供了强有力的支撑,并为海上安全监控带来了显著的技术优势
算法流程
全面解析项目的算法流程,并系统性地探讨其核心技术实现路径。研究从数据加载和预处理阶段入手,在延伸至核心算法的设计与优化后方继续深入探索,在最终涵盖结果的可视化呈现环节也将通过清晰的结构和简洁的语言进行展示以揭示其内在原理及具体实施思路。

项目数据
Tipps:为了收集多样化的舰船目标相关图像,并利用Labelimg标记工具对每张图片进行标注,在第1级检测类别中归类为'舰船'。
目标检测标注工具
(1)labelimg: 一款开源的图像标注工具,默认支持分类任务及目标检测功能。该程序采用Python编写,并以其Qt图形界面著称(尽管为英文版)。其标注结果以Pascal VOC格式保存为XML文件,并遵循ImageNet的标准格式。此外还支持COCO数据集格式的标注输出。
(2)安装labelimg 在cmd窗口输入以下命令完成安装: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的目录用于存放需要打标签的图片;接着,在另一个目录中存储标注信息;最后,在classes.txt文本文件中记录需要分类的所有类别名称
Data的目录结构如下:
│─img_data
│─images用于存储需要进行标注的图片文件
│─labels用于存储标注信息
└ classes.txt 用于说明将要标注的所有类别(该文件可选;建议在类别数量较多时创建该txt文件以存储所有分类信息)
首先在images这个文件夹放置待标注的图片。
生成文件如下:

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

(4)YOLO模式创建标签的样式
用于存储标签信息的文件采用与图片相同的文件名,并包含由N行5列数据构成的内容。每条记录代表一个被标记的目标,在每行中通常包含五个数据项:类别ID、x中心坐标、y中心坐标、宽度以及高度。其中:
- 类别ID表示被标记对象的具体分类;
- x中心坐标和y中心坐标表示标记框的相对位置;
- 宽度和高度表示标记框在水平和垂直方向上的大小。
注意:这里的中心点坐标、宽和高都是相对数据!!!

该文件名固定不变为classes.txt(不变),用于存储生成的标签类别。
完成后可进行后续的yolo训练方面的操作。
硬件环境
我们使用的是两种硬件平台配置进行系统调试和训练:
(1)外星人 Alienware M16笔记本电脑:

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

该硬件配置配备了充足的计算能力,并能有效支持大规模图像数据的训练与高效运算。显式的 GPU 引入使得模型训练时间大幅减少。通过两种不同的硬件平台进行测试与训练,则能实现对系统性能、适应性和稳定性的全面验证。这种方法不仅提升了系统的鲁棒性与泛化能力,并进一步优化了开发成本与效率,并为实际应用提供了可靠的基础保障。
模型训练
模型的训练、评估与推理
1.YOLOv8的基本原理
YOLOv8被视为当前最先进的目标检测框架之一,并基于Yolov5系列基础之上进行了全面革新。该模型通过集成一系列创新组件显著提升了检测速度与模型轻量化能力。其主要创新体现在三个方面:第一,在算法层面提出了全新的特征提取方法;第二,在检测逻辑上实现了 anchor-free 的突破;第三,在损失函数设计上采用了更加鲁棒的优化策略。这些改进使其能够高效运行于从CPU到GPU等多种硬件平台中,并在目标检测、图像分割及姿态估计等多个领域展现出卓越性能。

YOLOv8被视为Yolo系列中的顶尖版本,在多个关键指标上显著优于当前的对象检测与实例分割算法,并汲取了前代如YOLOv5、YOLOv6以及YOLOX等模型的成功经验。基于对YOLOv5架构的重大优化,并在此基础上实现了创新性突破的同时继承并强化了YOLOv5工程化设计中简洁高效的特点
Yolov8模型网络结构图如下图所示:

2.数据集准备与训练
本研究采用了包含舰船目标的SAR数据集作为基础,并通过Labelimg标注工具对图像中的目标边界框及其类别进行了精确标注。在此基础上,采用YOLOv8n模型完成了训练过程。经过系统性地评估并对比分析了模型在验证集上的性能表现。整个流程包括数据准备、模型训练以及性能评估三个关键环节。研究主要关注的目标类别集中在舰船领域。所涉数据共计43816张图像,在具体分布情况上主要分布在以下几个领域:...
训练集包含35,055张图像,并被用来进行模型学习与优化过程;验证集包含6,572张图像,并被用来评估模型在未见过数据上的表现能力;测试集包含2,192张图像,并被用来评估模型的泛化性能
统计集合的呈现情况:

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

部分标注如下图所示:

这种数据分布方式确保了数据在训练、验证以及测试阶段呈现均衡分布,并为YOLOv8n模型的开发和性能评价提供了稳定的技术基础。
在项目根目录下创建一个名为datasets的子目录,并按照统一的存储格式将收集到的图像分为训练数据集和验证数据集存放在其中。

随后

这个文件详细地指定了用于模型训练和验证的数据集的具体路径,并明确标注了模型将识别的所有目标类别。
在完成数据准备之后,在完成数据准备之后
在完成了所有必要的数据分析与预处理工作后
CPU/GPU训练代码如下:

导入名为 yolov8n.pt 的预训练YOLOv8模型。该模型文件 yolov8n.pt 是经过预先训练得到的权重文件。
3.YOLOv8模型训练结果与性能评估
在深度学习的学习过程中,在每一步训练阶段都需要通过分析模型的训练效果来指导下一步优化工作。对于YOLOv8这一目标检测模型而言,在其训练过程中主要经历了三个关键阶段:首先是定位目标的位置(box_loss),其次是识别类别标签(cls_loss),最后是提升模型对动态特征信息的捕捉能力(dfl_loss)。这三个方面的优化工作共同构成了该模型性能提升的关键因素
损失函数作用说明:
(1)定位损失 (box_loss):表示预测框与标定框之间的差异(GIoU),值越小则定位越精确。
(2)分类损失 (cls_loss):用于评估锚框与其对应的标定分类的一致性。
(3)动态特征损失 (dfl_loss):DFLLoss用于预测框与目标框之间的距离回归,并结合特征图尺度进行优化。
训练和验证结果文件存储:
训练完成后,相关的训练过程和结果文件会保存在 runs/ 目录下,包括:

(1)损失函数图形(Loss Functions Graph)
(2)评估曲线图(mAP、精确度与召回率)
(3)错误分类矩阵(Confusion Matrix)
(4)Precision-Recall (PR) 曲线
损失曲线(Loss Curve)和性能指标分析:

训练指标:
train/box_loss:
描述:反映了训练过程中Box Loss的变化趋势。
趋势:损失值从初始的1.6持续减少到1.1,并反映出模型不断优化目标边界框的位置。
其中,train/cls_loss:用于反映训练过程中类别分类损失(Classification Loss)的变化情况。趋势分析显示,在训练初期至中期阶段,loss值从1.5降至0.6;随后进入后期阶段后稳定于0.4左右
train/dfl_loss:
描述:体现分布焦点损失(Distribution Focal Loss)的变化情况;
用于边界框分布的精度提升;
趋势:损失由1.4降至约1.1;
表明模型在学习定位目标的特征分布时逐步实现精度提升。
验证指标:
validation metrics: val/box_loss
describes the trend of box loss across the validation set.
trend shows a decline from an initial value of 1.5 to 1.2, mirroring the training set's behavior.
指标val/cls\_loss体现验证集上分类损失的变化情况,并从起始值1.1降低至0.6。
val/dfl_loss: 分析验证集上分布焦点损失(DFL Loss)的变化情况。该指标由初始值1.4逐步降至约1.15,并与训练集的变化具有一致性。
性能指标:
metrics/precision(B):
描述: 该指标体现模型在训练集上的精度(Precision)波动情况。
趋势: 精确率从0.8稳步提升至大约0.92
metrics/recall(B):
描述: 反映了模型在训练集上对真实正样本的捕获能力的变化情况。
趋势: 该指标值由0.775增长至上限约为91%
metrics/mAP50(B):定义为验证集上iou值大于等于50%时所对应的平均精度(mAP@50)。描述该指标的趋势显示其值从一个较高的初始值稳步提升至接近峰值水平。
metrics/mAP₅₀-₉₅(B):
描述:代表验证集上IoU介于50%至95%之间的综合平均精度(mAP@₅₀-₉₅)。
趋势:由0.45增长至0.65,表明模型在不同IoU阈值下的平均检测能力逐步增强。
总结:
(1)当前模型展现出卓越的能力,在验证集与训练集中均显示出卓越的检测能力。
(2)在mAP@0.5已接近完美水平的前提下,在mAP@0.5至0.95范围内仍存在提升的空间。通过进一步优化训练策略及数据集质量,可使模型的泛化性能得到显著提升
Precision-Recall(P-R)曲线分析:

蓝色曲线图(整体 P-R 曲线图):代表 Ship 类别下的 PR 曲线,在 mAP@0.5 时达到 0.948 的精度值;该图表揭示了不同阈值下模型对 Ship 检测的准确度与召回率的变化情况。
总结:该模型的PR曲线展现出卓越的表现,在"Ship"目标检测任务中验证了其高精度和稳定性。
对混淆矩阵 (Confusion Matrix) 的分析 为评估分类模型性能提供关键参考依据,并直观展示其各类别间预测表现与实际结果之间的差异

结论:
(1)目前该系统在识别船体方面表现出色,并且仍需通过改进误检与漏检机制来进一步提升性能。
(2)综合评估结果显示该模型达到了90.9%的F1分数,在实际应用中具有较高的价值潜力。
(3)根据具体应用场景的需求情况,则可以通过调节相关参数以及优化数据处理流程来实现预期效果。
4.检测结果识别
在模型训练完成后, 我们能够获得一个优秀的结果模型best.pt文件, 该文件位于runs/train/weights目录中. 为了进行后续的推理检测, 我们可利用该文件.

加载所需库:
(1)通过以下代码加载YOLO模型类:from ultralytics import YOLO
该模型类将被用于目标检测任务。
(2)引入OpenCV库:import cv2
该库将被用于图像处理与显示功能的实现。
加载模型路径和图片路径:
(1)path = ‘models/best.pt’:配置预设路径以定位经过预先训练的模型,并将其指定为用于目标检测作业的位置参数。
(2)img_path = “TestFiles/imagetest.jpg”:明确指定待检测图像文件的具体位置路径信息。
加载预训练模型:
(1)model = YOLO(path, task='detect'):通过指定路径加载YOLO模型,并配置其检测任务为目标检测 (detect)。
(2)该代码块中使用的 conf 参数用于设定目标检测任务的置信水平阈值,并且 iou 参数用于配置非极大值抑制算法的具体IoU阈值。
进行图片检测:
(1)通过模型对输入的图片进行处理后得到 results;
(2)完成目标检测任务;
其中包含完整的检测信息。
显示检测结果:
(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)图像尺寸为640×640像素。
检测结果:
(1)模型在图片中检测到 1 个Ship(舰船)。
处理速度:
(1)预处理时间: 7.0 毫秒
(2)推理时间: 5.0 毫秒
(3)后处理时间: 81.5 毫秒
YOLOv8模型在船只检测任务中的表现为色出色,在这一领域展现了强大的性能优势。其推理速度极快,在实际应用中能够满足大部分实时处理需求;整体运行时间适用于多种实时环境
运行效果
– 运行 MainProgram.py

主要功能:
(1)具备海上舰船的目标图像识别能力;
(2)该系统能够处理图像、视频流以及摄像头输出的输入数据,并且同时具备批量处理图像的能力;
(3)系统界面提供实时显示功能,并能动态呈现包括目标位置坐标、数量统计以及每帧检测精度和所需时间等关键数据;
(4)该模块能够将检测结果存储至本地存储介质中。
2.检测结果说明:

(1)置信度阈值:当前设置为0.25,表示检测系统只会考虑置信度高于25%的目标进行输出,置信度越高表示模型对检测结果的确信度越高。
(2)交并比阈值:当前设置为0.70,表示系统只会认为交并比(IoU)超过70%的检测框为有效结果。交并比是检测框与真实框重叠区域的比值,用于衡量两个框的相似程度,值越高表明重叠程度越高。
这两个参数常被用来配置目标检测系统中的一些关键设置;调节它们会对模型的检测精度产生直接影响,并且还能降低误检的可能性。
目标检测类型:

当前选择的项目为 'ship' ,表明系统正识别出 'S舰船' 。
置信度(Confidence):
(1)这表明模型将检测到的目标归类为“舰船”类型的信心程度为83.59%。
(2)置信度体现了模型对于该检测结果的信任程度,在此情况下其值越高则表明模型对该结果越有信心。
位置信息中包含的目标坐标:
(1)xmin=105、ymin=107:具体表明该目标区域在图像中的起始点。
(2)xmax=137、ymax=142:明确指出该目标区域的具体边界参数值。
这些坐标表示在图像中的目标区域范围,框定了检测到的“舰船”的位置。
该图呈现了舰船目标的一次探测结果,并详细列出了探测时间、探测到的目标类型、各行为的概率值以及目标的位置信息。操作者可通过界面观察并评估这些探测结果,并据此采取措施以提高舰船目标探测的有效率。
3.图片检测说明



首先,请您点击打开图片按钮。
随后,请您根据需求选择是单独检测一张图片还是批量处理文件夹中的多张图片。
操作演示如下:
(1)在选定目标选项后,请查看对应的目标结果信息。
(2)单击保存按钮后会将检测结果存储至 save_data 文件夹内。
完成上述操作后,请确认保存路径设置为 save_data 文件夹内。
检测结果:该系统能够有效识别图片中的舰船目标情况,并呈现了详细的检测结果信息。包括总的目标数量、完成时间、舰船类型、置信度评分以及各目标的具体位置坐标数据。
4.视频检测说明

单击视频按钮后, 启动程序以切换至主界面, 用户需先选择待检测的视频文件, 系统会立即显示检测结果. 检测完毕后, 再次单击可切换回主界面.
单击保存按钮后, 系统会对获取的检测结果进行存储, 存储路径为: save_data 目录下.
检测结果:该系统能够对视频进行实时处理,并能识别出舰船目标后予以显示。通过表格形式展示了视频中多个舰船目标的识别置信度及具体位置信息。
这个界面呈现了系统在视频帧中进行多目标检测的能力,并具备精确识别舰船的能力。同时提供了丰富的检测数据及相应的可信度评估结果。
5.摄像头检测说明

通过点击摄像头按钮来开启摄像头设备,并可在其运行期间执行实时检测操作。此外,在再次点击该按钮时可关闭该设备的镜头功能。
检测结果:系统通过摄像头实施实时监控,并识别舰船目标并展示相关信息。持续更新摄像头图像,并标出行为位置;表格下方记录了各帧的详细数据
6.保存图片与视频检测说明

当按下保存按钮时,在线系统会在其响应中处理并存储所选的照片以及可能包含批量处理的照片和视频内容。系统将生成并存储这些图像和视频数据至指定的位置。请查看以下链接以获取详细信息。

在CSV文件中存储了图片数据,在其中包含了以下信息:图片路径、目标在图像中的编号、目标所属类别以及该目标被检测出的信心程度;此外还记录了每个目标的位置坐标。注:其中的目标位置坐标表示检测框的左上角与右下角两点对应的x、y值。

(1)图片保存

(2)视频保存

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

data follows the configuration in data_yaml_path: The data will be loaded according to the specifications in the data.yaml file.
The number of training epochs is set to 150 cycles.
Each batch processes a quantity of 4 images (batch size).
The training results will be stored in a directory named train_v8.
Stochastic gradient descent (SGD) is selected as the optimization algorithm.
虽然普遍认为GPU在大多数深度学习任务中能够显著提升效率,在实际应用中也确实表现出更高的计算能力。
使用CPU进行模型训练的速度通常会显著低于使用GPU的情况,尤其是针对像YOLOv8这样的计算密集型任务而言。除非特殊情况要求,否则建议优先选择GPU进行训练以提高效率。
2.训练日志结果

这张图展示了使用YOLOv8进行模型训练的详细过程和结果。
训练总时长:
(1)经过150轮的训练后, 总用时为15.460小时。
(2)本次实验基于NVIDIA GeForce RTX 4070 Ti SUPER GPU平台开展。
(3)该实验具备较高的训练效率, 其得益于YOLOv8模型的优化设计以及高性能硬件的强大支持。
实验结果表明,在较低IoU阈值下(约为0.5),模型达到了稳定的平均精度(mAP)为0.948的好成绩。(2)针对较高IoU阈值(约在0.5至0.95之间),该模型最终实现了相对较低的平均精度(mAP)为0.654。
速度:
(1)前处理所需的时间为0.1毫秒;
(2)推理所需的时间为0.8毫秒;
(3)后处理所需的时间为0.5毫秒;
(4)每张图像的平均推理时间为1.4毫秒;该模型表现出色,适用于实时检测场景。
Validation results are stored in runs\detect\train_v8 folder.
完成信息:(1)Process finished with exit code 0 表示整个验证流程得以顺利结束,并且无误通过检验。
总结:YOLOv8模型在训练阶段展现出色,在mAP@0.5指标以及推理速度方面均展现出色。该模型特别适合应用于实时场景,在mAP@0.5至0.95的指标以及小目标检测任务中仍需进一步优化。
