基于YOLOv8深度学习汽车车标自动检测系统
基于YOLOv8深度学习汽车车标自动检测系统
本文介绍了一种基于YOLOv8深度学习算法的汽车车标自动检测系统。该系统集成了PyQt5图形用户界面、定制数据集以及完整的训练代码,能够实现对15个知名汽车品牌的车标进行高效定位与精准分类。
数据集构建
研究首先构建了一个涵盖15个知名汽车品牌(包括奥迪、雪铁龙、达契亚、菲亚特、福特、现代、三菱、日产、欧宝、标致、雷诺、西雅特、斯柯达、丰田、大众)的车标数据集。通过数据预处理和标注技术,确保了数据的高质量和多样性。
模型训练
数据集准备
本研究使用了包含汽车车标情况的数据集,并通过 Labelimg 标注工具对每张图像中的目标边界框(Bounding Box)及其类别进行标注。基于此数据集,采用 YOLOv8n 模型进行训练。训练完成后,对模型在验证集上的表现进行了全面的性能评估与对比分析。整个模型训练与评估流程包括以下步骤:数据集准备、模型训练、模型评估。本次标注的目标类别主要集中于汽车车标情况。数据集总计包含 23234 张图像,具体分布如下:
- 训练集:16263 张图像,用于模型学习和优化。
- 验证集:4647 张图像,用于评估模型在未见过数据上的表现,防止过拟合。
- 测试集:2324 张图像,用于最终评估模型的泛化能力。
部分数据集图像如下图所示:
部分标注如下图所示:
这种数据分布方式保证了数据在模型训练、验证和测试阶段的均衡性,为 YOLOv8n 模型的开发与性能评估奠定了坚实基础。
模型训练
在模型训练阶段,主要参数设置如下:
data=data_yaml_path
: 指定了用于训练的数据集配置文件。epochs=150
: 设定训练的轮数为150轮。batch=4
: 指定了每个批次的样本数量为4。optimizer='SGD'
: 使用SGD优化器。name='train_v8'
: 指定了此次训练的命名标签,用于区分不同的训练实验。
模型评估
在深度学习的过程中,我们通常通过观察损失函数下降的曲线来了解模型的训练情况。对于 YOLOv8 模型的训练,主要涉及三类损失:定位损失(box_loss)、分类损失(cls_loss)以及动态特征损失(dfl_loss)。这些损失的优化是提升目标检测性能的关键。
损失函数作用说明:
- 定位损失 (box_loss):表示预测框与标定框之间的误差(GIoU),越小表示定位越准确。
- 分类损失 (cls_loss):用于衡量锚框与对应的标定分类是否正确,越小表示分类越准确。
- 动态特征损失 (dfl_loss):DFLLoss用于回归预测框与目标框之间的距离,并结合特征图尺度进行调整,最终提高目标检测的定位准确性。
训练和验证结果文件存储:
训练完成后,相关的训练过程和结果文件会保存在 runs/ 目录下,包括:
- 损失曲线图(Loss Curves)
- 性能指标曲线图(mAP、精确率、召回率)
- 混淆矩阵(Confusion Matrix)
- Precision-Recall (P-R) 曲线
损失曲线(Loss Curve)和性能指标分析:
训练指标:
- train/box_loss:边界框回归的损失函数值,表示预测的目标边界框与真实边界框的差异。损失值随着训练 epoch 增加而逐渐下降,说明模型在逐步学习并优化目标框的位置。
- train/cls_loss:分类损失,表示预测类别和真实类别之间的差异。损失在初始阶段下降迅速,然后趋于平稳,说明模型的分类能力在逐渐提升。
- train/dfl_loss:分布聚合损失(Distribution Focal Loss),用于优化边界框的预测分布。损失值逐渐降低,说明模型在目标框精细化预测上有了改进。
验证指标:
- val/box_loss:验证集上的边界框回归损失,与训练集的 box_loss 类似,但用于验证模型的泛化能力。损失曲线下降并逐渐稳定,说明模型的检测框回归能力在验证集中表现稳定。
- val/cls_loss:验证集上的分类损失,与训练集的 cls_loss 类似。趋势类似于 train/cls_loss,初期下降较快,后期趋于稳定,说明模型分类能力提升并稳定。
- val/dfl_loss:验证集上的分布聚合损失。趋势下降与 train/dfl_loss 类似,说明模型在验证集上也在逐步优化。
性能指标:
- metrics/precision(B):训练过程中的精确率,表示预测为目标的样本中实际为目标的比例。精确率逐步上升,说明误检率减少。
- metrics/recall(B):训练过程中的召回率,表示所有真实目标中被正确检测到的比例。初期上升较快,随后趋于稳定,说明模型越来越能找到目标对象。
- metrics/mAP50(B):验证集上的 mAP@0.5,表示 IoU 阈值为 0.5 时的平均精度。mAP50 在初期上升较快,随后趋于 1.0 逼近,说明模型的整体检测效果非常好。
- metrics/mAP50-95(B):验证集上的 mAP@0.5-0.95,表示多个 IoU 阈值下的平均精度。mAP50-95 逐步上升,最终稳定在 0.6 左右,说明模型在更严格的 IoU 要求下也能保持较好的检测能力。
总结:
- 损失曲线(Loss):训练和验证损失均逐渐下降,表明模型在稳定优化,没有明显的过拟合。
- 精确率 & 召回率(Precision & Recall):均稳步上升,表明模型在提高检测质量和减少误检方面取得进展。
- mAP 指标(mAP50 & mAP50-95):模型最终在 mAP50 逼近 1.0,mAP50-95 约为 0.6,显示检测精度较高,但在更严格的 IoU 评估下仍有优化空间。
Precision-Recall(P-R)曲线分析:
- 蓝色 – audi (AP=0.995)
- 橙色 – citroen (AP=0.993)
- 绿色 – dacia (AP=0.982)
- 红色 – fiat (AP=0.971)
- 紫色 – ford (AP=0.992)
- 棕色 – hyundai (AP=0.993)
- 粉色 – mitsubishi (AP=0.990)
- 灰色 – nissan (AP=0.995)
- 黄色 – opel (AP=0.971)
- 青色 – peugeot (AP=0.989)
- 浅蓝色 – renault (AP=0.984)
- 深橙色 – seat (AP=0.981)
- 深绿色 – skoda (AP=0.993)
- 深红色 – toyota (AP=0.962)
- 浅紫色 – volkswagen (AP=0.991)
- 深蓝色 – all classes (mAP@0.5 = 0.985) → 代表所有类别的平均性能。
混淆矩阵 (Confusion Matrix) 分析
混淆矩阵是用于评估分类模型性能的重要工具,它显示了模型在每一类别上的预测结果与实际情况的对比。
结论:
这个混淆矩阵显示模型在多数主流汽车品牌上能保持较高的正确识别率,但对于样本量较少或易混淆的品牌还有一定的改进空间。
检测结果识别
模型训练完成后,我们可以得到一个最佳的训练结果模型best.pt文件,在runs/train/weights目录下。我们可以使用该文件进行后续的推理检测。
imgTest.py 图片检测代码如下:
加载所需库:
from ultralytics import YOLO
:导入YOLO模型类,用于进行目标检测。import cv2
:导入OpenCV库,用于图像处理和显示。
加载模型路径和图片路径:
path = 'models/best.pt'
:指定预训练模型的路径,这个模型将用于目标检测任务。img_path = "TestFiles/imagetest.jpg"
:指定需要进行检测的图片文件的路径。
加载预训练模型:
model = YOLO(path, task='detect')
:使用指定路径加载YOLO模型,并指定检测任务为目标检测 (detect)。通过 conf 参数设置目标检测的置信度阈值,通过 iou 参数设置非极大值抑制(NMS)的交并比(IoU)阈值。
检测图片:
results = model(img_path)
:对指定的图片执行目标检测,results 包含检测结果。
显示检测结果:
res = results[0].plot()
:将检测到的结果绘制在图片上。cv2.imshow("YOLOv8 Detection", res)
:使用OpenCV显示检测后的图片,窗口标题为“YOLOv8 Detection”。cv2.waitKey(0)
:等待用户按键关闭显示窗口
执行imgTest.py代码后,会将执行的结果直接标注在图片上,结果如下:
这段输出是基于YOLOv8模型对图片“imagetest.jpg”进行检测的结果,具体内容如下:
图像信息:
- 处理的图像路径为:TestFiles/imagetest.jpg。
- 图像尺寸为384×640像素。
检测结果:
- 检测到图像属于检测 奥迪(audi) 1 个目标
处理速度:
- 预处理时间: 5.5 毫秒
- 推理时间: 48.9 毫秒
- 后处理时间: 105.7 毫秒
总结:
模型成功检测到了一个 audi 车标,说明当前的 YOLOv8 模型推理是正常工作的。
系统界面运行效果
主要功能
- 可用于实时检测目标图片中的汽车车标;
- 支持图片、视频及摄像头进行检测,同时支持图片的批量检测;
- 界面可实时显示目标位置、目标总数、置信度、用时等信息;
- 支持图片或者视频的检测结果保存。
检测结果说明
这张图表显示了基于YOLOv8模型的目标检测系统的检测结果界面。以下是各个字段的含义解释:
用时(Time taken):
- 这表示模型完成检测所用的时间为0.099秒。
- 这显示了模型的实时性,检测速度非常快。
目标数目(Number of objects detected):
- 检测到的目标数目为10,表示这是当前检测到的第1个目标。
目标选择(下拉菜单):全部:
- 这里有一个下拉菜单,用户可以选择要查看的目标类型。
- 在当前情况下,选择的是“全部”,意味着显示所有检测到的目标信息。
结果(Result):
- 当前选中的结果为 “奥迪”,表示系统正在高亮显示检测到的“audi”。
置信度(Confidence):
- 这表示模型对检测到的目标属于“奥迪”类别的置信度为90.98%。
- 置信度反映了模型的信心,置信度越高,模型对这个检测结果越有信心。
目标位置(Object location):
- xmin: 772, ymin: 246:目标的左上角的坐标(xmin, ymin),表示目标区域在图像中的位置。
- xmax: 862, ymax: 332:目标的右下角的坐标(xmax, ymax),表示目标区域的边界。
- 这些坐标表示在图像中的目标区域范围,框定了检测到的“奥迪”的位置。
这张图展示了汽车车标目标的一次检测结果,包括检测时间、检测到的种类、各行为的置信度、目标的位置信息等。用户可以通过界面查看并分析检测结果,提升汽车车标目标检测的效率。
图片检测说明
点击打开图片按钮,选择需要检测的图片,或者点击打开文件夹按钮,选择需要批量检测图片所在的文件夹。
操作演示如下:
- 点击目标下拉框后,可以选定指定目标的结果信息进行显示。
- 点击保存按钮,会对检测结果进行保存,存储路径为:save_data目录下。
检测结果:系统识别出图片中的汽车车标目标,并显示检测结果,包括总目标数、用时、目标类型、置信度、以及目标的位置坐标信息。
视频检测说明
点击视频按钮,打开选择需要检测的视频,就会自动显示检测结果,再次点击可以关闭视频。
点击保存按钮,会对视频检测结果进行保存,存储路径为:save_data目录下。
检测结果:系统对视频进行实时分析,检测到汽车车标目标并显示检测结果。表格显示了视频中多个检测结果的置信度和位置信息。
这个界面展示了系统对视频帧中的多目标检测能力,能够准确识汽车车标目标,并提供详细的检测结果和置信度评分。
摄像头检测说明
点击打开摄像头按钮,可以打开摄像头,可以实时进行检测,再次点击,可关闭摄像头。
检测结果:系统连接摄像头进行实时分析,检测到汽车车标目标并显示检测结果。实时显示摄像头画面,并将检测到的行为位置标注在图像上,表格下方记录了每一帧中检测结果的详细信息。
保存图片与视频检测说明
点击保存按钮后,会将当前选择的图片(含批量图片)或者视频的检测结果进行保存。
检测的图片与视频结果会存储在save_data目录下。
保存的检测结果文件如下:
图片文件保存的csv文件内容如下,包括图片路径、目标在图片中的编号、目标类别、置信度、目标坐标位置。
注:其中坐标位置是代表检测框的左上角与右下角两个点的x、y坐标。
- 图片保存
- 视频保存
训练日志结果
这张图展示了使用YOLOv8进行模型训练的详细过程和结果。
训练总时长:
- 模型在训练了150轮后,总共耗时 7.768 小时。
- 本次训练使用了 NVIDIA GeForce RTX 4070 Ti SUPER显卡。
- 表现出较高的训练效率,得益于YOLOv8模型的优化设计和高性能硬件的支持。
验证结果:
- mAP50: 98.5%
- mAP50-95: 61.5%
速度:
- 0.1ms 预处理时间
- 0.8ms 推理时间
- 0.6ms 后处理时间
- 表明模型推理效率高,适合实时检测。
结果保存:
- Results saved to runs\detect\train_v8:验证结果保存在 runs\detect\train_v8 目录下。
完成信息:
- Process finished with exit code 0:表示整个验证过程顺利完成,没有报错。
总结:
YOLOv8 模型在车标(或其他小目标)检测上的较好性能。