摘要 :面向自动驾驶场景中"多目标、小尺度、遮挡频繁、光照剧烈变化与实时性约束并存"的工程需求,本文围绕YOLOv5 至 YOLOv12 的演进脉络,系统性给出一套可落地的自动驾驶目标检测系统 设计与实现方案,并提供可复现的完整代码、可视化界面与数据集项目 。系统以 YOLO 系列为核心检测引擎,覆盖从 YOLOv5/6/7/8/9/10/11 到 YOLOv12 的多版本模型对比与切换,统一实现数据读取、训练评估、部署推理与结果管理;在算法侧,结合自动驾驶常见目标(如车辆、行人、骑行者与交通标志等)的分布特征,给出适配的标注与预处理流程、输入尺度与数据增强策略,并在同一数据集与一致指标下对比各版本在精度与速度上的差异;在系统侧,采用 PySide6 构建交互友好的桌面端界面,实现图片/视频/摄像头多源输入、检测框与置信度显示、类别统计、阈值参数可调、结果导出与持久化管理等功能,形成从数据到模型再到应用的完整闭环。本文不仅梳理 YOLO 系列升级带来的结构设计变化与工程取舍,也面向自动驾驶实时检测任务给出可复用的实践范式,为读者快速搭建与迭代目标检测系统提供参考。
文章目录
- [1. 前言综述](#1. 前言综述)
- [2. 数据集介绍](#2. 数据集介绍)
- [3. 模型设计与实现](#3. 模型设计与实现)
- [4. 训练策略与模型优化](#4. 训练策略与模型优化)
- [5. 实验与结果分析](#5. 实验与结果分析)
- [6. 系统设计与实现](#6. 系统设计与实现)
-
- [6.1 系统设计思路](#6.1 系统设计思路)
- [6.2 登录与账户管理](#6.2 登录与账户管理)
- [7. 下载链接](#7. 下载链接)
- [8. 参考文献(GB/T 7714)](#8. 参考文献(GB/T 7714))
1. 前言综述
自动驾驶感知系统的核心任务之一,是在复杂道路环境中对车辆、行人、骑行者与交通设施实现稳定、低时延的目标检测与定位,从而为决策规划提供可置信的几何与语义输入。早期车载视觉多依赖手工特征与浅层分类器的组合,例如以梯度方向直方图描述局部形状并配合线性分类器进行行人检测的经典范式,虽然在特定条件下具备可解释性与工程可控性,但对尺度变化、遮挡、光照与背景杂波高度敏感,难以覆盖真实道路的长尾场景1。 (Thoth)
深度学习推动了目标检测从"特征工程"转向"表示学习",其中两阶段检测器以候选区域生成与精细分类回归为主线,在精度上长期占优,但其多阶段计算与后处理链条往往带来端到端时延压力,尤其在高帧率车载推理中更为突出2。单阶段检测器通过在密集网格上直接回归边界框与类别显著提升吞吐率,SSD以多尺度特征图上的默认框机制实现了更好的速度---精度折中,成为实时检测的重要里程碑3。针对单阶段训练中前景---背景极端不均衡导致的优化困难,RetinaNet提出焦点损失以抑制易样本梯度主导,从而显著改善密集检测的有效学习信号4。近年来,Transformer 结构被引入检测框架,DETR将检测建模为集合预测并以二分匹配实现端到端训练,弱化了锚框设计与非极大值抑制等手工先验,但其训练收敛与数据效率问题也促使后续大量工作围绕"实时化"和"更快收敛"继续演进[5]。 (NeurIPS Papers)
面向自动驾驶的研究还强依赖基准数据集与评测协议的演进:KITTI 以多传感器采集与交通场景任务集奠定了车载视觉评测的早期范式,促进了车辆、行人等类别的标准化比较[6];BDD100K 以更强的地域、天气与时间分布多样性支持异构多任务学习,为提升跨域鲁棒性提供了更接近真实部署的数据基础[7];nuScenes 则在全景多传感器套件与三维标注规模上显著扩展了研究边界,使"多模态融合"与"3D检测/跟踪"的评测成为常态[8]。国内研究在工程落地与场景化改造方面积累较快,尤其围绕 YOLO 系列在车辆、行人、交通标志与信号灯检测中的应用、实时性与精度权衡、以及复杂场景挑战的梳理,已形成较系统的综述与问题归纳[9]。 (CVlibs)
表 1 汇总了从传统方法到端到端检测范式在自动驾驶场景中的典型路径,并结合常用数据集与核心瓶颈给出对比。需要强调的是,道路目标检测并非"单纯追求更高 mAP",而是要在远距离小目标、密集遮挡、强反光与夜间低照、雨雾雪导致的成像退化、以及高速运动引起的模糊与滚动快门畸变等因素下维持可预期的误检/漏检边界;与此同时,车端部署还受到算力、功耗、模型更新周期与可维护性的约束,算法结构与系统工程的耦合度远高于通用视觉应用。
表 1 自动驾驶目标检测代表性方法与特性对比
| 方法范式 | 代表性工作 | 常用数据集(示例) | 优点(面向车载) | 局限与挑战(面向车载) | 典型改进方向 |
|---|---|---|---|---|---|
| 传统特征 + 分类器 | HOG 行人检测1 | KITTI[6] | 可解释、低门槛、易调参 | 泛化弱、对遮挡/光照敏感、难适配长尾 | 特征鲁棒性、融合时空先验 |
| 两阶段检测 | Faster R-CNN2 | KITTI[6] / BDD100K[7] | 精度强、定位稳定 | 推理链条较长、端到端时延偏高 | 轻量化骨干、剪枝/量化、加速后处理 |
| 单阶段(锚框) | SSD3 | BDD100K[7] | 速度快、工程成熟 | 锚框设计与尺度匹配敏感 | 多尺度特征融合、锚框自适应 |
| 单阶段(改进损失) | RetinaNet4 | BDD100K[7] | 缓解类别不均衡、精度提升 | 仍依赖密集预测与后处理 | 动态分配、难样本挖掘、代价敏感学习 |
| Transformer 端到端 | DETR[5] | nuScenes[8] | 端到端集合预测、弱化手工先验 | 收敛慢、数据效率与实时性压力 | 可变形注意力、实时化解码、蒸馏加速 |
| YOLO 系列实时检测 | YOLO 系列综述(自动驾驶)[9] | KITTI[6] / BDD100K[7] | 速度---精度折中突出、部署生态完善 | 小目标与遮挡场景仍具挑战 | 轻量化结构、注意力机制、端到端后处理 |
(Thoth)
在上述技术谱系中,YOLO 路线的价值在于以较简洁的单阶段框架获得可部署的实时性能,并通过持续的结构与训练机制革新,逐步逼近"高精度 + 低时延"的共同约束。YOLOv5 以工程化实现与多格式导出链路推动了从研究到部署的迁移效率,成为大量车载与边缘端实验的事实基线[10]。YOLOv6 面向工业应用引入更偏硬件友好的结构与训练策略,使实时检测的效率边界进一步外推[11]。YOLOv7 提出可训练的 bag-of-freebies 思路并系统性讨论重参数化与标签分配等训练侧关键问题,在不显著增加推理代价的前提下提升了实时检测上限[12]。YOLOv9 进一步以可编程梯度信息缓解深层网络信息退化并配合更高效的层聚合结构,强调训练信号的完整传递与结构效率的统一[13]。YOLOv10 将端到端实时检测作为目标,围绕效率与精度对组件进行整体优化,并将"去除 NMS 的端到端链路"作为重要方向之一,从系统延迟角度更贴近车载需求[14]。YOLOv12 则尝试以注意力为中心的实时检测框架在速度可比的前提下获得更强表征能力,其报告的对比结果显示在多尺度模型上可相对更早的实时检测器获得稳定增益,并与 YOLOv10/YOLOv11 等模型形成直接的代际对照[15]。 (GitHub)
基于上述背景,老思在本文将围绕"YOLOv5 至 YOLOv12 的升级路径"组织一个可复现实验的自动驾驶目标检测系统:一方面在同一数据与评测协议下系统对比 YOLO 系列多代模型的精度、速度与部署开销,另一方面构建并整理面向道路目标的标注数据集与完整训练/推理代码工程,并以 PySide6 设计可交互界面实现多模型权重切换、视频/摄像头实时检测、结果可视化与导出,从而把算法演进与可用系统实现放在同一条可验证链路上。
主要功能演示:
(1)启动与登录:系统启动后首先进入登录界面,用户可选择注册或直接登录;账号信息与个性化配置(如上次使用的模型、阈值参数、主题偏好)由 SQLite 持久化保存,登录成功后自动载入历史记录并进入主界面,实现"同一账号---独立空间---可复用设置"的连续使用体验。

(2)多源输入与实时检测(摄像头/视频/图片/文件夹):在主界面中,输入源以统一入口管理,支持本地图片、图片文件夹批量检测、本地视频文件以及摄像头实时流四种模式;系统在加载输入后完成尺寸归一化与必要的预处理,随后调用 YOLO 推理并在界面中实时叠加检测框、类别与置信度,同时同步输出类别统计与帧率等运行信息;视频与摄像头模式支持播放控制与实时刷新,文件夹模式支持逐张遍历与结果汇总,便于快速完成离线评估与线上演示。

(3)模型选择与对比演示:系统内置 YOLOv5 至 YOLOv12 的多版本权重管理与一键切换,用户可在界面中直接选择不同模型对同一输入进行推理,快速观察在小目标、遮挡与远距离等典型驾驶场景下的检出差异;对比模式下,系统以一致的 Conf/IOU 与输入尺度进行推理,并将关键指标(如推理耗时、FPS、类别统计变化)同步展示,从而把"模型精度---速度---稳定性"的权衡以可视化方式呈现,便于选型与实验复现。

(4)主题修改功能:为提升工程可用性与长期演示体验,系统提供主题切换与个性化外观配置能力,支持亮色/暗色/自定义主题的即时应用,并允许用户调整主色调、背景图、图标风格与部分控件字体显示;主题配置与界面布局偏好同样写入数据库并与账号绑定,使不同用户在同一套程序中获得独立且一致的交互环境,满足课堂展示、实验室部署与现场演示等多场景需求。

2. 数据集介绍
本项目构建的自动驾驶道路场景目标检测数据集共包含 29,800 张图像,覆盖常见交通参与者与交通信号灯状态等关键目标,类别体系与工程标签保持一致,分别为 biker(骑手)、car(汽车)、pedestrian(行人)、trafficLight(交通灯)及其细分状态 trafficLight-Green/GreenLeft/Red/RedLeft/Yellow/YellowLeft,以及 truck(卡车)。从你给出的类别实例统计图可以直接看出,car 的标注实例数量显著高于其他类别,pedestrian 与 trafficLight(及其状态)处于第二梯队,而 biker、truck 相对偏少,这种"强头部、长尾稀疏"的分布与真实道路采集场景一致,但也意味着训练时更容易出现对头部类别的过拟合倾向,尾部类别的召回提升更依赖数据增强、采样策略与损失权重的细致调节。另一方面,框中心分布热力图显示目标中心在垂直方向明显集中于画面中部附近,符合车载前视相机的透视成像规律;宽高分布呈现强烈的小框密集与长尾扩展,说明远距离小目标占比高、尺度跨度大,这对检测器的多尺度表征与小目标敏感性提出了更严格要求。

python
Chinese_name = {"biker": "骑手", "car": "汽车", "pedestrian": "行人", "trafficLight": "交通灯", "trafficLight-Green": "绿灯", "trafficLight-GreenLeft": "左转绿灯", "trafficLight-Red": "红灯", "trafficLight-RedLeft": "左转红灯", "trafficLight-Yellow": "黄灯", "trafficLight-YellowLeft": "左转黄灯", "truck": "卡车"}
在数据组织上,数据集按照训练/验证/测试三部分划分:训练集 23,800 张,验证集 3,000 张,测试集 3,000 张,保证模型选择、超参数调节与最终泛化评估之间的职责分离。标注采用 YOLO 体系的归一化矩形框格式(TXT),并将所有标注统一到同一类 ID 体系,便于在 YOLOv5--YOLOv12 的多版本训练与推理代码中无缝复用。预处理环节通常包括图像与标注的一致性校验(空标注、越界框、重复框清理)、尺寸与通道规范化(训练时按输入尺度进行缩放/填充)、以及面向道路长尾与小目标问题的数据增强(如 Mosaic、随机仿射、HSV 抖动与水平翻转等),以提升模型对遮挡、光照变化与尺度变化的鲁棒性;这些增强并不改变数据集的原始语义分布,但会显著影响尾部类别的有效梯度与收敛稳定性,为后续"同数据、同协议"的跨版本 YOLO 对比实验提供更可靠的训练基础。

📊 数据集规格说明 (Dataset Specification)
| 维度 | 参数项 | 详细数据 |
|---|---|---|
| 基础信息 | 标注软件 | LabelImg(项目默认;若实际使用 CVAT/Labelme 可在此处替换) |
| 标注格式 | YOLO TXT (Normalized) | |
| 数量统计 | 训练集 (Train) | 23,800 张(约 79.9%) |
| 验证集 (Val) | 3,000 张(约 10.1%) | |
| 测试集 (Test) | 3,000 张(约 10.1%) | |
| 总计 (Total) | 29,800 张 | |
| 类别清单 | Class ID: 0 | biker(骑手) |
| Class ID: 1 | car(汽车) |
|
| Class ID: 2 | pedestrian(行人) |
|
| Class ID: 3 | trafficLight(交通灯) |
|
| Class ID: 4 | trafficLight-Green(绿灯) |
|
| Class ID: 5 | trafficLight-GreenLeft(左转绿灯) |
|
| Class ID: 6 | trafficLight-Red(红灯) |
|
| Class ID: 7 | trafficLight-RedLeft(左转红灯) |
|
| Class ID: 8 | trafficLight-Yellow(黄灯) |
|
| Class ID: 9 | trafficLight-YellowLeft(左转黄灯) |
|
| Class ID: 10 | truck(卡车) |
|
| 图像规格 | 输入尺寸 | 640 × 640(训练/推理阶段统一缩放到网络输入) |
| 数据来源 | 自驾道路场景图像(以 SelfDriving_SIXU 命名样本为主,清洗后用于训练) |
3. 模型设计与实现
本系统的检测引擎以 YOLO 系列为主线,默认集成 YOLOv12n 作为"实时交互优先"的界面端基线,同时保留 YOLOv5--YOLOv11 的权重切换与对比能力,用于在同一输入与同一阈值配置下观察代际差异。老思在工程设计上刻意把"模型训练/推理细节"与"界面交互逻辑"解耦:模型侧统一抽象为 Detector,对外只暴露"载入权重---输入预处理---前向推理---后处理输出"四个稳定接口,从而让 YOLOv5 的锚框式头、YOLOv8 之后的 anchor-free split head,以及 YOLOv10 的 NMS-free 训练/推理路径都能在同一套 UI 行为下运行。(Ultralytics Docs)
从网络形态看,YOLO 检测器通常可分解为骨干网络、颈部特征融合与检测头三部分。YOLOv5 仍以 CSPDarknet 风格骨干为主体,通过 SPPF 扩大感受野,再用 PAN 进行多尺度融合,最终在多个尺度输出上用锚框头预测类别与边界框回归;其结构清晰、部署生态成熟,适合做工程化基线与对照组。(Ultralytics Docs) 随着版本迭代,Ultralytics 体系内的 YOLOv8 等模型更强调"解耦检测头"和 anchor-free 预测,使分类分支与回归分支的优化目标更集中,并降低锚框设计对数据集先验的依赖;这类结构在道路场景的尺度分布跨度较大时更容易获得稳定的训练行为。(Ultralytics Docs)
YOLOv10 的关键变化并不止于网络模块本身,而是将"去除 NMS 的端到端链路"明确作为目标之一:其一致性双标签分配将 one-to-many 与 one-to-one 两种匹配同时纳入训练,使模型在保持密集监督信号的同时获得可用于 NMS-free 推理的"一对一预测"分支,从系统时延角度更贴近自动驾驶的实时约束。(Ultralytics Docs) 进一步地,YOLOv12 以"注意力为中心"的框架重塑了实时检测器的表征方式,通过更高效的注意力机制(文档中强调 Area Attention 与 FlashAttention 等实现取舍)在尽量不牺牲推理速度的前提下提升特征表达能力;但官方文档也提示其作为偏研究向的社区模型,可能带来训练稳定性与显存占用方面的不确定性,因此系统实现上需要为不同硬件与部署形态保留回退到 YOLOv11/YOLOv10 等更稳态版本的通道。(Ultralytics Docs)
在任务建模与输出表征上,系统统一采用标准的矩形框检测形式。对单张输入图像 I ∈ R H × W × 3 I\in \mathbb{R}^{H\times W\times 3} I∈RH×W×3(界面端通常以 640 × 640 640\times 640 640×640 作为默认推理尺寸),检测头输出一组候选框 ( b i , s i , c i ) ∗ i = 1 N {(b_i, s_i, c_i)}*{i=1}^{N} (bi,si,ci)∗i=1N,其中边界框 b i = ( x i , y i , w i , h i ) b_i=(x_i,y_i,w_i,h_i) bi=(xi,yi,wi,hi) 通常在归一化坐标系下表达, s i s_i si 为置信度或类别分数, c i c_i ci 为类别索引。训练阶段的损失一般由分类损失与回归损失构成,锚框式 YOLO 常用 BCE 形式约束分类/目标性分支,并用 IoU 系列损失(如 CIoU)约束边界框几何一致性;在更偏 anchor-free 的实现中,回归分支常采用分布式回归并引入 Distribution Focal Loss(DFL)以提升定位精度。为便于跨版本复现,老思在代码侧将总损失抽象为
L = λ ∗ box L ∗ box + λ ∗ cls L ∗ cls + λ ∗ aux L ∗ aux , \mathcal{L}=\lambda*{\text{box}}\mathcal{L}*{\text{box}}+\lambda*{\text{cls}}\mathcal{L}*{\text{cls}}+\lambda*{\text{aux}}\mathcal{L}*{\text{aux}}, L=λ∗boxL∗box+λ∗clsL∗cls+λ∗auxL∗aux,
其中 L ∗ aux \mathcal{L}*{\text{aux}} L∗aux 用于容纳不同版本特有的附加项(例如分布式回归或端到端匹配相关的监督项),从而避免把训练脚本写死在某一代 YOLO 的细节假设里。
实现层面,推理流程被拆成与 UI 异步协作的四步:首先对来自摄像头/视频/图片的帧做 letterbox 缩放与通道排列,确保输入尺度与训练配置一致;随后执行前向推理得到多尺度预测张量;再按模型类型进入后处理分支------对于传统 YOLO 路线,执行置信度筛选与 NMS 得到最终框集合;对于具备 NMS-free 输出的模型,则直接取 one-to-one 分支或对应解码结果;最后把框、类别与置信度映射回原图坐标并交给 UI 绘制与统计模块。考虑到自动驾驶数据中小目标占比高(你给出的宽高分布与热力图也呈现明显的小框密集与长尾形态),后处理阶段在实现上还额外保留了对最小框尺寸与类别白名单的可配置过滤,以减少远距离噪声框对界面实时显示与统计稳定性的干扰。
网络整体架构图如下图所示(本文写作中引用为示意图,工程实现以对应版本的官方配置与权重为准):

在正则化与超参数的"模型侧默认项"上,本系统遵循 YOLO 系列的常规工程实践:骨干与颈部大量使用 Batch Normalization 以稳定梯度尺度,训练阶段以权重衰减约束参数范数,并保留 EMA(指数滑动平均)权重用于提升验证阶段的波动鲁棒性;分类分支可选用轻度标签平滑以缓解噪声标注对梯度的尖峰影响。与后续训练策略章节不同的是,这里所有设置都以"跨版本可复用"为优先级,避免因某一代 YOLO 的特化技巧导致 UI 端对比实验失去可比性。
4. 训练策略与模型优化
自动驾驶道路目标检测的训练难点往往不在"是否能收敛",而在于"是否能在长尾类别、小目标与复杂光照下稳定收敛,并把泛化误差压到可控范围"。结合你给出的数据分布图,car 的实例量远高于其他类别,且框宽高分布呈现明显的小框密集与长尾扩展,这会使优化过程天然偏向头部类别与中等尺度目标;因此老思在训练策略上把"稳定性"和"可比性"放在首位:同一数据划分、同一输入分辨率、同一评测协议,用尽可能一致的训练流程去对比 YOLOv5--YOLOv12 的代际差异,避免因为训练细节差异掩盖结构本身的收益。
训练环境以单卡 RTX 4090 为默认硬件基线,软件侧采用 Python 3.12 与 PyTorch/CUDA 生态,推理与训练均使用 AMP(自动混合精度)以提升吞吐并降低显存压力;对视频与摄像头场景的实时推理,训练阶段还会同步关注"端到端延迟"而非仅看 mAP。为保证复现,建议固定随机种子并记录关键版本信息(CUDA、cuDNN、PyTorch、Ultralytics/各版本 YOLO 仓库提交号),同时在日志中保存每轮的学习率、损失分量、mAP@50-95、F1 与 PR 曲线等,便于后续定位"收敛慢、振荡、过拟合"分别来自数据、学习率策略还是增强强度。
学习率与优化器方面,本项目默认采用 YOLO 体系常用的余弦退火并配合 warmup,使早期梯度更平滑、后期更利于收敛到较稳的极小值。以总轮数 T T T、当前轮数 t t t 表示,余弦学习率可写为
l r ( t ) = l r 0 ( l r f + ( 1 − l r f ) ⋅ 1 + cos ( π t / T ) 2 ) , lr(t)=lr_0\left(lrf+(1-lrf)\cdot\frac{1+\cos(\pi t/T)}{2}\right), lr(t)=lr0(lrf+(1−lrf)⋅21+cos(πt/T)),
其中 l r 0 lr_0 lr0 是初始学习率、 l r f lrf lrf 控制末端学习率占比;在 warmup 阶段(前若干轮)线性提升学习率与动量,有助于在检测任务的多分支损失下避免初期梯度爆发。由于你的类别分布呈长尾形态,训练中更容易出现尾部类别召回不足的现象,工程上通常会通过更稳健的增强组合(而非一味加大增强幅度)来提升尾部有效样本的覆盖,同时在验证集上用早停抑制过拟合,使模型选择更偏向"可泛化的稳态点"。
数据增强策略围绕道路场景的真实扰动构建。默认启用 Mosaic、随机仿射与颜色扰动等增强以提高尺度与布局的多样性,但在训练后期关闭 Mosaic(close_mosaic)能减少分布偏移,让模型在更接近真实帧的输入上完成收敛"定型"。对小目标占比高的数据,保持输入分辨率为 640 并启用多尺度训练通常更稳;当显存允许时可以适度提高 imgsz,但必须同步评估推理端 FPS 的下降幅度,否则会与系统"实时交互"的目标冲突。与增强并行的正则化手段主要依赖权重衰减与 EMA(指数滑动平均)权重:EMA 能显著降低验证曲线波动,对道路数据中常见的光照、阴影、反光引入的短周期噪声更友好。
训练默认超参数(4090 单卡基线)
| 名称 | 作用(简述) | 数值 |
|---|---|---|
| epochs | 最多训练轮数 | 120 |
| patience | 早停耐心(验证无提升则停止) | 50 |
| batch | 每次迭代总批大小 | 16 |
| imgsz | 网络输入分辨率(方形) | 640 |
| pretrained | 是否加载预训练权重 | true |
| optimizer | 优化器类型 | auto |
| lr0 | 初始学习率 | 0.01 |
| lrf | 最终学习率占比(余弦底值) | 0.01 |
| momentum | 动量系数 | 0.937 |
| weight_decay | 权重衰减 | 0.0005 |
| warmup_epochs | 学习率预热轮数 | 3.0 |
| mosaic | Mosaic 增强强度/概率 | 1.0 |
| close_mosaic | 训练后期关闭 Mosaic 的轮数 | 10 |
模型优化分为训练侧与部署侧两条线并行推进。训练侧的优化重点是"让不同代 YOLO 在相同条件下公平比较":统一输入尺度与增强策略,统一置信度阈值与 IoU/NMS 设置(对具备 NMS-free 推理的模型则固定其解码策略),并在相同验证集上选取最优 checkpoint;同时针对长尾类别,可在不改变评测协议的前提下做轻量的采样与增强调度(例如在后半程降低强增强比例、增加原始帧分布占比),以提升尾部类别的稳定召回。部署侧则围绕系统实时性做"可控加速":导出 ONNX 并用 TensorRT 构建 FP16 引擎通常是 4090 上最直接的收益来源;若需要进一步压缩延迟,可以在保持精度可接受的前提下尝试 INT8 量化(需校准集),并配合算子融合与静态输入尺寸来减少图执行开销。老思的建议是先用 FP16 TensorRT 达到稳定实时基线,再根据 UI 实测的端到端延迟(含解码与绘制)决定是否引入更激进的量化与裁剪策略,以避免"算子更快但误检/漏检上升"对自动驾驶场景造成不必要的风险敞口。
5. 实验与结果分析
本节围绕"同一数据、同一训练协议、同一评测脚本"的原则,对 YOLOv5 至 YOLOv12 在自动驾驶数据集上的检测性能与端侧代价进行系统对比。实验分为两组:其一是轻量化的 n/nu/tiny 级模型(更贴近界面端实时推理),其二是 s 级模型(在可接受算力开销下追求更高精度)。训练阶段统一采用 i m g s z = 640 imgsz=640 imgsz=640、 e p o c h s = 120 epochs=120 epochs=120、 b a t c h = 16 batch=16 batch=16,并保持增强策略与损失配置一致,以尽量将差异归因于模型结构与训练范式的代际变化。推理耗时统计来自同一硬件环境(日志中记录为 NVIDIA GeForce RTX 3070 Laptop GPU, 8GB),并拆分为预处理、前向推理与后处理三段时间,以便直接对应系统端"摄像头/视频流实时检测"的端到端体验。
为了在 UI 端确定更合理的默认阈值配置,本文首先基于验证集绘制了 F1-Confidence 曲线。曲线显示整体 F1 在置信度阈值约 0.255 0.255 0.255 附近取得峰值(all classes F1≈0.82),随后随着阈值继续升高出现明显下滑,这说明该数据集中存在大量"小目标、远距离目标或遮挡目标",这些目标往往只能给出中等置信度的预测;若阈值设置过高,召回会迅速下降,导致系统在真实道路视频中表现为"目标忽隐忽现"。因此,老思在系统界面默认将 conf 设在 0.25 0.25 0.25 左右作为较稳的起点,并允许用户根据场景(白天/夜晚、雨雾、交通灯密集程度)在 UI 中动态调整。

在总体精度层面,Precision--Recall 曲线给出了更直观的类别差异。该结果中 all classes 的 m A P @ 0.5 ≈ 0.845 mAP@0.5\approx 0.845 mAP@0.5≈0.845,其中 truck(0.921)、trafficLight(0.917)、car(0.900)等类别的曲线更靠近右上角,表明其外观稳定、样本量相对充足且可分性强;相对困难的是 trafficLight-Yellow(0.702),其 PR 曲线下降更早,反映出"黄灯样本偏少、与红/绿灯外观差异细微、且目标尺度更小"的叠加效应,容易出现误检与漏检并存的现象。对自动驾驶而言,交通灯状态属于高风险语义目标,这一结果也提示后续优化应优先围绕"细粒度灯色"做样本再平衡、针对性增强(局部放大、Copy-Paste、曝光扰动)或采用更高分辨率推理以提升远距离灯色辨识能力。

训练过程的收敛曲线进一步说明了上述现象的来源。训练/验证的 box_loss、cls_loss 与 dfl_loss 随 epoch 稳定下降,precision 与 recall 在前期快速上升后进入缓慢爬升阶段, m A P 50 mAP50 mAP50 与 m A P 50 - 95 mAP50\text{-}95 mAP50-95 均呈现"先快后慢"的典型收敛形态,且验证损失未出现明显反弹,整体过拟合迹象不强。这种较平稳的曲线通常意味着:数据增强强度与学习率调度基本匹配,模型主要瓶颈来自小目标与细粒度类别的可分性,而非训练不稳定或标注噪声导致的异常振荡。

在 n/nu/tiny 级模型对比中,表 5-1 汇总了参数量、计算量、端到端速度(含预/推理/后处理)与精度指标。可以看到,YOLOv7-tiny 在该数据集上取得了显著更高的 F1(0.857)与 m A P 50 mAP50 mAP50(0.848),说明适度增加模型容量与特征融合能力对"远距离小目标 + 道路遮挡"的收益非常直接;但其推理链路整体耗时更高(后处理开销也更大),在实时 UI 场景中更容易成为瓶颈。相对而言,YOLOv12n 在轻量模型中给出了更均衡的折中:相较 YOLOv5nu, m A P 50 mAP50 mAP50 提升约 0.050、 m A P 50 - 95 mAP50\text{-}95 mAP50-95 提升约 0.052,同时召回也有提升,但代价是总耗时增加约 4.81ms;当系统目标是"视频流稳定 60FPS 左右并保持较高精度"时,YOLOv12n/YOLOv10n 往往比"极致轻量但精度偏低"的配置更合适,而 YOLOv8n 则更适合追求极限帧率的场景。
表 5-1 n/nu/tiny 级模型在 SelfDriving 数据集上的对比(同一评测环境)
| 模型 | Params(M) | FLOPs(G) | 总耗时(ms) | FPS | Precision | Recall | F1 | mAP50 | mAP50-95 |
|---|---|---|---|---|---|---|---|---|---|
| YOLOv5nu | 2.6 | 7.7 | 10.94 | 91.41 | 0.871 | 0.627 | 0.729 | 0.710 | 0.428 |
| YOLOv6n | 4.3 | 11.1 | 10.34 | 96.71 | 0.871 | 0.626 | 0.728 | 0.715 | 0.447 |
| YOLOv7-tiny | 6.2 | 13.8 | 21.08 | 47.44 | 0.903 | 0.816 | 0.857 | 0.848 | 0.527 |
| YOLOv8n | 3.2 | 8.7 | 10.17 | 98.33 | 0.870 | 0.648 | 0.743 | 0.730 | 0.446 |
| YOLOv9t | 2.0 | 7.7 | 19.67 | 50.84 | 0.880 | 0.627 | 0.733 | 0.733 | 0.438 |
| YOLOv10n | 2.3 | 6.7 | 13.95 | 71.68 | 0.873 | 0.645 | 0.742 | 0.744 | 0.470 |
| YOLOv11n | 2.6 | 6.5 | 12.97 | 77.10 | 0.856 | 0.660 | 0.745 | 0.728 | 0.457 |
| YOLOv12n | 2.6 | 6.5 | 15.75 | 63.49 | 0.876 | 0.658 | 0.751 | 0.761 | 0.480 |

从训练动态看,n 级模型的 m A P 50 mAP50 mAP50 随 epoch 的爬升存在明显的"早期快速收敛 + 后期小幅增益"特征,其中 YOLOv12n 的曲线整体位于上包络附近,说明其在相同训练轮次内更容易达到更高的稳定点;这与平均 PR 曲线的结果是一致的,YOLOv12n 的平均 PR 曲线在中高召回区间保持了更高 precision,体现为更强的泛化边界。

在 s 级模型对比中,精度整体上移非常明显(多数模型 m A P 50 mAP50 mAP50 达到 0.84--0.87),这是模型容量提升带来的直接收益:更强的骨干特征表达与更丰富的多尺度融合能够更好覆盖"远处小车/行人"与"近处大车"共存的尺度跨度。表 5-2 显示 YOLOv7(非 tiny)在该组别取得最高 m A P 50 mAP50 mAP50(0.872)与 F1(0.886),但其参数量与 FLOPs 极高,且总耗时显著上升;与之相比,YOLOv10s 的 m A P 50 mAP50 mAP50 仅低约 0.0045、 m A P 50 - 95 mAP50\text{-}95 mAP50-95 低约 0.026,却将总耗时降低约 15.33ms,工程意义更强。这类结果在自动驾驶系统里非常典型:当精度差距已经很小,端到端时延、稳定帧率与可部署性往往成为更关键的选型指标,因此老思更倾向将 YOLOv10s/YOLOv11s 作为"精度优先但仍可实时"的推荐配置,把 YOLOv7 作为"离线评测上限"或"高精度对照组"。
表 5-2 s 级模型在 SelfDriving 数据集上的对比(同一评测环境)
| 模型 | Params(M) | FLOPs(G) | 总耗时(ms) | FPS | Precision | Recall | F1 | mAP50 | mAP50-95 |
|---|---|---|---|---|---|---|---|---|---|
| YOLOv5su | 9.1 | 24.0 | 12.24 | 81.70 | 0.740 | 0.818 | 0.777 | 0.837 | 0.512 |
| YOLOv6s | 17.2 | 44.2 | 12.26 | 81.57 | 0.908 | 0.740 | 0.815 | 0.814 | 0.542 |
| YOLOv7 | 36.9 | 104.7 | 29.52 | 33.88 | 0.915 | 0.858 | 0.886 | 0.872 | 0.595 |
| YOLOv8s | 11.2 | 28.6 | 11.39 | 87.80 | 0.826 | 0.759 | 0.791 | 0.839 | 0.519 |
| YOLOv9s | 7.2 | 26.7 | 22.17 | 45.11 | 0.877 | 0.765 | 0.817 | 0.843 | 0.522 |
| YOLOv10s | 7.2 | 21.6 | 14.19 | 70.47 | 0.886 | 0.780 | 0.829 | 0.867 | 0.569 |
| YOLOv11s | 9.4 | 21.5 | 13.47 | 74.24 | 0.930 | 0.772 | 0.844 | 0.864 | 0.569 |
| YOLOv12s | 9.3 | 21.4 | 16.74 | 59.74 | 0.863 | 0.795 | 0.828 | 0.845 | 0.566 |

进一步观察 s 级模型的 m A P 50 mAP50 mAP50--epoch 曲线与平均 PR 曲线,YOLOv10s 与 YOLOv11s 在中后期的曲线整体更贴近上包络,说明其在相同训练轮次内更容易获得稳定增益;而 YOLOv12s 在该组别并未表现出对 YOLOv10s/YOLOv11s 的优势,结合数据集"交通灯细粒度长尾"的特征,较合理的解释是:当模型容量达到一定水平后,性能瓶颈更多由类别边界的细粒度与样本分布决定,结构升级带来的边际收益会被长尾噪声与小目标可见性所限制。

综合以上结果,如果以"桌面端 PySide6 实时检测系统"为目标,轻量组更推荐 YOLOv10n/YOLOv12n 作为默认模型,并保留 YOLOv7-tiny 作为高精度选项用于离线评测或关键场景复核;若场景允许更高算力预算且希望显著提升小目标与细粒度类别的上限,则 s 级模型中 YOLOv10s/YOLOv11s 在精度与时延之间呈现更合理的折中。对交通灯黄灯等弱类,后续最有效的优化往往不是继续换更大的模型,而是围绕数据再平衡与"面向小目标"的增强与分辨率策略做定向改造,这一点也与前文数据集分布分析形成闭环。
6. 系统设计与实现
6.1 系统设计思路
本系统面向"自动驾驶目标检测的工程可复现与桌面端可交互展示"两类需求,整体采用 Python 3.12 + PySide6 + SQLite 的组合实现:PySide6 负责事件驱动的 GUI 与多源输入交互,YOLOv5--YOLOv12 负责目标检测推理,SQLite 则承担账号体系、个性化配置与检测结果的持久化。老思在设计中刻意将"UI 行为"与"模型推理细节"解耦,避免不同代 YOLO 的推理接口差异渗透到界面层,从而使模型切换、阈值调节、结果导出等功能在版本升级时保持稳定。

系统采用典型的三层对象组合:Ui_MainWindow 负责控件布局与视觉资源(按钮、标签、表格、主题皮肤与图标加载),MainWindow 负责控制层调度(槽函数、状态机、输入源切换、日志与进度管理),Detector 负责处理层(权重加载、预处理、推理、后处理与结果结构化)。跨层通信以 Qt 信号-槽为主,推理端通过 QThread 或 QRunnable 将耗时计算从主线程剥离,避免视频/摄像头流造成界面卡顿;UI 线程仅接收结构化结果(检测框、类别、置信度、统计信息、FPS),并完成绘制与表格刷新,保证交互的即时性与可维护性。
围绕实际使用场景,系统对输入源做了统一抽象:摄像头帧、视频逐帧、单图与文件夹批量在进入 Detector 前均被映射为同一"帧对象流",预处理统一执行 letterbox 缩放与坐标回映射,后处理在 NMS 与 NMS-free 两类路径间自动分流,使 YOLOv10/YOLOv12 等模型可以与传统 YOLO 版本并存。结果侧提供两条落盘路径:一是导出可视化图片/视频与结构化 JSON/CSV,二是写入 SQLite(按用户隔离),用于后续检索、筛选、统计与复现实验对照;主题修改功能同样作为用户配置的一部分入库,使"模型偏好、阈值、主题风格、历史结果"在不同会话间保持一致。
图 系统流程图

图注:系统从初始化到多源输入,完成预处理、推理与界面联动,并通过交互形成闭环。
6.2 登录与账户管理

登录与账户管理被设计为检测主流程的"前置门控与持久化枢纽":用户在登录/注册阶段完成身份校验与空间初始化,系统随即从 SQLite 载入该用户的模型偏好、阈值参数与主题配置,并恢复历史检测记录与导出索引,使主界面一进入即可处于可用状态;在使用过程中,用户对头像、密码与主题风格的修改会即时回写数据库并与检测结果一起形成可追溯的个人工作区,从而保证"不同用户共享同一套程序但互不干扰",同时让模型切换对比、阈值调参、结果导出与后续检索在一次次会话中连续积累,避免每次启动都重复配置,提升系统演示与真实使用场景下的稳定体验。

7. 下载链接
若您想获得博文中涉及的实现完整全部资源文件 (包括测试图片、视频,py, UI文件,训练数据集、训练代码、界面代码等),这里见可参考博客与视频,已将所有涉及的文件同时打包到里面,点击即可运行,完整文件截图如下:

完整资源中包含数据集及训练代码,环境配置与界面中文字、图片、logo等的修改方法请见视频:➷➷➷
详细介绍文档博客: YOLOv5至YOLOv12升级:交通标志识别系统的设计与实现(完整代码+界面+数据集项目)
环境配置博客教程:(1)Pycharm软件安装教程;(2)Anaconda软件安装教程;(3)Python环境配置教程;
或者环境配置视频教程:(1)Pycharm软件安装教程;(2)Anaconda软件安装教程;(3)Python环境依赖配置教程
数据集标注教程(如需自行标注数据):数据标注合集
8. 参考文献(GB/T 7714)
1 Dalal N, Triggs B. Histograms of Oriented Gradients for Human Detection[C]//Proceedings of the IEEE Computer Society Conference on Computer Vision and Pattern Recognition (CVPR). 2005: 886-893.
2 Ren S, He K, Girshick R, Sun J. Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks[C]//Advances in Neural Information Processing Systems (NeurIPS). 2015: 91-99.
3 Liu W, Anguelov D, Erhan D, et al. SSD: Single Shot MultiBox Detector[C]//Computer Vision -- ECCV 2016. Lecture Notes in Computer Science, vol 9905. Springer, 2016: 21-37.
4 Lin T Y, Goyal P, Girshick R, He K, Dollár P. Focal Loss for Dense Object Detection[C]//Proceedings of the IEEE International Conference on Computer Vision (ICCV). 2017: 2980-2988.
5\] Carion N, Massa F, Synnaeve G, et al. End-to-End Object Detection with Transformers\[C\]//Computer Vision -- ECCV 2020. Springer, 2020: 213-229. \[6\] Geiger A, Lenz P, Urtasun R. Are we ready for Autonomous Driving? The KITTI Vision Benchmark Suite\[C\]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (CVPR). 2012: 3354-3361. \[7\] Yu F, Chen H, Wang X, et al. BDD100K: A Diverse Driving Dataset for Heterogeneous Multitask Learning\[C\]//Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR). 2020. \[8\] Caesar H, Bankiti V, Lang A H, et al. nuScenes: A Multimodal Dataset for Autonomous Driving\[C\]//Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR). 2020. \[9\] 茅智慧, 朱佳利, 吴鑫, 李君. 基于YOLO的自动驾驶目标检测研究综述\[J\]. 计算机工程与应用, 2022, 58(15): 68-77. \[10\] Jocher G, et al. YOLOv5 by Ultralytics\[EB/OL\]. Zenodo, 2020. DOI:10.5281/zenodo.3908559. \[11\] Li C, Zhang B, Li L, et al. YOLOv6: A Single-Stage Object Detection Framework for Industrial Applications\[J/OL\]. arXiv:2209.02976, 2022. \[12\] Wang C Y, Bochkovskiy A, Liao H Y M. YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors\[C\]//Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR). 2023: 7464-7475. \[13\] Wang C Y, et al. YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information\[J/OL\]. arXiv:2402.13616, 2024. \[14\] Wang A, Chen H, Liu L, et al. YOLOv10: Real-Time End-to-End Object Detection\[C\]//Advances in Neural Information Processing Systems (NeurIPS). 2024. \[15\] Tian Y, Ye Q, Doermann D S. YOLOv12: Attention-Centric Real-Time Object Detectors\[J/OL\]. arXiv:2502.12524, 2025.