1 数据集说明
本次项目使用的数据集为一个交通标志检测数据集,来源(交通标志检测 (kaggle.com))。该数据集包含多种类型的交通标志,如红绿灯、速度限制标志和停车标志等。每个图像文件都附有详细的标注文件,标注了每个交通标志的类别和位置(用边界框表示)。数据集的图像分辨率各不相同,既包含白天拍摄的图像,也包含夜间拍摄的图像,因此数据集具有较好的多样性和代表性。
数据集分为训练集、验证集和测试集。训练集用于模型的训练,验证集用于模型参数调整,测试集用于最终模型性能的评估。训练集中包含大量不同种类的交通标志,以确保模型能够学习到各种交通标志的特征。验证集和测试集的选择也考虑了交通标志种类的均匀分布,以便全面评估模型的泛化能力。
数据集特征图:
2 yolov8模型构建训练
2.1 yolov8n模型
YOLOv8n是YOLOv8模型家族中最小的模型,适用于计算资源有限的场景。该模型具有较少的参数量和较低的计算复杂度,但依然能够在保持较高速度的同时,提供较为准确的目标检测结果。YOLOv8n模型主要由卷积层、池化层和全连接层组成,通过结合不同尺度的特征图,能够有效检测到各种尺寸的目标。
# 导入YOLO模块
from ultralytics import YOLO
# 训练YOLOv8n模型
# YOLOv8n是YOLOv8模型中的最小版本,适用于对速度要求高但对精度要求较低的情况
model_n = YOLO("yolov8n.pt")
# 开始训练,参数包括数据集路径、训练轮数、图像大小和使用的设备
results_n = model_n.train(data="./dataset/data.yaml", epochs=100, imgsz=320, device=0)
在模型训练过程中,选择了优化器Adam,并采用学习率预热策略。训练过程中,训练总共进行了100个epoch。在每个epoch中,记录并监控了模型的各项损失和评估指标,包括box_loss、cls_loss、dfl_loss、precision、recall、mAP50和mAP50-95等。
在训练初期,模型的box_loss、cls_loss和dfl_loss较高,但随着训练进行,这些损失逐渐下降,表明模型在逐步学习并优化其参数。具体来看,box_loss从最初的0.82368逐步下降到0.42733,说明模型在预测目标边界框时的误差逐渐减小;cls_loss从3.1194下降到0.26326,表明模型在目标分类上的错误率显著降低;dfl_loss则从1.0484下降到0.8334,表明模型在预测特征图的分布上也取得了较好的优化效果。
从评估指标来看,模型的precision、recall和mAP50-95等指标均有明显提升。例如,precision从最初的0.45852提高到0.94322,recall从0.22586提高到0.85227,mAP50-95从0.18146提升到0.79572。上述指标的提升表明模型在目标检测任务上的准确性和召回率都有了显著的改善,能够较为准确地检测和识别出图像中的目标。
2.2 yolov8s模型
YOLOv8s是YOLOv8模型家族中一种中等规模的模型,适用于在计算资源相对充裕的情况下,追求更高的检测准确率。与YOLOv8n相比,YOLOv8s具有更多的参数和更复杂的网络结构,从而能够更好地捕捉目标的细节特征,提高检测精度。YOLOv8s模型同样由多个卷积层、池化层和全连接层组成,利用多尺度特征融合技术,以实现对不同尺度目标的精准检测。
# 训练YOLOv8s模型
# YOLOv8s是YOLOv8模型中的小型版本,在速度和精度之间取得了平衡
model_s = YOLO("yolov8s.pt")
results_s = model_s.train(data="./datas