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

传知代码-自动车牌识别检测系统(论文复现)

代码以及视频讲解

本文所涉及所有资源均在传知代码平台可获取

YOLO V8实现多种车牌检测+识别!

在这里插入图片描述

一、概述

使用yolov8进行车牌检测(训练+测试+演示+部署)

二、支持类型

我们的车牌识别检测系统支持多种类型的车牌
具体支持类型如下:
1.单行蓝牌
2.单行黄牌
3.新能源车牌
4.白色警用车牌
5.教练车牌
6.武警车牌
7.双层黄牌
8.双层白牌
9.使馆车牌
10.港澳粤Z牌
11.双层绿牌
12.民航车牌

三、车牌检测训练

  1. 下载CCPD数据集,本文附件已经进行了标签,生成train.txt和test.txt标签文件;
  2. 修改ultralytics/datasets/yolov8-plate.yaml train和val路径,换成你的数据路径:
train: /mnt/mydisk/xiaolei/plate_detect/new_train_data # train images (relative to 'path') 4 images
val: /mnt/mydisk/xiaolei/plate_detect/new_val_data # val images (relative to 'path') 4 images
  1. 训练
yolo task=detect mode=train model=yolov8s.yaml  data=./ultralytics/cfg/datasets/plate.yaml epochs=120 batch=32 imgsz=640 pretrained=False optimizer=SGD 

四、YOLO V8介绍

YOLO V8一种用于实时检测飞行物体的通用模型,可用于迁移学习和进一步研究,以及一种改进的模型,可实现飞行物体检测的最新结果。我作者通过在包含40个不同类别飞行物体的数据集上训练我们的第一个(广义)模型来实现这一点,迫使模型提取抽象的特征表示。然后使用这些学习到的参数对更能代表“真实的世界”环境的数据集(即更高频率的遮挡、非常小的空间尺寸、旋转等)进行迁移学习。同时,生成精细模型飞行物体的目标检测仍然是具有挑战性的,以及大物体的变化空间大小/纵横比,速度,遮挡,和集群的背景。为了解决一些挑战,同时最大限度地提高性能,作者提出了当前最先进的单次检测器YOLOv 8,试图找到推理速度和平均精度(mAP)之间的最佳权衡。

  • 损失函数和更新规则
    广义损失函数和权重更新过程可以定义如下:

L ( θ ) = λ box N pos L box ( θ ) + λ cls N pos L cls ( θ ) + λ dfl N pos L dfl ( θ ) + ϕ ∥ θ ∥ 2 2    ( 1 ) L(\theta) = \frac{\lambda_{\text{box}}}{N_{\text{pos}}}L_{\text{box}}(\theta) + \frac{\lambda_{\text{cls}}}{N_{\text{pos}}}L_{\text{cls}}(\theta) + \frac{\lambda_{\text{dfl}}}{N_{\text{pos}}}L_{\text{dfl}}(\theta) + \phi\frac{\|\theta\|^2}{2} \ \ (1) L(θ)=NposλboxLbox(θ)+NposλclsLcls(θ)+NposλdflLdfl(θ)+ϕ2θ2  (1)

V t = β V t − 1 + ∇ θ L ( θ t − 1 )    ( 2 ) V_t = \beta V_{t-1} + \nabla_{\theta}L(\theta_{t-1})\ \ (2) Vt=βVt1+θL(θt1)  (2)

θ t = θ t − 1 − η V t    ( 3 ) \theta_t = \theta_{t-1} - \eta V_t \ \ (3) θt=θt1ηVt  (3)
(1)是包含个体损失权重和具有权重衰减的正则化项的广义损失函数,(2)是具有动量β的速度项,以及(3)是具有η作为学习率的权重更新规则

具体的YOLOv8损失函数可以定义为:

L = λ box N pos ∑ x , y ( 1 c x , y ∗ ( 1 − q x , y + ) ∥ b x , y − b ^ x , y ∥ 2 2 ρ 2 + α x , y ν x , y ) L = \frac{\lambda_{\text{box}}}{N_{\text{pos}}} \sum_{x,y} \left( 1_{c^*_{x,y}} \left(1-q_{x,y}^+\right) \frac{\|b_{x,y} - \hat{b}_{x,y}\|^2}{2\rho^2} + \alpha_{x,y} \nu_{x,y} \right) L=Nposλboxx,y(1cx,y(1qx,y+)2ρ2bx,yb^x,y2+αx,yνx,y)

$$

  • \frac{\lambda_{\text{cls}}}{N_{\text{pos}}} \sum_{x,y} \sum_{c \in \text{classes}} \left( y_c \log(\hat{y}_c) + (1 - y_c) \log(1 - \hat{y}_c) \right)
    $$

$$

  • \frac{\lambda_{\text{dfl}}}{N_{\text{pos}}} \sum_{x,y} \left( 1_{c^*{x,y}} \left[ - (q{(x,y)+1} - q_{x,y}) \log(\hat{q}{x,y}) + (q{x,y} - q_{(x,y)-1}) \log(\hat{q}_{(x,y)+1}) \right] \right)
    $$

具体解释如下:

  1. IoU
    q x , y = IoU x , y = β x , y ∩ β ^ x , y β x , y ∪ β ^ x , y q_{x,y} = \text{IoU}_{x,y} = \frac{\beta_{x,y} \cap \hat{\beta}_{x,y}}{\beta_{x,y} \cup \hat{\beta}_{x,y}} qx,y=IoUx,y=βx,yβ^x,yβx,yβ^x,y
    q x , y q_{x,y} qx,y 表示在位置 ( x , y ) (x,y) (x,y) 处的交并比 I o U IoU IoU,即预测边界框 β ^ x , y \hat{\beta}_{x,y} β^x,y 与真实边界框 β x , y \beta_{x,y} βx,y 之间的交集和并集之比。

  2. 纵横比损失
    ν x , y = 4 π 2 ( arctan ⁡ ( w x , y h x , y ) − arctan ⁡ ( w ^ x , y h ^ x , y ) ) 2 \nu_{x,y} = \frac{4}{\pi^2} \left( \arctan\left(\frac{w_{x,y}}{h_{x,y}}\right) - \arctan\left(\frac{\hat{w}_{x,y}}{\hat{h}_{x,y}}\right)\right)^2 νx,y=π24(arctan(hx,ywx,y)arctan(h^x,yw^x,y))2
    这个公式计算预测框和真实框的纵横比差异,并将其作为损失的一部分。

  3. 权重因子
    α x , y = ν x , y 1 − q x , y \alpha_{x,y} = \frac{\nu_{x,y}}{1 - q_{x,y}} αx,y=1qx,yνx,y
    这个权重因子用于对损失函数中的各个部分进行加权,结合 IoU 和纵横比信息。

  4. 预测的类别概率
    y ^ c = σ ( ⋅ ) \hat{y}_c = \sigma(\cdot) y^c=σ()
    这里的 y ^ c \hat{y}_c y^c 是通过 sigmoid 函数 σ ( ⋅ ) \sigma(\cdot) σ() 计算得到的预测类别概率。

  5. 预测的 IoU 分数
    q ^ x , y = softmax ( ⋅ ) \hat{q}_{x,y} = \text{softmax}(\cdot) q^x,y=softmax()
    这个公式表示使用 softmax 函数来计算预测的 IoU 分数。

符号说明:

  • N pos N_{\text{pos}} Npos 表示包含目标的网格单元的总数。
  • 1 c x , y ∗ 1_{c^*_{x,y}} 1cx,y 是指示函数,用于标识包含目标的网格单元。
  • β x , y \beta_{x,y} βx,y 是表示真实边界框的元组,包括 (x 坐标, y 坐标, 宽度, 高度)。
  • β ^ x , y \hat{\beta}_{x,y} β^x,y 是相应网格单元的预测框。
  • b x , y b_{x,y} bx,y 是表示真实边界框中心点的元组。
  • y c y_c yc 是类别 c 的真实标签(不是网格单元 c),适用于输入中的每个网格单元 (x,y),无论是否存在目标。
  • q ( x , y ) + / − 1 q(x,y)+/-1 q(x,y)+/1 是最近的预测框 IoU(左和右)在 c x , y ∗ c^*_{x,y} cx,y 中。
  • w x , y w_{x,y} wx,y h x , y h_{x,y} hx,y 分别是边界框的宽度和高度。
  • ρ \rho ρ 是覆盖预测框和真实框的最小包围框的对角线长度。

每个网格单元然后确定其最合适的候选者来预测目标的边界框。这个损失函数包括由 Zheng 等人提出的完整 IoU(CIoU)损失作为框损失,标准的二元交叉熵作为分类损失(允许每个单元预测多个类别),以及 Li 等人提出的分布焦点损失作为第三项。
在这里插入图片描述

五、车牌识别

  1. 环境配置
    WIN 10 or Ubuntu 16.04
    PyTorch > 1.2.0 (may fix ctc loss)?
    yaml
    easydict
    tensorboardX

  2. 下载数据集车牌识别数据集CCPD+CRPD,本文已经帮大家打好标签并在附件中/datasets目录下提供标签文件;

  3. 将train.txt val.txt路径写入lib/config/360CC_config.yaml 中

DATASET:
  DATASET: 360CC
  ROOT: ""
  CHAR_FILE: 'lib/dataset/txt/plate2.txt'
  JSON_FILE: {'train': 'datasets/train.txt', 'val': 'datasets/val.txt'}
  1. 训练
python train.py --cfg lib/config/360CC_config.yaml

六、测试效果


python demo.py --model_path saved_model/best.pth --image_path images/test.jpg
                                   or your/model/path

七、demo结果展示

在这里插入图片描述

附件说明

附件内容包括已训练好的模型(.pt)文件,用于测试demo效果,以及重新标注的数据,分为3类(train.txt, test.txt, val.txt),推理代码onnx/yolov8_plate_onnx_infer.py

源码下载


http://www.kler.cn/news/342870.html

相关文章:

  • 【HTML】制作一个简易图片轮播器
  • 简单的网络爬虫爬取视频
  • PyQt 的Tree Widget中拖放和点击的异常行为
  • 【LeetCode】动态规划—673. 最长递增子序列的个数(附完整Python/C++代码)
  • 014 属性分组
  • 牛客SQL29详解 计算用户的平均次日留存率
  • MySQL数据库表分区
  • DBO-BP回归预测 | MATLAB实现DBO-BP蜣螂优化算法优化神经网络多输入单输出回归预测
  • 20241011给荣品RD-RK3588-AHD开发板刷荣品预编译的Buildroot之后打开AP6275P的BT【命令行】
  • 单通道 LVDS 差分线路接收器MS21112S
  • 10.10 工作笔记
  • go 的 timer reset
  • 报错笔记
  • 基于模型的强化学习方法4大类灌水范式
  • 分布式常见面试题总结
  • 视频如何转换mp4模式?格式转换软件带你高清无损一秒转换
  • 猫头虎分享:Python库 Django 的简介、安装、用法详解入门教程
  • CANoe_调用C#控件的方法_DEMO方法演示
  • R知识图谱1—tidyverse玩转数据处理120题
  • 在 Linux 上使用 GPG 加解密文件