当前位置: 首页 > news >正文

模型选择与配置说明

模型选择与配置说明(Detection / Recognition / Classification)

本文系统说明本项目在“检测(det)/识别(rec)/分类(cls)”三条子任务上的模型选择思路、备选方案对比、输入尺寸与性能取舍、部署格式(ONNX/MNN)、以及在 GUI 与代码层面的配置方式。目标是让读者理解“为什么选它们、如何用、何时替换”,从而在不同算力与场景下做出稳健可复用的决策。


1. 任务拆分与评估指标

  • 检测(Detection):在任意场景中召回车牌,输出矩形框 + 关键点 + 单/双层属性,用于后续几何对齐与裁剪。指标优先级:召回率(Recall)> 精确度(Precision)> 速度(FPS)。
  • 识别(Recognition):从透视对齐后的车牌图块中预测文本序列。指标优先级:准确率(Acc)> 速度(FPS)。
  • 分类(Classification):对车牌颜色/类型进行判别(蓝/黄/绿、单双层等),在界面与后处理上增强可读性与业务判断。指标优先级:准确率 ≈ 速度。

评估采用图片与视频双路径:对图片数据计算 Precision/Recall/F1、对视频采用“内容变化触发”的快照策略观察稳定性与误触发;同时在 GUI 中统一中文可视化,便于比对不同方法(lock/test/rec2)的主客观效果。


2. 部署格式选择:ONNX 优先,MNN 作为移动端备选

  • 统一推理引擎:PC 端与服务器端优先选择 ONNX Runtime(ORT),原因:
    • 跨平台与生态成熟(Windows/Linux/macOS),与 Python 生态适配好;
    • 工程集成简单、性能可接受,便于快速迭代与调试;
    • 本项目已有稳定的 ORT 封装(standalone_modules)。
  • 移动端/嵌入式:保留 MNN 版本模型(见 ModelsPackHyperLPR-master/resource/models),用于 Android/iOS 或 ARM 平台的轻量部署。
  • 结论:PC 端主路径采用 ONNX;端侧或极限算力场景再迁移至 MNN。

3. 检测模型选择(det)

实际使用:~/.hyperlpr3/20230229/onnx/y5fu_320x_sim.onnx(在 GUI 中可覆盖)。输入尺寸默认为 (det_size, det_size),默认 320。该模型是多任务头(Multi-Task)检测器,输出包含:

  • BBox(x1,y1,x2,y2)用于粗定位;
  • 关键点(四个角点)用于后续仿射/透视裁剪;
  • 单/双层指示(layer)用于识别前的结构性判断。

选择理由:

  • 端对端 vs 纯候选:相较“传统候选 + OCR”方案(lock/rec2),学习型检测器在复杂背景、夜间、斜视角、遮挡等场景的召回稳定性更强;
  • 关键点直接输出:避免二次形态学或 Hough 估计,裁剪稳定性与可重复性更好;
  • 小输入也可工作:320×320 兼顾精度与速度,在常见 CPU 上也能实时接近或达到可用;
  • 与 CCPD/CCPD2020 数据分布契合:工程内置了 Hyper2/CCPD2020,该类模型经过相似分布微调,泛化表现较好。

备选方案评估:

  • YOLOv5/YOLOv8/YOLOv10 等通用检测器:
    • 优点:训练生态成熟、工具链完整、速度快;
    • 局限:若不在 Head 中融入关键点与层属性,则需额外回归模块或后处理;端到端维护复杂度上升。
  • PP-YOLO/YOLOX:
    • 优点:部署成熟、性能优秀;
    • 局限:与当前识别/裁剪接口对齐需要额外改造,工程耦合度增加。

最终取舍:采用多任务车牌专用检测器,缩短对齐链路,减少工程胶水代码;在需进一步追求极致 FPS 的 GPU 场景,再考虑 YOLO 家族替换并补齐关键点分支。

输入尺寸策略:

  • 默认 320;对远距离/小目标场景可提升至 416/512 以增强召回;
  • GUI 中提供 det_size 可调,便于在不同视频分辨率与算力下快速试错。

4. 识别模型选择(rec)

实际使用:~/.hyperlpr3/20230229/onnx/rpv3_mdict_160_r3.onnx,输入 (48,160)。模型为 CTC 序列识别范式,字符表覆盖中文省份简称与英数字符,兼容单双层结构。

选择理由:

  • CTC 简洁稳健:无需显式对齐监督,端到端训练后推理简单、速度快、鲁棒性好;
  • 字符表覆盖广:兼容汉字与英数,落地复杂度低,不需要额外语言模型即可达成良好效果;
  • 与检测输出天然对齐:结合四点裁剪后,48×160 的标准化输入能在速度与精度之间取得稳健平衡。

备选方案评估:

  • Attention/Seq2Seq(如 Transformer-based SAR):
    • 优点:对长序列与上下文建模更强;
    • 局限:训练与推理复杂度更高,对端侧算力不友好,小样本域外泛化不一定稳定。
  • PP-OCR 系列(CRNN/ABINet/SVTR 等):
    • 优点:生态完善、开箱即用;
    • 局限:中文省份缩写、单双层混排等特征需要定制化字典与后处理,对现有工程替换成本较高。

最终取舍:在工程复杂度可控与稳定产出优先的前提下,CTC 模型是更稳妥的默认选型;未来若要处理极端模糊/遮挡或复杂上下文,可在实验分支引入注意力增强版模型。

输入与预处理:

  • 统一将裁剪块按长边对齐到 160,短边填充或缩放至 48,保持字符纵向几何比例;
  • 对对比度低与强反光样本,可在裁剪后做轻量增强(Gamma/CLAHE),但默认关闭以保证可复现性。

5. 分类模型选择(cls)

实际使用:~/.hyperlpr3/20230229/onnx/litemodel_cls_96x_r1.onnx,输入 (96,96),为轻量 CNN 分类器,任务包括但不限于:颜色(蓝/黄/绿/白等)、结构(单双层)与特殊类型(新能源等)。

选择理由:

  • 可解释性增强:在 GUI 可直接叠加“类型/颜色”标签,便于质检与业务侧确认;
  • 低耦合:与识别结果相互独立,出现识别不确定时,分类可作为辅助筛选信号;
  • 轻量快速:CPU 端实时开销小,对整体延迟影响有限。

备选方案评估:

  • 将“类型/颜色”融入检测头(多任务检测):
    • 优点:一次前向获得全部属性;
    • 局限:检测头学习任务过多时可能互相牵制,且替换识别模块时易产生联动影响。
  • 文本后验规则替代:
    • 优点:无需新模型;
    • 局限:在照度/白平衡变化大时,规则稳定性差,易出现错分。

最终取舍:保持独立轻量分类器,降低联动风险;必要时可以在“多任务检测”与“独立分类”之间做 A/B 实验。


6. 默认路径与 GUI/代码层配置

默认路径(代码位于 Hyper2/app.py::default_paths):

from os.path import expanduser, join
home = expanduser('~')
det = join(home, '.hyperlpr3', '20230229', 'onnx', 'y5fu_320x_sim.onnx')
rec = join(home, '.hyperlpr3', '20230229', 'onnx', 'rpv3_mdict_160_r3.onnx')
cls = join(home, '.hyperlpr3', '20230229', 'onnx', 'litemodel_cls_96x_r1.onnx')
  • GUI 覆盖:在 Hyper2/gui.py 中的“test 方法选项”可直接填写 det/rec/cls 路径与 det_size
  • 代码调用:method_test_on_image(..., det_path=..., rec_path=..., cls_path=..., det_size=...)
  • 回退机制:若 rec2 在本机缺失识别模型,则仅输出候选可视化(不阻塞流程)。

7. 数据与泛化:为何与 CCPD/CCPD2020 协同

项目目录中包含 Hyper2/CCPD2020 样本(train/val/test),这与我国道路场景分布高度相关:

  • 牌照样式多样:蓝/黄/绿、新能源、单双层等并存;
  • 环境变化显著:白天/夜晚、雨雾、逆光与强反射;
  • 视角/尺度差异大:路口监控、车载、行人视角混合。

因此,我们在模型选择上优先选用对上述变化稳定的架构:

  • 检测器具备关键点回归能力,裁剪鲁棒;
  • 识别器采用 CTC,抗轻微错位与形变;
  • 分类器独立轻量,减少耦合与误差传播。

这套组合在样本域内与相邻域上都较稳健,后续若接入外部数据(如高速收费站、地库入口等),建议:

  • 微调检测器以提升远距小目标召回;
  • 在识别端加入更丰富的字符表或专门处理特殊字符(使馆牌、武警牌等);
  • 扩充分类标签并引入代价敏感训练应对类别不均衡。

8. 速度/精度/开销的工程取舍

  • CPU 实时性:det_size=320 + 轻量 CTC + 轻量分类,单图处理常见 PC 能够流畅;
  • 提升精度:将 det_size 提升到 416/512,但注意推理时间线性增加;
  • 视频节流:通过 frame_stride/snapshot_stride/snapshot_on_change 减少冗余计算与存储;
  • 批处理与多进程:在批量图片或多视频时,可在上层封装多进程/线程以充分利用多核;
  • 量化与蒸馏(可选):
    • ONNX Q/DQ 量化可在 CPU 上提升吞吐,但需关注精度回退;
    • 知识蒸馏用于将更大识别模型的能力迁移到轻量学生模型。

9. 何时替换/升级模型

建议在以下情形评估替换:

  • 场景移植导致召回下降(远距、广角、小目标):优先升级检测器或提升 det_size
  • 频繁出现字符粘连/断裂:尝试更高分辨率裁剪或引入注意力增强识别模型;
  • 新增业务标签(颜色/类型):优先扩充分类器并做少量迁移学习;
  • 移动端部署:切换到 MNN/NCNN 并导出相应格式模型。

替换步骤要点:

  • 保持接口一致(输入尺寸、输出字段),避免改动 GUI 与业务层;
  • 若输出字段有变化(例如新增关键点格式),先在 crop_plate_by_landmarks 或适配层做转换;
  • runs/{method} 下做 A/B 对比,确保新模型在关键场景不退化。

10. 小结

本项目在“检测-识别-分类”三段链路上选择了“多任务检测 + CTC 识别 + 轻量分类”的组合,并以 ONNX 作为主部署格式:

  • 这套搭配兼顾精度、速度与工程可维护性,特别适合通用 PC/服务器侧的快速落地;
  • 通过 GUI 参数化与默认路径回退,降低使用门槛;
  • 在移动端或极限算力场景,保留 MNN 作为替代路径;
  • 随着数据域扩张,可逐步引入更强识别模型或增加分类维度,同时保持接口稳定。

依托统一的中文可视化与视频节流策略,我们能够在不改变使用体验的前提下,对不同模型与参数进行快速对比与切换,形成“可解释、可复现实验 → 稳定部署”的闭环。

http://www.hskmm.com/?act=detail&tid=7434

相关文章:

  • 梯度下降算法
  • 002_文本分类任务的问答
  • 车牌识别
  • 告别人工标注瓶颈!Reward-RAG:用 CriticGPT 打造更懂人类偏好的检索模型
  • Latex 中百分号怎么打
  • 文件上传-条件竞争绕过
  • 文件包含漏洞
  • 9.17 CSP-S模拟23/多校A层冲刺NOIP2024模拟赛19 改题记录
  • Java基本语法
  • 在AI技术快速实现创想的时代,挖掘前端学习新需求成为关键——某知名编程教育平台需求洞察
  • 负载均衡层详解part3-lvs
  • 4. MySQL 索引优化实战
  • 算法课第一周作业
  • 线段树懒标记模板
  • 谁在我这位置遗留或丢失了一颗口罩爆珠(好像是桃子味)?
  • python小计划——学生管理系统
  • C++ 并发
  • UML 5章
  • 《微服务事务管理》 - 教程
  • python之socket udp服务器实现
  • kylin SP3安装mysql 8.4.5
  • Unity中是否可以禁用GC
  • 经典SQL语句大全
  • 开源软件图形库
  • IvorySQL 与 deepin 完成兼容性认证,共创开源生态新篇章
  • 在 Nginx 上搭建静态站点
  • 认真做膜你赛
  • 使用GitHub Dork快速发现漏洞:我的第一个Bugcrowd漏洞挖掘实战
  • kylin SP3安装mysql8.0.41
  • DIFY 项目中通过 Makefile 调用 Dockerfile 并采用 sudo make build-web 命令构建 web 镜像的方法和注意事项