摘要 :面向道路监控、园区出入口与停车管理等应用场景,本文给出一套基于 YOLOv5--YOLOv12 的 车型识别与计数系统 的设计与实现,并以可复现工程为目标同步提供 完整代码、可运行界面与数据集项目 。系统在检测层面完成车辆目标定位、车型细粒度分类与多目标计数,在交互层面采用 PySide6(Qt 信号槽) 构建桌面端 UI,支持图片、视频与摄像头多源输入,实时展示检测框、类别、置信度与 按车型/总量统计 ,并提供阈值(Conf/IoU)调节、结果可视化(含热力图等)与一键导出。为支撑跨代模型对比与工程落地,本文构建并标注面向车型任务的数据集,给出从训练、验证到推理部署的完整流程,同时引入 SQLite 实现用户登录注册、个性化配置与历史结果持久化管理;在实验部分对 8 代 YOLO 在同一数据集上的精度、速度与复杂度进行系统对比分析,为车型识别与计数任务在不同算力约束下的模型选型提供依据。
文章目录
- [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。
在智能驾驶与智慧交通的感知链路中,视觉感知逐渐从"能看见车辆"演进到"能区分车型并长期稳定统计",这推动了从算法、数据到系统工程的一体化研究范式2。(jst.tsinghuajournals.com)
从数据与评测体系看,交通视频的检测与多目标跟踪常以 UA-DETRAC 为代表,其强调遮挡、光照、截断与车辆类型等属性标注,并提出面向检测---跟踪耦合的评测协议,揭示了检测误差对 MOT 系统排名的非线性影响3。(ScienceDirect)
面向更真实的驾驶分布与跨地域泛化问题,BDD100K 以大规模多地域、多天气、多任务标注提供了更接近真实道路部署的数据支撑,使得模型在长尾类别、昼夜域迁移与复杂遮挡下的鲁棒性评估成为可能4。(CVF Open Access)
若进一步聚焦"车型识别"的细粒度属性,CompCars 以车型层级结构(品牌---车型---年款)及多视角数据支撑了细粒度分类与验证研究,也暴露出视角变化与局部细节缺失带来的判别困难5。(CV Foundation)
国内研究在工程落地层面更关注轻量化与实时性约束下的准确率保持,例如针对车辆识别任务引入网络结构与训练策略层面的改动,并在资源受限场景中探索压缩与加速对精度的影响规律6。(Journal of Engineering Science)
从算法谱系看,两阶段检测器以候选框机制获得较强的定位与分类能力,但其推理链路较长且对实时部署不友好,Faster R-CNN 通过 RPN 与端到端训练显著提升了两阶段检测效率,仍难完全满足高帧率交通视频的低延迟需求7。(DBLP)
单阶段检测器以密集预测简化推理流程,SSD 通过多尺度特征层预测提升了对不同尺度目标的适配能力,为实时检测奠定了较好的速度基础8。(Springer)
YOLO 将检测建模为单网络回归问题,在速度与精度之间建立了更适合实时场景的折中,使其成为交通监控中"检测即服务"的主流基线之一9。(CVF Open Access)
在更系统化的工程改进层面,YOLOv4 总结并验证了多种有效的训练与结构技巧(如数据增强、正则化与损失设计等),在通用数据集上实现了更高的实时精度,推动了 YOLO 系列在工业场景的普及10。(arXiv)
需要强调的是,"计数"并非检测的简单累加,交通视频中的遮挡、相机抖动与目标交汇会导致重复计数或漏计,因此主流方案通常采用 tracking-by-detection,将检测框在时间维度上关联成轨迹并在虚拟线圈/ROI 上触发计数,ByteTrack 通过利用低分检测框参与关联显著提升了遮挡场景的轨迹连续性11。(Springer)
进一步沿 YOLO 迭代脉络观察,YOLOv9 从"可编程梯度信息"与 GELAN 架构角度讨论信息瓶颈与梯度可靠性问题,体现出轻量骨干在参数利用率上的新方向12。(Springer)
YOLOv10 以端到端思路推进实时检测的后处理简化,通过 NMS-free 训练与双重分配机制,试图在保持精度的同时降低推理阶段的复杂度与延迟波动13。(OpenReview)
围绕 YOLOv11 的研究则更明确地指向"资源效率",通过针对不同目标尺度的结构裁剪与配置选择,探索在降低模型体量与算力消耗时维持甚至提升检测性能的可行性[14]。(Springer)
最新的 YOLOv12 进一步把注意力机制推向实时检测主干,以注意力中心化的结构设计在速度约束下逼近乃至超越传统 CNN 主导的实时检测器,为"更强表征能力与可部署性并存"提供了新的证据链[15]。
上述研究共同指向了交通场景车型识别与计数的几类核心难点:其一,远距小目标与密集车流导致的尺度不均衡与遮挡,使检测边界与类别判别更易受噪声干扰;其二,车型细粒度差异往往集中在局部结构件与纹理,易被运动模糊、光照反射与压缩失真淹没;其三,计数依赖跨帧一致性,检测抖动与 ID 切换会放大为统计误差;其四,系统落地需要在推理吞吐、可视化交互、结果存储与可复现训练之间取得工程平衡。
表1对与本文任务强相关的代表性工作作了简要对照,以展示从数据集、检测器到跟踪计数的典型技术取向。
表1 车型识别与计数相关研究对比(节选)
| 代表方向/方法 | 典型数据集 | 关键要点 | 优势 | 局限 | 代表文献 |
|---|---|---|---|---|---|
| 交通检测+跟踪基准 | UA-DETRAC | 强调检测---跟踪耦合评测、交通属性标注 | 更贴近交通 MOT 真实误差传播 | 类别粒度仍偏检测/类型层面 | 3 |
| 多任务驾驶数据集 | BDD100K | 多地域多天气、多任务标注 | 支撑泛化与域迁移评估 | 细粒度车型标签并非主线 | 4 |
| 细粒度车型分类 | CompCars | 车型层级结构、视角变化 | 支撑车型验证与属性学习 | 与道路视频分布存在差异 | 5 |
| 两阶段检测 | Faster R-CNN | RPN+端到端训练 | 精度强、定位稳 | 推理链路长、延迟较高 | [7](https://link.springer.com/chapter/10.1007/978-3-319-46448-0_2?utm_source=chatgpt.com "SSD: Single Shot MultiBox Detector |
| 单阶段检测 | SSD | 多尺度特征层密集预测 | 推理快、结构相对简单 | 极小目标与密集场景仍吃力 | 8 |
| YOLO 工程化改进 | YOLOv4 | 系统化验证训练/结构技巧 | 实时精度提升明显 | 依赖训练技巧与调参经验 | 10 |
| 跟踪驱动计数 | ByteTrack | 低分框参与关联 | 遮挡下轨迹更连续 | 仍依赖检测质量与场景先验 | [11](https://link.springer.com/chapter/10.1007/978-3-031-72751-1_1 "YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information |
| YOLO 新迭代 | YOLOv9--v12 | 结构与训练范式演进 | 精度---延迟权衡持续优化 | 版本碎片化、复现与部署差异大 | [12--15] |
基于以上背景,老思在本文中将围绕"YOLOv5 至 YOLOv12 升级"的工程主线,面向道路场景构建一套可复现的车型识别与计数系统:其一,在同一数据集与同一评测协议下系统对比 YOLOv5--YOLOv12 多版本模型的检测与计数效果,并给出可解释的误差分析;其二,结合任务需求完成面向车型类别的数据集标注、预处理与划分,形成可直接复现实验的资源包;其三,以 PySide6 设计可交互界面并联动 SQLite 进行结果持久化,提供从多源输入、推理显示、阈值调参到统计导出的完整闭环实现与代码开源。
主要功能演示:
(1)启动与登录:程序启动后首先进入登录界面,用户可选择登录或注册;登录成功后加载用户侧的个性化配置与历史记录(如最近一次使用的模型、阈值参数、保存路径等),随后自动跳转主界面,保证检测流程与账户空间在同一工程内一致管理。
启动与登录界面图

(2)多源输入与实时检测(摄像头/视频/图片/文件夹):主界面提供统一的数据入口,支持打开摄像头进行实时推理,或加载本地视频进行逐帧检测,同时支持单张图片与图片文件夹的批量推理;推理过程中界面同步显示检测框、车型类别与置信度,并在侧栏输出总计数与按车型统计,适合用于快速验证模型在不同输入模态下的稳定性与实时性。
多源输入与实时检测界面图

(3)模型选择与对比演示:系统提供 YOLOv5 至 YOLOv12 的权重选择入口(同一任务配置下快速切换),用户可在不改变输入源的情况下切换模型并观察检测结果、计数统计与推理速度等关键差异;对比演示建议固定同一段视频或同一图片集,分别截图保存,用于在博客中直观呈现"版本升级带来的误检/漏检变化与计数一致性变化"。
模型选择与对比演示界面图

(4)主题修改功能:为适配不同显示环境与演示需求,界面提供主题切换与外观自定义能力(如浅色/深色、主色调、背景图与图标风格等),修改后即时生效并可写入用户配置;该功能主要用于提升长时间监控或演示场景下的可读性与交互一致性,同时不影响检测逻辑与结果记录。
主题修改功能界面图

2. 数据集介绍
本项目面向道路场景的车型识别与计数任务构建了一个 7 类目标检测数据集,共 2,026 张图像,并按训练/验证/测试划分为 1,488/507/31 张(约 73.45%/25.02%/1.53%)。类别体系覆盖小型车、中型车、大型车以及多种典型货运与特种车辆,分别对应 tiny-car(小型车)、mid-car(中型车)、big-car(大型车)、small-truck(小型卡车)、big-truck(大型卡车)、oil-truck(油罐车)、special-car(特种车)。从训练批次可视化可以观察到,该数据集在视角、背景与光照上具有一定多样性,但目标通常占据画面主体区域,属于"车辆主体裁剪/近景"为主的分布,这一特征有利于车型细粒度判别,却也意味着在迁移到远距小目标的监控视角时,需要通过尺度扰动与仿射增强来弥补域差异。

python
Chinese_name = {'tiny-car': "小型车", 'mid-car': "中型车", 'big-car': "大型车", 'small-truck': "小型卡车", 'big-truck': "大型卡车", 'oil-truck': "油罐车", 'special-car': "特种车"}
在标注与预处理方面,数据集采用 YOLO 规范的归一化边界框格式(TXT,(x, y, w, h) 均归一化到 [ 0 , 1 ] [0,1] [0,1]),并在训练阶段统一以 640×640 作为网络输入尺寸;标签统计图显示训练集存在一定类别不均衡,其中 small-truck 与 tiny-car 样本相对更多(约 294 与 262),special-car 相对较少(约 110),其余类别大致处于同一量级(约 161--221)。边界框中心点分布集中于图像中心附近、宽高分布偏大,说明样本多为"单车主目标"标注,这会降低密集车流遮挡的复杂度,但对"计数"模块的工程实现更友好,便于在推理侧将检测框与跨帧关联/过线规则进行稳定耦合,从而形成可复现的计数闭环。

📊 数据集规格说明 (Dataset Specification)
| 维度 | 参数项 | 详细数据 |
|---|---|---|
| 基础信息 | 标注软件 | LabelImg |
| 标注格式 | YOLO TXT (Normalized) | |
| 数量统计 | 训练集 (Train) | 1,488 张 (73.45%) |
| 验证集 (Val) | 507 张 (25.02%) | |
| 测试集 (Test) | 31 张 (1.53%) | |
| 总计 (Total) | 2,026 张 | |
| 类别清单 | Class ID: 0 | tiny-car(小型车) |
| Class ID: 1 | mid-car(中型车) |
|
| Class ID: 2 | big-car(大型车) |
|
| Class ID: 3 | small-truck(小型卡车) |
|
| Class ID: 4 | big-truck(大型卡车) |
|
| Class ID: 5 | oil-truck(油罐车) |
|
| Class ID: 6 | special-car(特种车) |
|
| 图像规格 | 输入尺寸 | 640 * 640 |
| 数据来源 | 自有采集 / 道路场景截帧(人工清洗) |
3. 模型设计与实现
本系统的核心目标是把"车型识别"与"计数"统一为可工程复现的一条推理链路:前端输入(图片/视频/摄像头)经由检测模型输出车辆边界框与车型类别,再将检测结果交给计数逻辑(跨帧关联与规则触发)完成总量与分车型统计。考虑到部署侧对实时性与可维护性的共同要求,老思在模型侧采用"默认主模型 + 多版本可切换"的设计:默认使用 YOLOv12n 作为主检测器,同时保留 YOLOv5--YOLOv11 的权重导入接口,确保在相同数据与相同 UI 交互下可以做跨代对比。YOLO 系列在结构层面通常采用 Backbone--Neck--Head 的三段式范式,YOLOv5 的官方结构示意(包含 CSPDarknet53 主干、SPPF 与 PANet 融合、检测头输出)可作为该范式的典型代表。(Ultralytics Docs)

在网络结构选型层面,交通场景的车型识别往往呈现"细粒度差异集中于局部细节"的特点,因此模型需要兼顾多尺度表征与局部纹理敏感性。传统思路是先用检测器截取车辆区域,再用分类网络(如 ResNet、MobileNet、EfficientNet 等)做二阶段车型分类;但在工程系统中,这会引入额外的裁剪、对齐与二次推理开销,且误差会在两阶段间累积。本文采用单阶段检测式建模:将车型作为检测类别直接预测,从而把定位与细粒度判别绑定在同一特征金字塔上,既便于端到端训练,也更利于推理侧统一后处理与计数统计。与 YOLOv5 的 anchor-based 头不同,Ultralytics 的 YOLOv8 路线明确引入了 anchor-free 的 split head 设计,使分类与回归分支的优化目标更清晰,工程侧也更易做版本兼容。(Ultralytics Docs) 进一步地,YOLOv9 从可编程梯度信息(PGI)与 GELAN 结构出发讨论轻量网络中的信息瓶颈与梯度可靠性问题,为小模型在复杂场景下的参数利用率提供了新的解释视角。(arXiv) YOLOv10 则把实时检测进一步推向端到端范式,强调在训练与解码设计上减少对 NMS 的依赖,以降低推理延迟的波动并简化部署链路。(arXiv) 最新的 YOLOv12 给出"注意力中心化"的实时检测框架,在速度约束下引入注意力建模以提升全局依赖刻画能力,适合用于交通场景中遮挡、尺度变化与背景干扰较强的目标识别。(arXiv)
任务建模与损失函数方面,检测学习目标可写为多项损失的加权和:
L = λ box L ∗ box + λ ∗ cls L ∗ cls + λ ∗ obj L ∗ obj , \mathcal{L}=\lambda_{\text{box}}\mathcal{L}*{\text{box}}+\lambda*{\text{cls}}\mathcal{L}*{\text{cls}}+\lambda*{\text{obj}}\mathcal{L}*{\text{obj}}, L=λboxL∗box+λ∗clsL∗cls+λ∗objL∗obj,
其中 L ∗ box \mathcal{L}*{\text{box}} L∗box 通常采用 IoU 类回归损失(如 GIoU/DIoU/CIoU), L ∗ cls \mathcal{L}*{\text{cls}} L∗cls 多使用二元交叉熵或其改进形式以适配多类别概率学习, L ∗ obj \mathcal{L}*{\text{obj}} L∗obj 用于约束候选位置的目标存在性。以 CIoU 为例,其在 IoU 的基础上引入中心距离与长宽比项:
L CIoU = 1 − IoU + ρ 2 ( b , b ∗ ) c 2 + α v , \mathcal{L}_{\text{CIoU}}=1-\text{IoU}+\frac{\rho^2(\mathbf{b},\mathbf{b}^*)}{c^2}+\alpha v, LCIoU=1−IoU+c2ρ2(b,b∗)+αv,
ρ ( ⋅ ) \rho(\cdot) ρ(⋅) 表示预测框 b \mathbf{b} b 与真值框 b ∗ \mathbf{b}^* b∗ 的中心点距离, c c c 为最小外接框对角线长度, v v v 描述宽高比一致性, α \alpha α 为自适应权重。对于 YOLOv12 引入的注意力建模,其基本计算可抽象为
Attention ( Q , K , V ) = softmax ( Q K ⊤ d ) V , \text{Attention}(Q,K,V)=\text{softmax}\left(\frac{QK^\top}{\sqrt{d}}\right)V, Attention(Q,K,V)=softmax(d QK⊤)V,
其中 Q , K , V Q,K,V Q,K,V 来自特征映射的线性投影, d d d 为特征维度;在实时检测中,这类模块往往以局部窗口化、低秩投影或特征分组的方式控制计算量,使其能够插入 Backbone/Neck 而不显著牺牲吞吐率。(arXiv)
工程实现上,为了在 YOLOv5--YOLOv12 之间保持一致的 UI 调用方式,系统把"模型加载---预处理---推理---后处理---结果结构化输出"封装为统一的 Detector 接口;UI 层只关心输入源与阈值参数(Conf/IoU)以及最终的结构化检测结果(框坐标、类别 ID、类别中文名、置信度),从而避免版本差异向界面层扩散。下面给出核心推理流程的实现骨架(示意代码,强调接口与数据流组织方式):
python
class Detector:
def __init__(self, weight_path: str, class_names: list[str], chinese_name: dict[str, str]):
self.class_names = class_names
self.chinese_name = chinese_name
self.model = self._load_model(weight_path) # 兼容不同 YOLO 版本的加载逻辑
def infer(self, img_bgr, conf=0.25, iou=0.45, imgsz=640):
img = self._letterbox(img_bgr, new_shape=imgsz) # 尺度与填充
x = self._to_tensor(img) # BGR->RGB, HWC->CHW, normalize
raw = self.model(x) # 前向推理(不同版本内部细节可不同)
det = self._postprocess(raw, conf=conf, iou=iou) # NMS 或端到端解码
return self._format(det)
def _format(self, det):
# det: [N, 6] -> (x1, y1, x2, y2, score, cls_id)
results = []
for x1, y1, x2, y2, score, cls_id in det:
name = self.class_names[int(cls_id)]
results.append({
"bbox": [float(x1), float(y1), float(x2), float(y2)],
"score": float(score),
"cls_id": int(cls_id),
"cls_en": name,
"cls_zh": self.chinese_name.get(name, name),
})
return results
4. 训练策略与模型优化
车型识别与计数系统的训练部分,老思采用"统一训练协议 + 跨版本可复现"的思路:在同一数据划分(Train/Val/Test=1488/507/31)、同一输入尺寸( 640 × 640 640\times 640 640×640)与同一增强配置下,分别训练 YOLOv5n 至 YOLOv12n 的对应轻量模型,使不同代际的对比尽可能来源于结构差异而非训练扰动。训练环境默认以 Python 3.12、PyTorch(CUDA 加速)与 RTX 4090 为主,启用 AMP 混合精度与梯度累计(当显存受限时)以稳定吞吐;同时固定随机种子并记录配置文件与权重哈希,保证"同参复训可得到同量级指标"的工程可追溯性。
在迁移学习与微调策略上,检测器均以 COCO 等通用数据预训练权重作为初始化(pretrained=True),再在本车型数据集上进行端到端微调。由于本数据集存在一定类别不均衡(如 small-truck、tiny-car 实例数明显高于 special-car),训练阶段除常规 shuffle 外,会通过适度的类别损失权重调节与增强强度控制来缓解长尾类别的欠拟合风险,避免模型把判别能力过度集中在头部类别。增强策略以交通场景的可解释扰动为主:几何层面采用随机仿射(平移、缩放、轻度旋转)与随机裁剪,颜色层面采用 HSV 抖动与曝光扰动;同时在训练前期打开 Mosaic 以提升多尺度与背景多样性,训练后期关闭 Mosaic(close_mosaic)以让分布回归真实画面,从而改善边界框回归的稳定性并降低推理时框抖动,这对后续计数模块(跨帧关联与过线触发)尤其关键。
学习率与优化器方面,系统优先使用框架的 optimizer=auto(在 Ultralytics 系列中通常会在 SGD/AdamW 等之间做自适应选择),并采用预热与余弦退火的组合以兼顾收敛速度与稳定性。余弦退火可写为
lr ( t ) = lr ∗ 0 [ lrf + 1 − lrf 2 ( 1 + cos ( π t T ) ) ] , \text{lr}(t)=\text{lr}*0\left[\text{lrf}+\frac{1-\text{lrf}}{2}\left(1+\cos\left(\pi\frac{t}{T}\right)\right)\right], lr(t)=lr∗0[lrf+21−lrf(1+cos(πTt))],
其中 t t t 为当前 epoch, T T T 为总 epoch 数, lrf \text{lrf} lrf 控制末期学习率下界比例。与此同时,引入 EMA(指数滑动平均)权重以减少验证集指标的震荡,其更新形式为
θ ∗ ema ← α θ ema + ( 1 − α ) θ , \theta*{\text{ema}}\leftarrow \alpha \theta_{\text{ema}}+(1-\alpha)\theta, θ∗ema←αθema+(1−α)θ,
其中 θ \theta θ 为当前网络参数, α \alpha α 为衰减系数。训练过程采用早停(patience)与"以 Val mAP50--95 选择 best 权重"的策略,既避免无效迭代,也为跨版本对比提供统一的模型选取标准。
在推理侧的模型优化上,为了保证桌面端实时交互体验,默认推理启用 FP16(若显卡支持)并提供 ONNX/TensorRT 导出路径用于进一步加速;同时将 NMS/解码、阈值筛选与计数逻辑解耦,避免 UI 刷新线程被后处理阻塞。计数任务对检测框一致性更敏感,因此在部署时通常会比"只做检测展示"更保守地设置 conf 与 iou,并结合轨迹关联策略抑制短时误检导致的重复计数,使最终统计更贴近业务需求的"稳定性优先"。
| 名称 | 作用(简述) | 数值 |
|---|---|---|
| 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 |
5. 实验与结果分析
5.1 实验设置与对比基线
本节围绕"车型检测与计数"的检测前端展开对比实验,目标是回答两个工程问题:其一,在相同数据与训练协议下,YOLOv5 至 YOLOv12 的跨代升级能否带来可观的精度收益;其二,在桌面端实时交互场景中,精度收益是否会被推理延迟抵消,从而影响计数稳定性。实验统一使用第 2 节数据集划分(Train/Val/Test=1488/507/31),输入尺寸固定为 640 × 640 640\times 640 640×640,并采用同一套训练策略(预训练权重微调、Mosaic 前期开启与后期关闭、余弦学习率与早停等)。对比模型分为两组:轻量组(n/tiny 量级)用于强调实时性,包含 YOLOv5nu、YOLOv6n、YOLOv7-tiny、YOLOv8n、YOLOv9t、YOLOv10n、YOLOv11n、YOLOv12n;中轻量组(s 量级)用于强调精度冗余与泛化,包含 YOLOv5su、YOLOv6s、YOLOv7、YOLOv8s、YOLOv9s、YOLOv10s、YOLOv11s、YOLOv12s。推理耗时统计来自同一硬件环境(CSV 记录为 NVIDIA GeForce RTX 3070 Laptop GPU 8GB),并拆分为预处理、前向推理与后处理三段,以便定位延迟瓶颈。

5.2 度量指标与可视化
检测性能采用 Precision、Recall、F1、mAP@0.5 与 mAP@0.5:0.95 评估。其中
Precision = T P T P + F P , Recall = T P T P + F N , F 1 = 2 P R P + R . \text{Precision}=\frac{TP}{TP+FP},\quad \text{Recall}=\frac{TP}{TP+FN},\quad F1=\frac{2PR}{P+R}. Precision=TP+FPTP,Recall=TP+FNTP,F1=P+R2PR.
在计数任务中,Precision 更直接关联"误检导致的重复计数",Recall 更直接关联"漏检导致的漏计数",因此系统侧通常以 F1 曲线给出的最优置信度阈值作为默认推荐,再允许用户在 UI 中按业务偏好向"更稳(高 Precision)"或"更全(高 Recall)"方向微调。此外,本节对训练收敛过程、跨版本整体对比、以及 mAP 随 epoch 的动态变化进行可视化,分别用于解释"模型是否学得稳定""差距来自哪里""差距是否只是训练过程震荡造成的偶然现象"。
5.3 结果分析与讨论
从阈值敏感性看,F1-Confidence 曲线呈现出典型的"先升后降"形态:在较低置信度阈值下,召回较高但误检较多,F1 被 Precision 拉低;随着阈值上升,误检快速减少,F1 进入平台区;当阈值进一步逼近 1.0 时,漏检急剧增多,F1 出现断崖式下降。图中给出的全类最优点为 F1≈0.98,对应 conf≈0.706 ,这对系统部署具有直接指导意义:若以"计数稳定性优先",建议将默认 conf 设置在 0.65--0.75 区间以抑制误检触发的重复计数;若以"尽量不漏"为主(例如先检出再由跟踪/规则过滤),则可回退到 0.25--0.4,并依赖后续轨迹一致性来抵消噪声。

从类别难度看,PR 曲线显示整体曲线几乎贴近左上角,全类 mAP@0.5 达到 0.990 ;分车型 AP 也维持在较高水平,其中 big-car、big-truck 等类别约 0.995,而 special-car 约 0.973 、small-truck 约 0.988。该现象与数据集统计特征一致:特种车样本数量相对偏少且外观形态差异大,容易与中型车/货车产生边界混淆;小型卡车在不同拍摄角度下车厢结构变化更明显,导致"同类内差异"更大。对工程侧而言,这意味着两类改进最具性价比:一是补齐 special-car 的多视角样本并强化遮挡/反光/夜间增强;二是在 small-truck 上引入更强的局部细节建模(例如更高分辨率训练或更偏向细粒度的增强策略),以降低近似车型间的误判概率。

训练收敛过程进一步解释了为何各模型 mAP@0.5 差距很小:box/cls/dfl 损失在前 20--30 个 epoch 迅速下降并趋于平稳,Precision 与 Recall 在早期即逼近 0.95 以上,mAP@0.5 很快达到 0.98--0.99 的平台,mAP@0.5:0.95 则稳定在 0.87--0.89。换言之,该数据集在 640 640 640 输入下对主干与颈部的表征要求并未形成"强区分度压力",因此跨版本升级更多体现在更严格的 IoU 区间(mAP@0.5:0.95)以及高召回区域的 PR 曲线细微差异,而不是 mAP@0.5 的显著拉开。这也提示训练侧可采用更激进的早停或缩短 epoch,在保持最终指标的同时减少训练成本。
下面给出两组模型在同一评测协议下的量化对比(参数量、FLOPs、推理时间与精度),用于支撑"精度---速度---复杂度"的工程选型。
表5-1 n/tiny 量级模型对比(验证集)
| Model | Params(M) | FLOPs(G) | InfTime(ms) | Precision | Recall | F1 Score | mAP50 | mAP50-95 |
|---|---|---|---|---|---|---|---|---|
| YOLOv5nu | 2.6 | 7.7 | 7.7 | 0.9742 | 0.9903 | 0.9821 | 0.9889 | 0.8725 |
| YOLOv6n | 4.3 | 11.1 | 6.8 | 0.9829 | 0.9682 | 0.9755 | 0.9901 | 0.8692 |
| YOLOv7-tiny | 6.2 | 13.8 | 14.7 | 0.9535 | 0.9348 | 0.9441 | 0.9767 | 0.7966 |
| YOLOv8n | 3.2 | 8.7 | 6.8 | 0.9834 | 0.9734 | 0.9783 | 0.9908 | 0.8698 |
| YOLOv9t | 2.0 | 7.7 | 16.5 | 0.9658 | 0.9730 | 0.9694 | 0.9903 | 0.8817 |
| YOLOv10n | 2.3 | 6.7 | 11.2 | 0.9777 | 0.9680 | 0.9729 | 0.9908 | 0.8766 |
| YOLOv11n | 2.6 | 6.5 | 9.4 | 0.9833 | 0.9802 | 0.9818 | 0.9914 | 0.8750 |
| YOLOv12n | 2.6 | 6.5 | 12.5 | 0.9742 | 0.9842 | 0.9792 | 0.9940 | 0.8746 |

n 量级整体差异:柱状图表明 mAP@0.5 已接近饱和,YOLOv12n 在 mAP@0.5 上略占优势,而 F1 的最高值出现在 YOLOv5nu,说明其在当前数据分布下达到了更均衡的 Precision--Recall 折中。mAP@0.5:0.95 的最优来自 YOLOv9t(表5-1),这通常意味着其框回归在更严格 IoU 区间更稳定,但推理时延明显偏大(16.5ms),若直接用于实时计数可能会降低帧率冗余并放大跟踪断裂风险。结合 mAP 随 epoch 曲线,YOLOv10n 在训练早期波动更明显但后期收敛到平台,这类"前期震荡、后期稳定"的形态提示其更依赖学习率预热与数据增强调度;平均 PR 曲线进一步说明跨模型差距主要集中在高 Recall 末端的小幅下探,v12n/v11n 的曲线在末端更贴近上界,这对"尽量不漏检"更友好。

表5-2 s 量级模型对比(验证集)
| Model | Params(M) | FLOPs(G) | InfTime(ms) | Precision | Recall | F1 Score | mAP50 | mAP50-95 |
|---|---|---|---|---|---|---|---|---|
| YOLOv5su | 9.1 | 24.0 | 8.4 | 0.9747 | 0.9813 | 0.9780 | 0.9881 | 0.8701 |
| YOLOv6s | 17.2 | 44.2 | 8.6 | 0.9542 | 0.9528 | 0.9535 | 0.9840 | 0.8634 |
| YOLOv7 | 36.9 | 104.7 | 23.6 | 0.9575 | 0.9235 | 0.9402 | 0.9701 | 0.7913 |
| YOLOv8s | 11.2 | 28.6 | 7.7 | 0.9659 | 0.9723 | 0.9691 | 0.9893 | 0.8739 |
| YOLOv9s | 7.2 | 26.7 | 18.7 | 0.9845 | 0.9843 | 0.9844 | 0.9898 | 0.8825 |
| YOLOv10s | 7.2 | 21.6 | 11.4 | 0.9799 | 0.9773 | 0.9786 | 0.9911 | 0.8847 |
| YOLOv11s | 9.4 | 21.5 | 9.7 | 0.9858 | 0.9721 | 0.9789 | 0.9917 | 0.8777 |
| YOLOv12s | 9.3 | 21.4 | 13.2 | 0.9842 | 0.9767 | 0.9804 | 0.9902 | 0.8811 |

s 量级结果:柱状图中 YOLOv9s 的 F1 最突出,说明其在当前数据分布上实现了更高的精确率与召回率同步提升;而在更严格的 mAP@0.5:0.95 上,YOLOv10s 最优(表5-2),往往意味着其回归框在不同 IoU 阈值下更鲁棒,这对于计数任务中"框抖动引发的轨迹断裂"具有潜在抑制作用。值得注意的是,YOLOv8s 在推理延迟上最具优势(7.66ms),而 YOLOv11s 在 mAP@0.5 上达到最高值(0.9917)且延迟相对可控(9.74ms),因此若系统目标是桌面端实时展示与计数闭环的稳定运行,YOLOv8s/YOLOv11s 往往会成为更均衡的默认候选;相对地,YOLOv7(大模型)在本任务上既慢且精度不占优,说明"参数堆叠"并不会自动转化为细粒度车型的收益,尤其在数据规模与分布较有限时更是如此。

综合两组实验可以得到一个更贴近工程的结论:在当前数据集与 640 640 640 输入下,mAP@0.5 已高度饱和,跨代升级的主要价值体现在 mAP@0.5:0.95、PR 曲线高 Recall 末端形态,以及推理链路是否足够稳定可控。对"实时计数系统"而言,老思更建议优先选取 时延更低且指标稳定的平台型模型 (例如 n 组的 YOLOv8n/YOLOv11n 或 s 组的 YOLOv8s/YOLOv11s),再通过图5-1给出的阈值规律把 conf 设在 0.65--0.75 的稳定区间,以减少误检驱动的过计数;若场景更强调高 IoU 下的框稳定性(例如需要更严谨的轨迹关联),则可进一步考虑 mAP@0.5:0.95 更优的 YOLOv9t(n 组)或 YOLOv10s(s 组),并在部署侧通过推理加速与异步 UI 刷新抵消其延迟开销。
6. 系统设计与实现
6.1 系统设计思路
本系统面向"车型识别与计数"的桌面端落地场景,整体采用 Python 3.12 作为运行时,以 PySide6 构建交互界面并通过 Qt 信号槽组织跨模块通信,SQLite 负责用户信息、个性化配置与检测结果的持久化。设计上强调"界面交互与推理计算解耦":界面层只负责输入选择、参数配置与结果呈现,推理层封装模型加载、预处理、推理与后处理,统计层在检测结果之上完成分车型与总量计数,并与导出、回放控制等功能形成稳定闭环。

在代码组织上,老思采用三层对象组合来保证可维护性:Ui_MainWindow 聚焦控件布局与样式资源(图标、主题、背景等),MainWindow 作为控制中枢维护状态机(输入源类型、播放进度、阈值与当前模型等),并将按钮事件、滑条变化等交互转化为信号;Detector 作为处理层屏蔽 YOLOv5--YOLOv12 的推理差异,对外输出统一结构的检测结果(框坐标、类别、置信度),从而保证"切换模型"不会牵连界面逻辑。为避免推理阻塞 UI 刷新,视频/摄像头模式通常通过定时器或工作线程驱动帧循环,主线程仅接收结果并完成绘制与表格刷新。
在业务闭环上,输入侧支持摄像头、视频、单图与文件夹批处理;输出侧除检测框与车型标签外,提供按类别与总量统计、阈值(Conf/IoU)在线调整、结果截图/视频保存,以及将结构化结果写入 SQLite 便于后续筛选与复盘。主题修改功能以"样式表 + 资源热切换"为主,允许在不重启的情况下切换浅/深主题、背景与图标风格,并将主题偏好作为用户配置随账户加载,使界面外观与推理能力在工程上保持同等可控。
图 系统流程图

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

账户体系以 PySide6 的独立登录窗口作为入口,通过 SQLite 完成注册写入与登录校验,并在登录成功后加载用户级配置(如默认模型、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 Premaratne P, Kadhim I J, Blacklidge R, Lee M. Comprehensive review on vehicle Detection, classification and counting on highways[J]. Neurocomputing, 2023, 556: 126627.
2 张新钰, 高洪波, 赵建辉, 周沫. 基于深度学习的自动驾驶技术综述[J]. 清华大学学报(自然科学版), 2018, 58(4): 438-444.
3 Wen L, Du D, Cai Z, et al. UA-DETRAC: A new benchmark and protocol for multi-object detection and tracking[J]. Computer Vision and Image Understanding, 2020, 193: 102907.
4 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: 2636-2645.
5 Yang L, Luo P, Loy C C, Tang X. A Large-Scale Car Dataset for Fine-Grained Categorization and Verification[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (CVPR). 2015: 3973-3981.
6 穆亮, 李楠, 史显飞, 等. 基于梯度压缩和YOLO v4算法的车辆识别[J]. 工程科学学报, 2022, 44(3): 271-280.
7 Ren S, He K, Girshick R, Sun J. Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks[J]. IEEE Transactions on Pattern Analysis and Machine Intelligence, 2017, 39(6): 1137-1149.
8 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.
9 Redmon J, Divvala S, Girshick R, Farhadi A. You Only Look Once: Unified, Real-Time Object Detection[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (CVPR). 2016: 779-788.
10 Bochkovskiy A, Wang C Y, Liao H Y M. YOLOv4: Optimal Speed and Accuracy of Object Detection[EB/OL]. arXiv:2004.10934, 2020.
11 Zhang Y, Sun P, Jiang Y, et al. ByteTrack: Multi-object Tracking by Associating Every Detection Box[C]//Computer Vision -- ECCV 2022. Lecture Notes in Computer Science. Springer, 2022.
12 Wang C Y, Yeh I H, Mark Liao H Y. YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information[C]//Computer Vision -- ECCV 2024. Lecture Notes in Computer Science, vol 15089. Springer, 2024: 1-21.
13 Wang A, Chen H, Liu L, et al. YOLOv10: Real-Time End-to-End Object Detection[C/OL]//NeurIPS 2024 (OpenReview). 2024.
14\] Rasheed A F, Zarkoosh M. YOLOv11 optimization for efficient resource utilization\[J\]. The Journal of Supercomputing, 2025, 81: 1085. \[15\] Tian Y, Ye Q, Doermann D. YOLOv12: Attention-Centric Real-Time Object Detectors\[EB/OL\]. arXiv:2502.12524, 2025.