摘要 :面向智慧交通与自动驾驶场景,交通信号灯识别 需要在复杂光照、远距离小目标、遮挡与雨雾等条件下保持稳定的检测与状态判别能力。博主在本文中围绕"YOLOv5 至 YOLOv12 的算法升级与工程落地 "展开,系统性给出一个可复现实用的交通信号灯识别项目:一方面,梳理并实现 YOLOv5n(u)、YOLOv6n、YOLOv7-tiny、YOLOv8n、YOLOv9t、YOLOv10n、YOLO11n、YOLOv12n 等多代模型在同一数据集与统一评估协议下的训练与推理流程,提供 mAP、F1、PR 曲线与训练曲线等可视化对比 ,用于分析不同版本在速度、精度与泛化上的差异;另一方面,基于 PySide6 设计可交互的桌面端识别系统,支持图片/视频/摄像头多源输入、阈值(Conf/IoU)调节、检测框与类别统计展示、结果保存与导出,并引入 SQLite 完成注册登录、用户配置与历史记录持久化管理。本文同时公开完整代码、界面工程与数据集构建/标注/划分脚本,以便读者在真实交通场景中快速复现、二次开发与扩展部署。
文章目录
- [1. 前言综述](#1. 前言综述)
- [2. 数据集介绍](#2. 数据集介绍)
- [3. 模型设计与实现](#3. 模型设计与实现)
- [4. 训练策略与模型优化](#4. 训练策略与模型优化)
- [5. 实验与结果分析](#5. 实验与结果分析)
-
- [5.1 实验设置与对比基线](#5.1 实验设置与对比基线)
- [5.2 度量指标与统计口径](#5.2 度量指标与统计口径)
- [5.3 单模型收敛性、阈值选择与类别表现](#5.3 单模型收敛性、阈值选择与类别表现)
- [6. 系统设计与实现](#6. 系统设计与实现)
-
- [6.1 系统设计思路](#6.1 系统设计思路)
- [6.2 登录与账户管理](#6.2 登录与账户管理)
- [7. 下载链接](#7. 下载链接)
- [8. 参考文献(GB/T 7714)](#8. 参考文献(GB/T 7714))
1. 前言综述
智能交通与自动驾驶对环境感知的实时性与可靠性提出了更高要求,而交通信号灯识别属于典型的"强时序约束、强安全约束"的视觉任务,其输出将直接影响车辆在路口场景中的决策与控制闭环1。在工程落地层面,交通信号灯不仅需要被检测到"在哪里",还需要被判别"是什么状态",并在跨城市、跨路口形态与跨摄像头成像差异下保持一致性能1。这些因素决定了该任务既是目标检测问题,也是细粒度状态识别问题,其系统指标往往由最困难的长尾场景主导,而非由平均路况决定。
交通信号灯在道路图像中通常呈现为远距离小目标,易受遮挡、逆光眩光、雨雾散射、LED 频闪与背景高亮干扰影响,且灯组结构与灯色语义在不同国家/地区存在差异,导致"同类异形、异类同形"的判别风险显著增大2。为解决上述问题,研究社区从早期的颜色分割与几何约束逐步转向端到端学习范式,并在公开数据集与统一评测上形成了可复现的比较基础2。(Tony Hou)
从方法演进看,两阶段检测器通过候选区域生成与分类回归解耦,在复杂背景下具备更强的定位能力,典型代表如 Faster R-CNN3。但在车载与路侧实时推理约束下,一阶段检测器凭借更紧凑的计算图和更低的后处理复杂度更易达到低时延目标,SSD 作为经典一阶段框架在工程界具有代表性4。YOLO 系列将检测建模为单次前向的密集预测,强化了速度与精度的可折中性,使其逐步成为交通场景实时检测的主流选择之一[5]。为进一步提升小目标的可检出性,多尺度特征融合被证明是关键环节,FPN 通过自顶向下与横向连接构建金字塔特征表示,显著改善了不同尺度目标的表征一致性[6];针对密集小目标与前景稀疏的不平衡问题,Focal Loss 通过重加权机制抑制易分类样本对梯度的主导效应,从而提升难样本学习效率[7]。(CV Foundation)
近几年,YOLO 的迭代路线更强调在端到端可部署前提下扩展网络表征能力与训练稳定性,其中 YOLOv7 在网络设计与训练策略上系统化地提升了实时检测的精度上界并保持可观吞吐[10]。与此同时,围绕梯度路径与学习目标可控性的研究推动了 YOLOv9 的提出,使得模型更聚焦于"需要学到的内容",从而改善特征学习效率与可迁移性[11]。YOLOv10 则进一步朝向端到端与低延迟边界推进,通过与 NMS 相关的训练与设计改造降低后处理依赖,以获得更好的速度---精度折中[12];在注意力机制逐步成为视觉主流表征的背景下,YOLOv12 尝试以注意力为中心构建实时检测框架,在保持延迟竞争力的同时获得更强的建模能力[13]。(CVF Open Access)
除模型结构之外,数据与评测同样决定算法上限。DriveU Traffic Light Dataset(DTLD)以大规模标注与多城市、多天气采集为特征,显著增强了交通信号灯研究的统计稳定性与场景覆盖,成为衡量模型泛化能力的重要基准之一[8]。面向高分辨率街景中的微小交通信号,基于视觉注意力的两阶段框架通过先在低分辨率上生成候选关注区域、再在高分辨率上精定位与分类,从计算开销与小目标召回之间取得更均衡的折中,并构建了面向交通灯的街景基准用于评测[9]。在更贴近落地需求的研究中,针对灯组布局差异带来的识别偏差,有工作提出直接对"单个发光单元"进行检测与识别的思路,并结合颜色增强与集成学习提升鲁棒性[14];国内研究也围绕轻量化与小目标特性对 YOLOv5 进行结构裁剪与特征融合改进,在公开数据集上展示了精度与速度的同步收益[15]。(ResearchGate)
下面表格对交通信号灯检测识别的代表性路线作简要梳理,以"算法范式---数据集---优势与局限"的结构呈现近年研究的关键取舍。
| 方法范式 | 代表性工作与核心思路 | 常用数据集/评测 | 优势 | 局限与改进方向 |
|---|---|---|---|---|
| 综述与传统视觉(颜色/几何/学习器) | 系统梳理问题定义、评测与挑战1 | LISA/VIVA 等历史基准(综述覆盖) | 可解释性较强,易做规则约束 | 对复杂光照与长尾形态敏感,跨域泛化弱1 |
| 两阶段检测 | Faster R-CNN(候选---分类回归解耦)3 | 多类通用检测基准 | 定位能力强,复杂背景更稳 | 端到端低延迟部署难,需结构与算子优化3 |
| 一阶段检测(早期) | SSD(密集预测、轻量化)4 | 通用检测基准 | 推理路径短,工程实现成熟 | 小目标召回与尺度不变性仍依赖特征融合4 |
| 一阶段检测(YOLO 路线) | YOLO(单次前向密集预测)[5] | 通用检测基准 | 速度优势显著,适合实时场景 | 交通灯远距小目标需更强多尺度与先验约束[5] |
| 多尺度特征融合 | FPN(自顶向下金字塔融合)[6] | 通用检测基准 | 提升跨尺度表征一致性 | 仍需与任务先验结合以抑制背景误检[6] |
| 类别不均衡与难样本学习 | Focal Loss(抑制易样本梯度)[7] | 密集检测任务 | 提升难样本学习效率 | 需与标签分配与采样策略协同,否则收益受限[7] |
| 大规模交通灯数据集 | DTLD(多城市、多天气、海量标注)[8] | DTLD | 评测更稳定,泛化分析更充分 | 类别细分与标签噪声仍会影响训练上界[8] |
| 小目标街景注意力框架 | 注意力候选区域 + 高分辨率精检[9] | TTTL/TT100K/LISA | 降计算开销同时提升小目标定位 | 关注区域召回不足会形成系统性漏检[9] |
| 最新 YOLO 迭代(v7/v9/v10/v12) | 训练与结构协同优化[10];梯度可编程学习目标[11];端到端低延迟设计[12];注意力中心实时检测[13] | 通用基准 + 任务数据集 | 速度---精度边界持续推进 | 仍需面向交通灯的状态判别与域偏移专门处理[10-13] |
| 交通灯任务专门增强 | 颜色增强 + 集成学习[14];改进 YOLOv5 的小目标与速度折中[15] | 任务数据集(含 LaRA 等) | 提升实际可用性与鲁棒性 | 需更系统的数据闭环与可复现工程管线[14-15] |
综合上述进展,交通信号灯识别系统仍面临若干共性技术难点:其一,小目标与远距离导致特征信噪比低,模型更容易在"召回率---误检率"之间出现尖锐权衡;其二,灯色语义与灯组结构存在区域差异,单纯依赖检测框级别分类容易产生结构性偏差;其三,车载与路侧部署要求稳定低延迟,模型升级必须与推理栈、后处理与界面交互形成一致的工程约束。基于此,老思将在本文围绕 YOLOv5 至 YOLOv12 的迭代脉络,给出一套面向交通信号灯的可复现实战项目:在同一数据与评测协议下对不同 YOLO 版本进行对比,构建并标注任务数据集并提供完整预处理与划分脚本,基于 PySide6 实现可视化检测与参数交互的桌面端系统界面,并整理可直接运行的代码与资源包以支持复现与二次开发。
主要功能演示:
(1)启动与登录:系统启动后首先进入登录界面,用户可完成注册、登录与密码修改等操作;登录成功后载入该用户的历史检测记录与个性化配置(如阈值、默认模型、主题样式),并跳转至主检测界面,保证多用户场景下的数据隔离与配置持久化。

(2)多源输入与实时检测(摄像头/视频/图片/文件夹):主界面提供统一的输入入口,支持摄像头实时流、离线视频文件、单张图片以及图片文件夹批处理;推理过程中同步展示检测框、类别(绿灯/红灯/黄灯)与置信度,并提供播放控制与结果保存导出,便于在同一界面内完成"输入---检测---复核---留存"的闭环。

(3)模型选择与对比演示:系统内置 YOLOv5--YOLOv12 多版本权重管理与快速切换能力,用户可在界面上选择不同模型对同一输入进行推理,以一致的阈值与后处理策略展示差异;在对比模式下,可进一步呈现关键指标或耗时统计(如单帧延迟、平均 FPS),用于直观评估不同版本在精度与实时性上的取舍。

(4)主题修改功能:为提升长时间使用的可读性与交互一致性,系统提供主题切换与界面风格自定义(如浅色/深色主题、强调色、背景与图标替换、字号与控件样式微调),主题配置随账户保存并在下次启动自动恢复,从而实现"功能不变、体验可调"的界面适配。

2. 数据集介绍
本项目面向交通信号灯状态识别任务构建数据集,共包含 20,841 张图像,按照训练/验证/测试划分为 18,207 / 1,755 / 879 张,划分比例约为 87.36% / 8.42% / 4.22%。数据以"目标检测 + 状态分类"的方式进行标注:每个交通信号灯目标采用矩形框标注,并赋予三类状态标签,分别对应 green(绿灯)、red(红灯)、yellow(黄灯)。从样例图可以观察到,数据覆盖了白天与夜间、逆光高亮、噪声干扰以及不同拍摄距离与视角等情况,交通灯在画面中多呈现为远距离小目标,这使得数据更贴近真实部署时的感知难点,也对检测器的小目标表征与抗干扰能力提出更高要求。

python
Chinese_name = {'green': "绿灯", 'red': "红灯", "yellow": "黄灯"}
从标签统计图可以看出,三类样本数量存在明显不均衡,红灯与绿灯实例数量显著高于黄灯;这类长尾分布会使模型在训练中更倾向于拟合高频类别,从而在黄灯等低频状态上出现召回不足。与此同时,目标框中心点分布在画面中部区域更为密集,但仍存在较大范围的离散分布,说明系统需要兼顾"典型路口构图"与"非标准构图"两类输入;框的宽高分布与相关性图也提示多数目标属于小尺度且具有较强的形状先验(细长或近矩形),这会放大输入分辨率、特征金字塔与标签分配策略对性能的影响。老思在后续实验中将该数据集作为统一评测基准,用于对 YOLOv5--YOLOv12 的精度、速度与鲁棒性进行可复现对比,并为界面端的多源输入推理提供一致的数据闭环支撑。

📊 数据集规格说明 (Dataset Specification)
| 维度 | 参数项 | 详细数据 |
|---|---|---|
| 基础信息 | 标注软件 | LabelImg |
| 标注格式 | YOLO TXT (Normalized) | |
| 数量统计 | 训练集 (Train) | 18,207 张 (87.36%) |
| 验证集 (Val) | 1,755 张 (8.42%) | |
| 测试集 (Test) | 879 张 (4.22%) | |
| 总计 (Total) | 20,841 张 | |
| 类别清单 | Class ID: 0 | green(绿灯) |
| Class ID: 1 | red(红灯) |
|
| Class ID: 2 | yellow(黄灯) |
|
| 图像规格 | 输入尺寸 | 640 × 640 |
| 数据来源 | 实地采集/视频抽帧样本为主(含多光照与噪声场景) |
3. 模型设计与实现
交通信号灯识别在本文中被建模为单阶段目标检测任务:给定输入图像 I ∈ R H × W × 3 I\in\mathbb{R}^{H\times W\times 3} I∈RH×W×3(工程实现中统一缩放到 640 × 640 640\times640 640×640),模型一次前向同时输出候选框集合 b i {b_i} bi、类别分布 p i {p_i} pi 与置信度 s i {s_i} si,其中类别空间为 green , red , yellow {\texttt{green},\texttt{red},\texttt{yellow}} green,red,yellow,并在界面端映射为"绿灯/红灯/黄灯"。该建模的优势在于推理链路短、吞吐稳定,能够自然适配摄像头视频流的实时处理;代价则是需要在网络结构与特征融合上更偏向"小目标、弱纹理、强光照扰动"的场景特性,例如远距离信号灯在整幅图像中仅占极少像素,误检往往来自高亮反光、车灯与广告牌等"伪灯色"区域。
基线模型方面,老思将 YOLOv12n 作为默认主模型,用于系统的实时检测与UI交互演示;其原因并不在于一味追求更大模型的精度上限,而是希望在保证可视化实时性的前提下,引入更强的全局建模能力。YOLOv12 的核心思想是将注意力机制"可实时化",在保持 YOLO 系列低时延优势的同时,利用注意力在长程依赖建模上的潜在收益;具体做法包括引入 Area Attention (将特征图划分为若干区域以降低注意力代价)、采用 R-ELAN 改善特征聚合与优化稳定性,并结合 FlashAttention 等工程化优化以降低注意力的内存访问开销。

从整体结构上看,本系统对 YOLO 家族采用统一的"Backbone--Neck--Head"三段式抽象:Backbone 负责多层级特征提取,Neck 负责跨尺度融合以提升小目标可检出性,Head 负责在多尺度特征上进行类别与位置回归预测。以 YOLOv5 为例,其典型结构由 CSP 风格骨干网络、FPN/PAN 融合与三尺度检测头组成,如图所示(用于帮助读者理解 YOLO 的通用骨架;后续 YOLOv12 的差异主要发生在骨干/融合模块对注意力的引入方式)。
- YOLOv5 结构示意图(可直接下载):https://softwarediagrams.com/assets/generated/diagrams/2024/05/16/ultralytics/1.webp
- YOLOv12 速度--精度权衡示意(可直接下载):https://raw.githubusercontent.com/sunsmarterjie/yolov12/main/assets/tradeoff_turbo.svg
- YOLOv12 对比可视化图(可直接下载):https://cdn.jsdelivr.net/gh/ultralytics/assets@main/docs/yolo12-comparison-visualization.avif
YOLOv12 中最值得单独说明的是 Area Attention 的动机与形式。标准自注意力可写为
A t t n ( Q , K , V ) = s o f t m a x ! ( Q K ⊤ d ) V , \mathrm{Attn}(Q,K,V)=\mathrm{softmax}!\left(\frac{QK^\top}{\sqrt{d}}\right)V, Attn(Q,K,V)=softmax!(d QK⊤)V,
若将空间维度展平成 N = H ⋅ W N=H\cdot W N=H⋅W 个 token,则计算复杂度与内存访问在 N N N 上呈二次增长。Area Attention 通过将特征图划分为 l l l 个等大小区域(默认 l = 4 l=4 l=4),并在区域内进行注意力计算,使每个区域 token 数约为 N / l N/l N/l,从而将注意力的主要计算量由 O ( N 2 ) O(N^2) O(N2) 下降到 O ! ( l ⋅ ( N / l ) 2 ) = O ( N 2 / l ) O!\left(l\cdot (N/l)^2\right)=O(N^2/l) O!(l⋅(N/l)2)=O(N2/l),在尽量保持大感受野的同时显著降低代价。对于交通信号灯这类"小目标 + 易受全局光照影响"的任务,这类区域化注意力往往比纯卷积更容易捕获"背景高亮---灯色区域"的上下文关系,但又不会把注意力的计算成本推到不可实时的程度。(GitHub)
在训练目标上,本文沿用 YOLO 系列常见的多任务损失,将分类、定位与目标性统一优化。分类分支通常采用二元交叉熵形式(对每一类做 sigmoid):
L ∗ c l s = − ∑ ∗ c = 1 C [ y c log σ ( z c ) + ( 1 − y c ) log ( 1 − σ ( z c ) ) ] , \mathcal{L}*{cls}=-\sum*{c=1}^{C}\big[y_c\log\sigma(z_c)+(1-y_c)\log(1-\sigma(z_c))\big], L∗cls=−∑∗c=1C[yclogσ(zc)+(1−yc)log(1−σ(zc))],
其中 z c z_c zc 为第 c c c 类 logit, y c ∈ 0 , 1 y_c\in{0,1} yc∈0,1 为监督信号。定位回归采用 IoU 系列损失以兼顾重叠度与几何一致性,工程中常用的一种形式为 CIoU:
L b o x = 1 − I o U + ρ 2 ( b , b g t ) c 2 + α v , \mathcal{L}_{box}=1-\mathrm{IoU}+\frac{\rho^2(\mathbf{b},\mathbf{b}^{gt})}{c^2}+\alpha v, Lbox=1−IoU+c2ρ2(b,bgt)+αv,
其中 ρ \rho ρ 表示预测框与真值框中心点距离, c c c 为最小外接框对角线长度, v v v 刻画宽高比一致性, α \alpha α 为平衡系数。该类损失对小目标尤为关键:当交通灯框很小、像素抖动会显著改变 IoU 时,几何约束项能在一定程度上抑制训练震荡,使模型更稳定地学习"灯体位置"而非被背景噪声牵引。
实现层面,本系统将"多版本 YOLO 权重管理"与"统一推理输出"作为模型工程的核心目标:Detector 模块负责加载不同版本的权重文件(默认 YOLOv12n),完成预处理(resize/letterbox、归一化、batch 维扩展)、前向推理与后处理(阈值筛选、NMS 或对应版本的解码逻辑),并以统一数据结构返回 KaTeX parse error: Expected 'EOF', got '_' at position 26: ...x}, \text{class_̲id}, \text{conf... 列表供界面层渲染。界面端只关心三件事:框的位置、类别映射(green/red/yellow → "绿灯/红灯/黄灯")、以及置信度显示与统计,因此模型升级(YOLOv5→YOLOv12)不会破坏 UI 交互逻辑,只需要在 Detector 内部完成适配即可;这也为后续"模型选择与对比演示"提供了可复用的工程基础。(GitHub)
4. 训练策略与模型优化
为了在同一交通信号灯数据集上公平比较 YOLOv5--YOLOv12 的能力边界,同时保证系统可部署性,老思将训练流程统一为"固定输入尺度、固定轮数上限、统一增强策略与评测协议"的范式。硬件侧以 RTX 4090(24GB)为主,训练框架采用 PyTorch 生态的主流实现(YOLOv5 采用原仓训练脚本,YOLOv8 及之后版本采用 Ultralytics 训练入口),并固定随机种子与数据划分,确保不同模型的差异主要来自网络结构与训练配方本身,而非数据顺序或增强扰动带来的偶然波动。对于交通灯这种远距离小目标任务,训练中最敏感的变量通常是输入分辨率、增强强度与正负样本分配策略,因此本文优先把这些环节"锁死",再在同一约束下讨论版本升级带来的收益。
迁移学习是本项目的默认起点:各版本模型均加载对应规模的预训练权重(如 COCO 预训练),再在交通信号灯三类别数据上进行全量微调。其动机在于交通灯目标纹理弱、尺度小、背景干扰强,若完全从零训练,网络早期往往会被高亮噪声或路面反光牵引,收敛速度慢且泛化不稳;引入预训练能够在低层特征与通用形状先验上提供更好的初始化,使优化过程更快进入"学习交通灯形态与灯色差异"的有效阶段。对学习率调度,本文采用余弦退火作为主策略:记总迭代长度为 T T T,第 t t t 步学习率可写为
l r ( t ) = l r ∗ min + 1 2 ( l r ∗ 0 − l r min ) ( 1 + cos π t T ) , \mathrm{lr}(t)=\mathrm{lr}*{\min}+\frac{1}{2}\big(\mathrm{lr}*{0}-\mathrm{lr}_{\min}\big)\Big(1+\cos\frac{\pi t}{T}\Big), lr(t)=lr∗min+21(lr∗0−lrmin)(1+cosTπt),
并在训练初期使用 warmup(如 3 个 epoch)平滑地从较小学习率爬升,以降低大 batch 梯度方差与 BN 统计不稳定造成的震荡。
针对交通信号灯数据的典型难点,增强策略更偏向"增加光照与成像扰动的覆盖",而不是引入过强的几何变化。工程中保留 Mosaic 作为提升小目标召回的关键手段,并在训练后期关闭 Mosaic(close_mosaic),使模型在接近真实分布的图像构图上完成最后的收敛与定位校准;颜色空间增强(HSV 抖动、亮度/对比度扰动)用于覆盖白天逆光与夜间高噪声;随机仿射增强以小幅旋转、平移为主,避免过大的形变破坏交通灯的几何先验。由于标签统计显示黄灯实例显著少于红/绿灯,训练阶段还需要关注类别不均衡带来的偏置:一方面通过合理的增强与采样提升低频类别的有效曝光,另一方面在损失权重(分类/回归/置信度)与阈值策略上保持一致,避免"为了追黄灯召回而显著抬升误检"的不受控偏移。为稳定训练,EMA(指数滑动平均)与 AMP(自动混合精度)在大多数版本中默认启用:EMA 能在参数空间抑制振荡并提升验证集稳定性,AMP 则在 4090 上显著提高吞吐并降低显存压力,使 batch 与输入尺度更易达到理想折中。
为便于复现与横向对比,本文统一采用如下训练基线配置(若读者具备更高分辨率或更大 batch 的算力,可在不改变对比公平性的前提下做同尺度重训):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、mosaic=1.0、close_mosaic=10。模型选择以验证集 mAP@0.5:0.95 作为主准则,同时结合 F1 与 PR 曲线检查"阈值敏感性":在交通信号灯任务中,若某模型 mAP 接近但 PR 曲线在高召回区快速塌陷,往往意味着其对强光/反光样本的可分性不足,落地时更易出现误检飘移。后续推理部署阶段则进一步结合 ONNX/TensorRT 导出与 FP16 推理对延迟进行压缩,但该部分属于部署优化范畴,老思将在实验结果与系统实现章节中结合实际 FPS 与端到端时延给出更具体的量化对比。
5. 实验与结果分析
5.1 实验设置与对比基线
本节在同一交通信号灯数据集(Train/Val/Test = 18,207 / 1,755 / 879)与一致的训练配方(imgsz=640、epochs=120、batch=16、预训练权重微调、mosaic 后期关闭等)下,对 YOLOv5--YOLOv12 的不同尺度模型进行横向对比。为避免"训练配置差异"掩盖"结构差异",老思将评测流程统一为同一后处理与阈值扫描策略,并在推理侧记录预处理、网络前向与后处理三段耗时,最终给出端到端总时延与等效 FPS。对比对象分为两组:轻量组(n 型,包括 YOLOv5nu、YOLOv6n、YOLOv7-tiny、YOLOv8n、YOLOv9t、YOLOv10n、YOLOv11n、YOLOv12n)与中等规模组(s 型,包括 YOLOv5su、YOLOv6s、YOLOv7、YOLOv8s、YOLOv9s、YOLOv10s、YOLOv11s、YOLOv12s),以对应不同算力预算下的可部署性需求。
5.2 度量指标与统计口径
检测性能采用精确率(Precision)、召回率(Recall)、 F 1 F_1 F1 与 mAP 两类指标综合衡量,其中
P r e c i s i o n = T P T P + F P , R e c a l l = T P T P + F N , \mathrm{Precision}=\frac{TP}{TP+FP},\qquad \mathrm{Recall}=\frac{TP}{TP+FN}, Precision=TP+FPTP,Recall=TP+FNTP,
F 1 = 2 ⋅ P r e c i s i o n ⋅ R e c a l l P r e c i s i o n + R e c a l l . F_1=\frac{2\cdot \mathrm{Precision}\cdot \mathrm{Recall}}{\mathrm{Precision}+\mathrm{Recall}}. F1=Precision+Recall2⋅Precision⋅Recall.
mAP@0.5 反映在 IoU=0.5 处的平均精度,mAP@0.5:0.95(文中记为 mAP50-95)更强调定位质量与阈值鲁棒性,尤其适用于交通灯这种小目标场景,因为其框位置的像素级抖动会显著影响高 IoU 阈值下的 AP。速度侧将推理拆为预处理(Pre)、模型前向(Inf)与后处理(Post)三段并求和得到总时延 T o t a l = P r e + I n f + P o s t \mathrm{Total}=\mathrm{Pre}+\mathrm{Inf}+\mathrm{Post} Total=Pre+Inf+Post,等效 FPS 由 1000 / T o t a l ( m s ) 1000/\mathrm{Total(ms)} 1000/Total(ms) 近似得到,用于与桌面端实时检测需求对齐。
5.3 单模型收敛性、阈值选择与类别表现
训练过程的损失与指标收敛如图所示(此处插入图5-1:训练/验证损失与指标曲线)。从曲线可以观察到,Precision 与 Recall 在训练前期快速爬升并于中后期趋于平稳,mAP@0.5 在较少 epoch 内即可逼近饱和值,而 mAP50-95 的提升更为缓慢但持续,符合小目标定位"高 IoU 更难"的一般规律;同时,验证集损失与训练集损失同步下降,未出现明显的后期发散,说明在当前增强强度与早停策略下模型并未表现出强烈过拟合迹象。

为了给 UI 端默认置信度阈值提供可复现依据,老思对置信度进行了扫描并绘制 F 1 F_1 F1--Confidence 曲线。曲线显示总体 F 1 F_1 F1 在置信度约 0.404 处达到峰值(all classes F 1 ≈ 0.95 F_1\approx0.95 F1≈0.95),在 0.2--0.7 区间内保持高平台,而当置信度进一步提高到 0.8 以上时, F 1 F_1 F1 明显下降,主要原因是召回率随阈值增大快速衰减,尤其在"红灯"类别上更早出现下降趋势。这一现象与交通场景中红色高亮干扰(尾灯、反光、广告牌红色区域)更容易触发"低置信度真阳性/假阳性并存"的统计特性一致,因此在系统默认配置上,建议将 conf 设为 0.4 左右作为精度与召回的折中点,再由用户按场景调优。

进一步地,PR 曲线给出了类别层面的 AP 表现。以该模型为例,green / red / yellow 的 AP@0.5 分别约为 0.980 / 0.973 / 0.975,总体 mAP@0.5 约为 0.976。三类曲线在高召回区几乎重合,表明类别间可分性整体较强;但在接近 Recall=1.0 的末端仍可见精度下滑,这通常对应难例:远距离小目标、夜间噪声、强逆光与遮挡导致的定位偏移或灯色判别不确定。对于 UI 端"追求极低误检"的应用,可通过提高 conf 或加入时序平滑(例如视频帧间投票)降低末端误检,但代价是牺牲极端难例的召回。
轻量组的综合指标如图与表所示。从结果看,mAP@0.5 的差异整体很小(约 0.969--0.976),表明在该数据集上"能否检测到"已不再是主要瓶颈;更能拉开差距的是 mAP50-95 与推理时延,它们对小目标定位质量与工程实时性更敏感。

表5-1给出了更完整的统计,其中 YOLOv8n 在轻量组中取得最高 mAP50(0.976)且端到端最快(Total≈10.17ms,约 98 FPS),属于"精度与实时性同时占优"的方案;YOLOv6n 的 mAP50-95 最高(0.772),提示其在更严格 IoU 阈值下的定位质量更稳,同时速度也处在第一梯队(≈96.7 FPS),是"更重视定位质量、仍需高帧率"的合理选择;YOLOv9t 的总体 F 1 F_1 F1 最高(0.952),但推理前向耗时明显更大(Inf≈16.51ms),使其总 FPS 降至约 50,这往往与具体实现的算子路径、融合策略与部署图优化程度有关,并不完全由参数量决定。值得注意的是 YOLOv7-tiny 的 PostTime 达到 4ms 量级,说明其后处理开销相对突出,部署时需要重点关注输出候选数与 NMS 负担。
表5-1 轻量组(n 型)模型性能与速度统计(测试集)
| Model | Params(M) | FLOPs(G) | Precision | Recall | F1 | mAP50 | mAP50-95 | Total(ms) | FPS |
|---|---|---|---|---|---|---|---|---|---|
| YOLOv5nu | 2.6 | 7.7 | 0.953 | 0.937 | 0.945 | 0.969 | 0.744 | 10.94 | 91.4 |
| YOLOv6n | 4.3 | 11.1 | 0.957 | 0.937 | 0.947 | 0.972 | 0.772 | 10.34 | 96.7 |
| YOLOv7-tiny | 6.2 | 13.8 | 0.951 | 0.947 | 0.949 | 0.972 | 0.725 | 21.08 | 47.4 |
| YOLOv8n | 3.2 | 8.7 | 0.961 | 0.933 | 0.947 | 0.976 | 0.757 | 10.17 | 98.3 |
| YOLOv9t | 2.0 | 7.7 | 0.960 | 0.944 | 0.952 | 0.973 | 0.753 | 19.67 | 50.8 |
| YOLOv10n | 2.3 | 6.7 | 0.954 | 0.927 | 0.940 | 0.970 | 0.756 | 13.95 | 71.7 |
| YOLOv11n | 2.6 | 6.5 | 0.943 | 0.944 | 0.943 | 0.975 | 0.751 | 12.97 | 77.1 |
| YOLOv12n | 2.6 | 6.5 | 0.958 | 0.929 | 0.943 | 0.974 | 0.758 | 15.75 | 63.5 |
训练过程中 mAP50 的收敛轨迹如图所示。曲线整体在前 20--30 个 epoch 内快速接近上限,之后进入缓慢爬升阶段,说明该任务对"检测可达性"的学习难度相对较低,而对"严格定位与难例"更敏感;个别模型在最初若干 epoch 的抖动更明显,通常与 warmup、增强强度以及早期标签分配的不稳定有关,但最终均收敛到相近水平。

平均 PR 曲线对比见图,各模型的曲线在大部分召回区间高度重合,仅在高召回末端出现细微分叉,这也解释了为什么 mAP@0.5 难以显著拉开差距:差异更多集中在极端难例与定位严格度上,因此若系统场景更关注"远距离小目标定位稳定性",应优先参考 mAP50-95 与高召回区的曲线尾部形态,而不是只看 mAP50。

中等规模组的 F1 与 mAP50 对比如图所示。相较轻量组,mAP50 仍维持在 0.971--0.979 的窄区间内,但模型间的时延差异明显扩大,表明"规模增加"并不必然带来成比例的精度收益,却会显著改变实时性边界。

表5-2显示,YOLOv7 在 s 组中取得最高 mAP50(0.979)与最高 F 1 F_1 F1(0.951),但总时延达到约 29.52ms(约 33.9 FPS),更适合对实时性要求不苛刻、希望提升上限的离线分析或算力充足的部署场景;YOLOv6s 的 mAP50-95 最高(0.786),说明其在严格定位阈值下具有更好的稳定性,并且速度仍能维持在约 81.6 FPS,是"定位质量更优且仍具实时性"的均衡方案;YOLOv8s 端到端最快(≈11.39ms,≈87.8 FPS),并保持较高 mAP50(0.975),在桌面端与中等算力设备上往往更容易实现稳定实时显示。
表5-2 中等规模组(s 型)模型性能与速度统计(测试集)
| Model | Params(M) | FLOPs(G) | Precision | Recall | F1 | mAP50 | mAP50-95 | Total(ms) | FPS |
|---|---|---|---|---|---|---|---|---|---|
| YOLOv5su | 9.1 | 24.0 | 0.948 | 0.938 | 0.943 | 0.974 | 0.758 | 12.24 | 81.7 |
| YOLOv6s | 17.2 | 44.2 | 0.954 | 0.934 | 0.944 | 0.971 | 0.786 | 12.26 | 81.6 |
| YOLOv7 | 36.9 | 104.7 | 0.950 | 0.953 | 0.951 | 0.979 | 0.768 | 29.52 | 33.9 |
| YOLOv8s | 11.2 | 28.6 | 0.962 | 0.926 | 0.944 | 0.975 | 0.765 | 11.39 | 87.8 |
| YOLOv9s | 7.2 | 26.7 | 0.969 | 0.924 | 0.946 | 0.973 | 0.759 | 22.17 | 45.1 |
| YOLOv10s | 7.2 | 21.6 | 0.961 | 0.930 | 0.946 | 0.974 | 0.778 | 14.19 | 70.5 |
| YOLOv11s | 9.4 | 21.5 | 0.966 | 0.930 | 0.947 | 0.975 | 0.774 | 13.47 | 74.2 |
| YOLOv12s | 9.3 | 21.4 | 0.946 | 0.944 | 0.945 | 0.976 | 0.776 | 16.74 | 59.7 |
s 组的 mAP50 收敛过程整体趋势与 n 组一致:早期迅速逼近高 mAP50,后期缓慢抬升。曲线之间的差异主要体现在早期震荡幅度与最终平台高度的细小差别,这意味着在该任务上,提升更多依赖于对难例的处理(强光、夜间噪声、小目标定位)而非单纯堆叠参数规模。平均 PR 曲线如图,各模型在高召回末端的分叉仍然是最敏感的区分点。若应用强调"尽可能不漏检"(例如辅助驾驶提示),建议在 UI 端采用较低的 conf 并结合后验策略(例如连续帧一致性约束)抑制误检;若应用强调"误检成本更高"(例如控制信号直接进入决策),则应上调 conf 并优先选择高精确率且 mAP50-95 更优的模型(如 YOLOv6s、YOLOv10s 等),以减少高 IoU 要求下的定位漂移。

部署建议(结合本节数据):若以桌面端实时检测与多模型对比演示为核心,轻量侧优先 YOLOv8n(速度与 mAP50 最优)或 YOLOv6n(mAP50-95 最优且仍高速);若希望在中等规模上进一步追求定位严格度,可优先考虑 YOLOv6s(mAP50-95 最优)或 YOLOv8s(实时性更强)。
6. 系统设计与实现
6.1 系统设计思路
本系统面向"交通信号灯检测与状态识别"的桌面端落地需求,整体采用 Python 3.12 + PySide6 + SQLite 的轻量工程栈实现:界面层负责多源输入、可视化渲染与交互控件,处理层负责模型推理与后处理,数据层负责用户体系与结果持久化。为保证 UI 的流畅性,推理环节不在主线程阻塞执行,而是通过 QThread/线程池承载耗时的帧读取与推理任务,并用 Qt 信号-槽把"原始帧、检测结果、耗时统计"等结构化信息回传到主线程完成绘制与状态栏更新,从而在摄像头实时流与离线视频播放中维持稳定刷新频率。

在典型类与分层上,Ui_MainWindow(界面层)由 Qt Designer 生成并负责控件布局;MainWindow(控制层)作为中枢调度,管理按钮槽函数、输入源切换、阈值/主题/模型选择、播放控制与状态机;Detector(处理层)屏蔽不同 YOLO 版本的推理差异,统一输出 bbox + class_id + conf,并在内部完成预处理(letterbox/归一化)、推理与后处理(解码、过滤、NMS/统计)。当用户在界面上切换 YOLOv5--YOLOv12 权重或调整 Conf/IoU 时,控制层只更新 Detector 的配置与推理参数,界面渲染逻辑保持不变,因此"模型升级"不会破坏交互链路,便于做多版本对比演示。
数据持久化采用 SQLite,用户侧提供注册/登录/修改密码/头像/注销与切换账号,并为每个用户维护独立的偏好配置(默认模型、阈值、主题)与检测历史(输入源、时间戳、类别统计、导出路径等)。主题修改功能以 Qt 样式表(QSS)与资源管理为核心,支持浅色/深色与自定义配色、背景与图标替换,并将主题参数写入用户配置表,实现"同一套功能、不同人不同观感"的一致体验;这对长期运行的监控类应用尤为关键,因为它直接影响可读性与操作负担。
图 系统流程图

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

登录与账户管理的设计目标是把"身份、配置、历史结果"与主检测流程做强绑定:用户完成登录后,系统立即从 SQLite 加载其专属配置(默认 YOLO 版本、Conf/IoU、主题方案)与历史检测记录,使得不同用户在同一台设备上获得互不干扰的工作空间;当进入主界面后,模型推理与可视化输出的关键参数始终以"用户配置"为源头,主题切换与阈值调整会即时作用于交互体验与检测行为,并在退出或注销时写回数据库以保证下次启动一致。这样一来,登录不只是入口页面,而是贯穿"多源输入---推理---导出---复核"的状态管理枢纽:既提升了长期使用的可维护性,也让多模型对比、结果追溯与个性化界面成为可复现的工程能力。

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

完整资源中包含数据集及训练代码,环境配置与界面中文字、图片、logo等的修改方法请见视频:➷➷➷
详细介绍文档博客: YOLOv5至YOLOv12升级:交通信号灯识别系统的设计与实现(完整代码+界面+数据集项目)
环境配置博客教程:(1)Pycharm软件安装教程;(2)Anaconda软件安装教程;(3)Python环境配置教程;
或者环境配置视频教程:(1)Pycharm软件安装教程;(2)Anaconda软件安装教程;(3)Python环境依赖配置教程
数据集标注教程(如需自行标注数据):数据标注合集
8. 参考文献(GB/T 7714)
1 Jensen M B, Philipsen M P, Møgelmose A, et al. Vision for Looking at Traffic Lights: Issues, Survey, and Perspectives[J]. IEEE Transactions on Intelligent Transportation Systems, 2016, 17(7): 1800-1815.
2 Behrendt K, Novak L, Botros R. A Deep Learning Approach to Traffic Lights: Detection, Tracking, and Classification[C]//2017 IEEE International Conference on Robotics and Automation (ICRA). Singapore: IEEE, 2017: 1370-1377.
3 Ren S Q, He K M, Girshick R, et al. Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks[J/OL]. arXiv:1506.01497, 2015.
4 Liu W, Anguelov D, Erhan D, et al. SSD: Single Shot MultiBox Detector[C]//Computer Vision--ECCV 2016. Cham: Springer, 2016: 21-37.
5\] Redmon J, Divvala S, Girshick R, et al. You Only Look Once: Unified, Real-Time Object Detection\[C\]//2016 IEEE Conference on Computer Vision and Pattern Recognition (CVPR). Las Vegas: IEEE, 2016: 779-788. \[6\] Lin T Y, Dollár P, Girshick R, et al. Feature Pyramid Networks for Object Detection\[C\]//2017 IEEE Conference on Computer Vision and Pattern Recognition (CVPR). Honolulu: IEEE, 2017: 936-944. \[7\] Lin T Y, Goyal P, Girshick R, et al. Focal Loss for Dense Object Detection\[C\]//2017 IEEE International Conference on Computer Vision (ICCV). Venice: IEEE, 2017: 2999-3007. \[8\] Fregin A, Müller J, Kreßel U, et al. The DriveU Traffic Light Dataset: Introduction and Comparison with Existing Datasets\[C\]//2018 IEEE International Conference on Robotics and Automation (ICRA). Brisbane: IEEE, 2018. \[9\] Lu Y, Lu J, Zhang S, et al. Traffic Signal Detection and Classification in Street Views Using an Attention Model\[J\]. Computational Visual Media, 2018, 4(3): 253-266. \[10\] 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\]//2023 IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR). Vancouver: IEEE, 2023: 7464-7475. \[11\] Wang C Y, Yeh I H, Liao H Y M. YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information\[J/OL\]. arXiv:2402.13616, 2024. \[12\] Wang A, Chen H, Liu L, et al. YOLOv10: Real-Time End-to-End Object Detection\[J/OL\]. arXiv:2405.14458, 2024. \[13\] Tian Y, Ye Q, Doermann D. YOLOv12: Attention-Centric Real-Time Object Detectors\[J/OL\]. arXiv:2502.12524, 2025. \[14\] Lin H Y, Chen Y C. Traffic Light Detection Using Ensemble Learning by Boosting with Color-Based Data Augmentation\[J\]. International Journal of Transportation Science and Technology, 2024 (Available online 8 Nov 2024). \[15\] 邓天民, 谭思奇, 蒲龙忠. 基于改进YOLOv5s的交通信号灯识别方法\[J\]. 计算机工程, 2022, 48(9): 55-62.