摘要 :开发停车位检测系统 对于提升智慧停车 与城市精细化治理 具有重要意义。本文系统阐述如何基于深度学习 构建一套车位占用检测 与状态可视化 一体化方案,提供完整代码与数据资源 。系统可精准识别图像/视频中的车位框、占用状态与异常停车 ,支持多场景(地面/立体/地下车库、昼夜与雨雾光照变化)与多视角(固定摄像头/移动巡检车);前端以PySide6 实现可配置UI,支持图片、文件夹、视频与摄像头输入,含热力图 、类别统计 、可调Conf/IOU 、结果可视化 与批量导出 ;并设计基于SQLite 的用户注册登录、历史结果管理与可追溯审计。算法层面研究YOLOv12 与YOLOv5--YOLOv11 全系列(共8种)并在UI中一键切换;对特征金字塔/解耦头/注意力机制 等关键组件进行讨论与轻量化改进,给出mAP、F1、PR曲线、训练曲线 等对比分析。本文为智慧停车场景提供可复用工程范式,完整项目代码与数据集链接附于文末,便于读者落地与二次开发。
讲解视频地址 :https://www.bilibili.com/video/BV1V8QuBLEwt/
文章目录
- [1. 前言综述](#1. 前言综述)
- [2. 数据集介绍](#2. 数据集介绍)
- [3. 模型设计与实现](#3. 模型设计与实现)
- [4. 训练策略与模型优化](#4. 训练策略与模型优化)
- [5. 实验与结果分析](#5. 实验与结果分析)
- [6. 系统设计与实现](#6. 系统设计与实现)
-
- [6.1 系统设计思路](#6.1 系统设计思路)
- [6.2 登录与账户管理](#6.2 登录与账户管理)
- [7. 下载链接](#7. 下载链接)
- [8. 参考文献](#8. 参考文献)
1. 前言综述
在智慧交通和城市精细化治理的语境下,停车资源的实时感知与可视化调度是"最后一公里"的关键环节,摄像头为主的视觉方案因复用存量安防基础设施而具备极高的性价比,但要在全天候、多场景、多视角条件下稳定识别车位线、入口开口与占用状态,仍需依赖近年来一阶段目标检测在速度---精度权衡上的系统性进步,如YOLOv4将Mosaic增强、CIoU损失等工程化技巧纳入统一框架,为工程落地提供了模板[1]。后续的YOLOv7在"可训练的免费技巧(trainable bag-of-freebies)"与高效解耦头等方面进一步拉高了实时检测的上限,使得在V100等GPU上实现>30 FPS与较高AP成为现实[2]。进入2024年,YOLOv9以GELAN骨干与PGI(可编程梯度信息)强化训练信号,对轻量与精度的兼顾提供了新范式,适合在停车场景的边缘设备上部署[3];YOLOv10则以一致性双任务分配实现NMS-free的端到端推理,在同等AP下显著降低推理时延,为实时多流车位检测提供了明确路径[4]。开源社区方面,Ultralytics发布的YOLO11在结构与训练流程上做了工程优化,配套生态完善,便于在应用层快速验证与迁移[5]。
国内外研究现状表明,停车视觉任务大致分为两类:其一是"占用分类",通过对每个车位区域裁块进行二分类以判断空/满,典型数据集如PKLot覆盖晴/阴/雨等多气候条件、不同视角,奠定了该方向的评测基线[6];其二是"车位线/开口检测",多以环视(AVM)或俯视图为输入,显式预测L/T型角点或入库口直线,再结合几何先验组装完整车位拓扑,该方向的代表性公共资源包括CNRPark+EXT等多摄像头、多天气的长时序占用数据[7]。更面向停车位拓扑的大规模基准来自同济大学发布的PS 2.0 数据集与DeepPS方法:论文提出基于DCNN的端到端车位线检测框架,并配套了环视合成数据便于大规模监督训练[8]。在"端到端占用检测"方面,VPS-Net将多目标检测与分类解耦,报告在PS 2.0 上精确率/召回率均达99%量级,显示了环视场景下端到端方法的上限潜力[9];而"基于结构先验的DCNN"路线则在入库口直线/角点检测后,通过几何约束还原车位四边形,兼顾了可解释性与鲁棒性[10]。综合观察,不同技术路线在可解释性、对视角变化的敏感度、对密集遮挡的适应性、以及对摄像机变更后的可迁移性方面各有优劣,亟需在统一数据协议与评测指标下进行系统比较与工程化打磨[8]。
为便于读者对代表性工作形成整体把握,老思据文献将部分方法按"算法---数据---优缺点---改进点"归纳如下(非穷尽):
| 算法/年份 | 使用数据 | 主要优点 | 主要不足 | 代表性改进点 |
|---|---|---|---|---|
| DeepPS (2018) | PS 2.0(环视合成) | 面向车位线/角点的端到端建模,配大规模环视数据 | 对真实复杂光照/反射的域偏移敏感 | 更强的数据合成与风格迁移以缩小域差[8] |
| VPS-Net (2020) | PS 2.0 | 占用检测高精高召,适配环视拓扑 | 泛化到未见停车场需再训练 | 多场景自适应与弱监督标签挖掘[9] |
| DCNN+几何重建 (2020) | 自建+PS 2.0 | 利用几何先验、可解释性强 | 对断裂/磨损标线鲁棒性有限 | 引入线段注意/拓扑一致性约束[10] |
| YOLOv7 (2022) | COCO等通用集 | 实时SOTA,易工程化 | 对极小目标与密集遮挡仍有瓶颈 | 细粒度特征融合与解耦头优化[2] |
| YOLOv9 (2024) | COCO等 | GELAN骨干+PGI,训练稳定高效 | 生态配套与端侧部署文档起步期 | 更系统的蒸馏与量化方案[3] |
| YOLOv10 (2024) | COCO等 | NMS-free端到端,显著降时延 | 训练/部署链路需成套工具支持 | 一致性分配与高效设计并行优化[4] |
尽管社区在算法与数据上取得了显著进展,停车位检测依旧面临若干技术难点:其一是"域泛化/长尾鲁棒性",光照、雨雾、玻璃反射与阴影造成的高频背景扰动使得浅层纹理与几何结构易被噪声淹没,通道---空间注意如CBAM可在轻量代价下提升显著特征的响应度[11]。其二是"边缘部署受限",在车库边缘NVR/嵌入式盒子上需在<10--20 ms内完成多流推理,ECA-Net以局部跨通道交互近似全局注意,有助于在不显著增加FLOPs的情况下增强表达能力[12]。其三是"定位损失的收敛与稳定",仅用L1/L2回归易与评测指标脱钩,GIoU通过对无交并框提供非零梯度改善了优化平原问题[13];进一步的DIoU/CIoU将中心距离与长宽比纳入几何因子,能在细粒度定位上加速收敛并提升稳健性[14]。其四是"类别/难例不均衡",停车场景中"空/满/异常占用"等样本比例失衡明显,Focal Loss通过重加权抑制易样本损失,有利于稳定单阶段检测器训练[15]。
博客的主要贡献:本文面向"停车位检测系统"的落地需求,选用最新YOLO族模型(以YOLOv12n为主,可在界面一键切换其他YOLO版本)完成车位线与占用状态的联合检测识别,并在解耦头、注意力与损失项上做轻量改进;针对目标任务自建并标注了一套多场景数据集,完成预处理、增强与划分;基于PySide6实现了美观友好的可视化系统,支持图片/视频/摄像头多源输入、热力图与统计分析、Conf/IOU可调与结果导出;文末提供完整代码与数据资源包,便于复现与二次开发。
主要功能演示:
(1)启动与登录
启动进入登录页,支持注册/登录/找回密码与记住我。账号信息与个性化配置(最近模型、Conf/IOU、主题、最近输入源)存入SQLite;登录后自动恢复上次状态,主界面可随时注销/切换账号并保存本次记录。

(2)多源输入与实时检测(摄像头/视频/图片/文件夹)
支持摄像头(含RTSP)实时检测、视频播放检测、单图快速验证、文件夹批量处理四种入口。结果在画面上叠加车位框/占用状态/置信度,可一键开热力图;统计区同步显示空闲数、占用数、占用率、FPS与延迟,并支持截图、导出CSV或写入数据库。

(3)模型选择与对比演示
界面内置YOLOv5--YOLOv12多版本,支持热切换与不同规模选择。提供同帧分屏对比(看效果差异)与同视频轮换对比(看速度/延迟/显存),并可导出对比报告用于选型与汇报。

(4)主题修改功能
内置浅色/深色/高对比等主题,支持自定义主色、字体与背景;切换即时生效且不影响检测流程。主题随账号保存,重启登录自动加载,并支持主题方案导入/导出。

2. 数据集介绍
本文构建的停车位占用检测数据集共包含 7801 张图像 ,并按照工程中常用的训练流程划分为:训练集 6017 张(约 77.1%) 、验证集 1058 张(约 13.6%) 、测试集 726 张(约 9.3%) 。数据集类别设置为 2 类,分别为 empty(空车位) 与 occupied(已泊车) ,类别中英文映射为:{'empty': "空车位", 'occupied': "已泊车"}。标注采用目标检测的矩形框形式(与 YOLO 标注兼容的归一化框格式:class x_center y_center width height),因此模型可以直接学习"车位区域 + 占用状态"的联合判别。结合给出的样例可见,数据覆盖了室外地面停车区与室内车库等不同场景,存在雨天湿滑反光、光照不均、遮挡与视角倾斜等复杂情况,这些因素能有效检验模型在真实部署环境下的鲁棒性。

python
Chinese_name = {'empty': "空车位", 'occupied': "已泊车"}
从数据分布图来看,类别实例存在一定不均衡:occupied 的实例数明显多于 empty (约为 2:1 的量级),这意味着训练时若不加控制,模型更容易偏向"已泊车"预测;后续可通过损失加权、采样均衡或更强的数据增强缓解该问题。标注框的空间分布呈现出较明显的"结构化布局"特征:框中心点在图像中形成规律的带状/网格状密集区域,符合停车位在固定摄像头视角下的排列形态;同时在宽高分布上,小尺寸车位框占比较高,但仍存在较大尺度的框(视角近处车位或画面裁切导致),说明模型需要具备多尺度检测能力(例如更合理的特征金字塔与小目标分支)。整体而言,该数据集既保留了停车位几何布局的强先验,又引入了多场景成像变化带来的扰动,非常适合作为"停车位检测系统"从训练到部署验证的基准数据支撑。

3. 模型设计与实现
在"停车位检测系统"里,模型的核心目标并不是"找车",而是对每一个车位区域进行定位并判断占用状态 (空车位/已泊车)。这类任务在真实停车场场景中会遇到典型挑战:摄像头俯视导致车位呈梯形/透视变形、车位线与阴影/雨雪反光造成纹理干扰、相邻车位紧密排列导致框间重叠、以及"部分遮挡/半占用"等边界情况。综合准确率、速度与工程落地成本,博主在本系统中选用 YOLOv12n 作为默认基线:一方面它延续 YOLO 一阶段检测的高吞吐推理范式,适合在 PySide6 界面中做实时显示;另一方面,YOLOv12 将注意力机制以更"硬件友好"的方式融入检测框架(如 area attention、FlashAttention 等),在不显著牺牲延迟的前提下提升特征建模能力,更契合车位这种"规则结构目标 + 强背景干扰"的场景。
从网络结构上看,本系统采用典型的 Backbone--Neck--Head 三段式流水线:Backbone 负责从输入图像中提取多层次特征(兼顾车位线条、车身纹理与全局布局),Neck 负责多尺度特征融合以增强不同尺度车位的可分性(远处车位更小、近处车位更大),Head 则将融合后的特征映射为最终预测(边界框 + 类别)。在 YOLOv12 的设计中,关键增益主要来自两块:其一是 Area Attention(A2) ,通过对特征图做简单分区来近似扩大感受野,避免复杂窗口操作带来的速度开销;其二是 R-ELAN,用块级残差与更稳健的聚合路径缓解注意力引入后的优化不稳定,使得从小模型到大模型都更易收敛。
网络的整体思路可以理解为:先在 Backbone 中形成不同分辨率的语义特征(例如 P3/P4/P5),再在 Neck 中进行自顶向下 + 自底向上的融合(类似 FPN/PAN 的信息流),最后在 Head 上对每个位置输出 ((x,y,w,h)) 与两类概率(empty/occupied)。为了更贴合车位检测,本系统在实现时还做了两点工程化取舍:第一,训练与推理统一采用 letterbox 尺度对齐,避免拉伸破坏车位几何形态;第二,界面侧暴露 Conf/IoU 调节,使用户能在"宁可漏检/宁可误检"的不同业务偏好间切换(例如高峰期更关注"已泊车"召回)。
在损失函数建模上,停车位检测属于标准目标检测范式:分类预测为二分类(空车位/已泊车),回归预测为车位框定位。训练时总损失可写为
L = λ b o x L ∗ b o x + λ ∗ c l s L ∗ c l s + λ ∗ o b j L ∗ o b j , \mathcal{L}=\lambda_{box}\mathcal{L}*{box}+\lambda*{cls}\mathcal{L}*{cls}+\lambda*{obj}\mathcal{L}*{obj}, L=λboxL∗box+λ∗clsL∗cls+λ∗objL∗obj,
其中分类通常采用 BCE/CE 形式(对二分类可用 sigmoid + BCE):
L ∗ c l s = − [ y log ( σ ( p ) ) + ( 1 − y ) log ( 1 − σ ( p ) ) ] , \mathcal{L}*{cls}=-\big[y\log(\sigma(p))+(1-y)\log(1-\sigma(p))\big], L∗cls=−[ylog(σ(p))+(1−y)log(1−σ(p))],
边界框回归则常用 IoU 系列损失(例如 CIoU/GIoU),以提升对重叠、尺度与中心偏移的鲁棒性:
L b o x = 1 − CIoU ( b , b ^ ) , \mathcal{L}_{box}=1-\text{CIoU}(b,\hat b), Lbox=1−CIoU(b,b^),
这里 (b) 为预测框,(\hat b) 为标注框。对于密集排列的车位,IoU 类损失的优势在于:当相邻车位框发生贴边甚至轻微交叠时,它能直接以"框间几何一致性"驱动优化,减少仅靠 L1/L2 带来的不稳定梯度。
正则化与超参数方面,本系统遵循 YOLO 训练的"强增强 + 稳优化"思路:网络中大量使用 BN 以稳定分布,配合 weight decay 抑制过拟合;数据层面使用 Mosaic、颜色扰动、随机尺度等增强,让模型适应白天/夜晚、阴影/反光、雨天噪声等域偏移;优化器与学习率策略上采用 Ultralytics/YOLO 系列常见的 warmup + 余弦/线性衰减配置,以保证前期快速进入有效学习区间、后期平稳收敛。需要强调的是:停车场画面往往"背景占比极高",若增强过强可能引入不真实纹理,博主通常会在训练后期逐步减弱 Mosaic,以提升对真实细节(车位线、轮廓边缘)的对齐能力。
工程实现上,Detector 模块封装了"权重加载→预处理→推理→后处理→可视化"完整链路:加载 yolo12n.pt(或用户切换的其它 YOLO 权重)后,将输入源(摄像头/视频/图片/文件夹)统一转换为张量并做 letterbox;推理输出经过置信度筛选与 NMS/IoU 合并后,得到最终车位框与类别;再依据 Chinese_name={'empty':"空车位",'occupied':"已泊车"} 将标签映射为中文显示,并把类别统计同步到 UI 侧,实现"结果展示 + 统计面板 + 参数可调"的闭环体验。
网络示意图如下:

4. 训练策略与模型优化
在训练阶段,老思将"停车位检测"视为典型的密集目标检测任务:同一画面中车位数量多、相邻框间距小,且雨天反光、阴影遮挡、夜间噪声会显著拉低泛化能力。因此整体策略遵循"先用强增强学鲁棒性,后用弱增强抠细节"的节奏:训练前期充分打开 Mosaic/颜色扰动/随机尺度等增强,让模型适应多天气、多光照与多视角;训练后期逐步减弱或关闭 Mosaic(close_mosaic),把优化重心回到车位边缘、车位线与车辆轮廓等细粒度信息上,以提升定位精度与边界判别稳定性。对于输入分辨率,默认采用 640 的方形输入并配合 letterbox 等比缩放,尽量避免几何拉伸破坏车位的透视结构;同时启用多尺度训练(multi-scale)可以让模型对远处小车位与近处大车位保持一致的召回能力。
训练流程上,默认加载 YOLOv12n 的预训练权重进行迁移学习:先冻结少量底层层级或使用较小初始学习率,使网络快速对齐停车场域的纹理分布;随后全量解冻并进入稳定收敛阶段。优化器由框架自动选择(常见为 SGD/AdamW 的折中配置),搭配 warmup 预热避免前期梯度震荡;学习率采用余弦衰减更利于后期"慢收敛、少抖动",其形式可写为
l r ( t ) = l r 0 ⋅ ( l r f + 1 − l r f 2 ( 1 + cos ( π t / T ) ) ) , lr(t)=lr_0\cdot\Big(lrf+\frac{1-lrf}{2}\big(1+\cos(\pi t/T)\big)\Big), lr(t)=lr0⋅(lrf+21−lrf(1+cos(πt/T))),
其中 (T) 为总迭代步数,(lrf) 为最终学习率比例。为进一步提升稳定性与泛化,训练中常规开启 EMA(指数滑动平均)权重、混合精度 AMP(减少显存占用并提升吞吐)、以及 early stopping(patience)在验证集长期无提升时提前停止,避免过拟合与无效训练消耗。结合你给出的数据集分布(occupied 明显多于 empty),分类分支还建议启用类别均衡策略(如适度重加权或更强的随机采样),以降低模型对多数类的偏置。
为了让模型更适合在系统端实时运行,部署侧的优化与训练同样配套:推理默认启用 FP16(半精度)可显著降低延迟;导出 ONNX 后再转 TensorRT 可进一步提升吞吐并稳定多流检测;如果目标是更低端的边缘设备,还可以在不明显损伤 mAP 的前提下做结构化剪枝或 INT8 量化(配合小规模校准集),实现"以少量精度换取大幅速度"。在 UI 端,Conf/IOU 阈值被设计为可实时调参:当业务更关注"宁可误检也不漏检"时调低 Conf、适度提高 IOU 合并强度;当更关注"误报成本高"时提高 Conf,并收紧 IOU 以减少相邻车位的框干扰,这使得同一模型可以快速适配不同停车场的运营偏好。
训练默认配置(可直接复现,GPU:RTX 4090):
| 参数 | 设定 |
|---|---|
| epochs | 120 |
| batch | 16 |
| imgsz | 640 |
| pretrained | true |
| lr0 / lrf | 0.01 / 0.01 |
| momentum / weight_decay | 0.937 / 0.0005 |
| warmup_epochs | 3.0 |
| mosaic / close_mosaic | 1.0 / 10 |
| patience | 50 |
以上策略的核心目的很明确:前期用增强覆盖复杂成像条件,后期用精细优化对齐车位边界与占用判别,再通过半精度与 TensorRT 等手段把训练得到的精度优势"原封不动"地搬到实时系统里。
5. 实验与结果分析
(1)实验设计与对比设置
本节在 ParkingSpacesv2 数据集(2 类:空车位 empty 、已泊车 occupied )上进行统一对比,训练/验证/测试划分分别为 6017/1058/726 。为保证公平性,所有模型尽量使用一致的训练策略(输入尺寸 640、训练轮次 120、Mosaic 前强后弱、预训练权重初始化等),并在同一数据划分上评估。对比模型覆盖 YOLO 系列主流版本:
- n_type(轻量/实时优先):YOLOv5nu、YOLOv6n、YOLOv7-tiny、YOLOv8n、YOLOv9t、YOLOv10n、YOLOv11n、YOLOv12n
- s_type(精度优先) :YOLOv5su、YOLOv6s、YOLOv7、YOLOv8s、YOLOv9s、YOLOv10s、YOLOv11s、YOLOv12s
训练使用 RTX 4090(见第 4 节默认配置),而推理耗时统计来自你记录的 RTX 3070 Laptop GPU(8GB) 环境(CSV 内附设备行),便于体现"真实部署侧"的速度差异。
(2)度量指标
检测任务主要从"准确性 + 召回能力 + 综合表现 + 检测质量"四个维度评估:
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
其中 (TP/FP/FN) 分别表示正确检出/误检/漏检数量。mAP 采用目标检测通用指标:mAP@0.5 与 mAP@0.5:0.95 (更严格、对定位更敏感)。速度方面记录 Pre/Inf/Post 三段耗时,并用
FPS ≈ 1000 t pre + t inf + t post \text{FPS}\approx\frac{1000}{t_{\text{pre}}+t_{\text{inf}}+t_{\text{post}}} FPS≈tpre+tinf+tpost1000
估计单流吞吐能力(越大越快)。
(3)实验结果与可视化分析
a)整体对比(n_type / s_type)
从整体指标看,除了 YOLOv7 系列在本任务上明显偏弱外,其余 YOLOv6/8/9/10/11 均能在该数据集上达到较高 mAP 与 F1。下表给出两组模型的关键数值(FPS 为基于 Pre+Inf+Post 的估算吞吐):
n_type 结果汇总:
| Model | Params(M) | FLOPs(G) | FPS | F1 Score | mAP50 | mAP50-95 |
|---|---|---|---|---|---|---|
| YOLOv5nu | 2.6 | 7.7 | 91.4 | 0.932 | 0.943 | 0.864 |
| YOLOv6n | 4.3 | 11.1 | 96.7 | 0.951 | 0.979 | 0.895 |
| YOLOv7-tiny | 6.2 | 13.8 | 47.4 | 0.796 | 0.858 | 0.728 |
| YOLOv8n | 3.2 | 8.7 | 98.3 | 0.952 | 0.981 | 0.898 |
| YOLOv9t | 2.0 | 7.7 | 50.8 | 0.954 | 0.981 | 0.893 |
| YOLOv10n | 2.3 | 6.7 | 71.7 | 0.949 | 0.980 | 0.908 |
| YOLOv11n | 2.6 | 6.5 | 77.1 | 0.953 | 0.981 | 0.898 |
| YOLOv12n | 2.6 | 6.5 | 63.5 | 0.929 | 0.939 | 0.865 |
s_type 结果汇总:
| Model | Params(M) | FLOPs(G) | FPS | F1 Score | mAP50 | mAP50-95 |
|---|---|---|---|---|---|---|
| YOLOv5su | 9.1 | 24.0 | 81.7 | 0.953 | 0.981 | 0.904 |
| YOLOv6s | 17.2 | 44.2 | 81.6 | 0.942 | 0.966 | 0.900 |
| YOLOv7 | 36.9 | 104.7 | 33.9 | 0.813 | 0.885 | 0.775 |
| YOLOv8s | 11.2 | 28.6 | 87.8 | 0.956 | 0.981 | 0.907 |
| YOLOv9s | 7.2 | 26.7 | 45.1 | 0.959 | 0.984 | 0.909 |
| YOLOv10s | 7.2 | 21.6 | 70.5 | 0.957 | 0.983 | 0.916 |
| YOLOv11s | 9.4 | 21.5 | 74.2 | 0.962 | 0.983 | 0.918 |
| YOLOv12s | 9.3 | 21.4 | 59.7 | 0.933 | 0.944 | 0.878 |
结合速度与精度的"落地视角",可以得到几条很实用的结论:
- 实时优先(n_type) :YOLOv8n 在保持 mAP50≈0.981、F1≈0.952 的同时,给出最高的 FPS≈98,是"速度---精度"最均衡的选择;YOLOv6n也很接近。
- 定位更严格(看 mAP50-95) :n_type 中 YOLOv10n 的 mAP50-95=0.908 为最高,且它的 PostTime 最小(约 0.63ms),说明后处理开销更低,对 UI 实时渲染更友好。
- 精度优先(s_type) :YOLOv11s 在综合指标上最突出(F1=0.962、mAP50-95=0.918),适合作为"高精度档"的默认部署;若更在乎速度,YOLOv8s 的 FPS 更高且精度损失很小。

- 关于 YOLOv9 的"参数少但偏慢" :例如 YOLOv9t/YOLOv9s 的 Params 并不大,但 InfTime 较高(结构算子/实现路径导致的实际吞吐差异),这提醒我们:选型不能只看参数量,必须结合端侧耗时。
下面两张对比柱状图(F1 与 mAP@0.5)能更直观看到各模型差距(如下图所示):
n_type 对比柱状图

s_type 对比柱状图

b)训练收敛与泛化(以训练曲线为例)
从训练过程曲线(loss 与指标随 epoch 变化)可以看到:train/val 的 box/cls/dfl loss 均稳定下降,且验证指标(Precision、Recall、mAP)在前期快速上升、后期趋于平稳,整体没有明显"训练集继续变好但验证集变差"的发散迹象,说明当前增强与正则策略对该数据集是匹配的(如下图所示)。
训练过程曲线 results.png

c)阈值选择:F1--Confidence 曲线
部署时 Conf 阈值直接决定"误报 vs 漏报"的权衡。由 F1-Confidence 曲线 可读出:全类别最佳点约为 F1=0.93,Conf≈0.467 (如下图所示),这也解释了系统里把默认 Conf 设在 0.45--0.50 区间通常更稳:低于该范围容易引入大量低置信度框造成误报;高于 0.8 后 F1 下降明显,主要是 Recall 被压低,漏检会快速增多。
** F1-Confidence 曲线**

d)PR 曲线与类别差异(empty vs occupied)
PR 曲线显示两类都能在较高召回下保持高精度,但在接近满召回时精度会陡降,这是检测任务的典型现象:为了"捞回"极难样本,模型必须接受更多低置信度预测,从而带来 FP 激增。类别层面,occupied(已泊车)的 AP 略高于 empty(空车位)(如下图所示),一个直观原因是"已泊车"往往具有更强的外观与遮挡线索,而"空车位"更依赖车位线/地面纹理,在雨天反光或夜间噪声下更容易被背景吞没;再叠加你数据集中 occupied 实例更多的分布特征,模型对 occupied 的学习通常更充分。
** PR 曲线**

小结(给系统落地的直接建议)
如果你的系统主打"实时多路视频 + UI 流畅",YOLOv8n / YOLOv8s 是非常稳的默认选择;如果你更关注严格定位质量与综合指标上限,**YOLOv10 / YOLOv11(尤其 s 档)**更占优势;而 Conf 阈值建议默认落在 0.47 左右,并在 UI 中保留可调入口,让不同停车场业务能快速切换"更少误报"或"更少漏检"的偏好。
6. 系统设计与实现
6.1 系统设计思路
本系统面向"停车位检测"的工程落地,采用"界面层---控制层---处理层---数据层 "的解耦式架构:界面层负责可视化呈现与交互输入,控制层负责状态机与业务编排,处理层承载 YOLO 推理与后处理,数据层负责用户与结果的持久化管理。典型类分工清晰:Ui_MainWindow 仅定义按钮、标签、表格、绘图区等界面元素与布局;MainWindow 作为控制中枢管理槽函数、运行状态(播放/暂停/批量任务进度)、阈值参数(Conf/IOU)、模型切换与多源输入切换;Detector 作为处理核心封装"加载权重→预处理→推理→NMS/统计→可视化绘制/热力图"的完整链路,并对外提供统一的 infer(frame, conf, iou, model_id) 接口,保证 UI 不关心模型细节即可完成调用。

跨层通信采用 PySide6 的 信号-槽 机制来实现低耦合与可维护性:控制层将"输入帧、参数、模型选择"等封装为信号投递给推理工作线程(QThread/QRunnable),推理线程返回"检测框列表、类别统计、耗时信息、渲染帧"等结果信号给主线程刷新 UI,从而避免主线程阻塞导致界面卡顿。在多源输入上,系统把摄像头/视频/图片/文件夹统一抽象为 FrameProvider(迭代器式供帧),配合队列完成解码与推理的解耦;同时提供播放控制(暂停、逐帧、跳转)、批处理进度、异常重试等工程能力,使同一套推理管线可稳定覆盖实时与离线两种模式。
数据层以 SQLite 为中心,围绕"用户体系 + 结果归档 + 配置恢复"形成闭环:用户表用于注册/登录校验与头像/密码维护;配置表用于保存每个账号的主题、最近模型、阈值、窗口布局等偏好;结果表用于记录每次检测的输入源标识、时间戳、统计指标与导出路径,支持后续按用户/时间/来源筛选回溯。输出侧同时支持"图片/视频写盘 + CSV 汇总 + 数据库入库",并在 UI 中提供一键导出与可追溯查询,让系统不仅能"跑起来",也能"管起来、查得到"。
图1 系统流程图

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

登录与账户管理的设计目标是让"检测能力"具备可运营的使用形态:系统以 SQLite 将注册/登录与权限隔离落到数据层,确保不同用户拥有独立的主题、模型选择、Conf/IOU 参数与历史结果空间;登录成功后自动加载用户配置并与主检测流程无缝衔接,使用户一进入主界面即可在既定偏好下开始多源检测;当用户在运行过程中修改头像、密码或界面主题、默认模型等偏好时,配置会被即时写回数据库并在下次登录自动恢复,从而把"个性化体验、结果可追溯、设置可复现"固化为系统能力,显著降低多账号、多终端场景下的运维与使用成本。

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

完整资源中包含数据集及训练代码,环境配置与界面中文字、图片、logo等的修改方法请见视频,项目完整文件请见项目介绍及功能演示视频处给出:➷➷➷
项目介绍地址: https://my.feishu.cn/wiki/Qia7wSaeHivwyNkEVLpc86r2n3b
讲解视频地址 :https://www.bilibili.com/video/BV1V8QuBLEwt/
功能效果展示视频:YOLOv5至YOLOv12升级:交通标志识别系统的设计与实现(完整代码+界面+数据集项目)
环境配置博客教程:(1)Pycharm软件安装教程;(2)Anaconda软件安装教程;(3)Python环境配置教程;
或者环境配置视频教程:(1)Pycharm软件安装教程;(2)Anaconda软件安装教程;(3)Python环境依赖配置教程
数据集标注教程(如需自行标注数据):数据标注合集
8. 参考文献
1\] Bochkovskiy A, Wang C-Y, Liao H-Y M. YOLOv4: Optimal Speed and Accuracy of Object Detection\[EB/OL\]. arXiv:2004.10934, 2020.
\[2\] 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\[EB/OL\]. arXiv:2207.02696, 2022.
\[3\] Wang C-Y, Yeh I-H, Liao H-Y M. YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information\[C\]//ECCV 2024. Cham: Springer, 2024.
\[4\] Wang A, Chen H, Liu L, et al. YOLOv10: Real-Time End-to-End Object Detection\[EB/OL\]. arXiv:2405.14458, 2024.
\[5\] Ultralytics. YOLO11 Overview\[EB/OL\]. 2024-09-10.