0%

车牌识别AI技术的思考

车辆牌照的识别是基于图像分割和图像识别理论,对含有车辆号牌的图像进行分析处理,从而确定牌照在图像中的位置,并进一步提取和识别出文本字符。

识别步骤概括为:车牌定位、车牌提取、字符识别。三个步骤相辅相成,各自的有效性都较高,整体的识别率才会提高。

车牌检测

主要分为2种技术方向来分析:

  1. 回归框检测;
  2. 关键点检测

传统图像分割 基于边缘、颜色、形状特征,或使用HOG、LBP、Haar特征提取方法, 受环境(亮度、对比度等)、场景影响严重,这里按下不表。

车牌检测:回归框

单阶段目标检测:使用one-stage检测算法定位车牌。

优势:

  • 框架简单;
  • 检测速度快,适用于多车牌。

不足:

  • 受车牌角度影响严重,适用于角度变化不大的场景

车牌检测:关键点

MTCNN:图像金字塔 + cascade CNN

优势:

  • 整体模型小,存储及显存占用小;
  • 推理速度与车牌数量相关,车牌数量少时推理速度快;

不足:

  • 受第一个阶段的影响,车牌的角度也受一定的限制(可设置H:W=1:3或3:5等),或者需要额外设计第一阶段的车牌recall方式;
  • 整个训练流程分为3个阶段,比较繁琐,特别需要联合调参以达到商业指标;
  • 需要支持batch推理模式,才能发挥出MTCNN的推理速度优势;

Deepercut/ Pose Residual Network/ OpenPose:全卷积得heatmap + 关键点归属

优势:

  • 速度较快;
  • 不限车牌数;
  • 精度可以;

(Stack) Hourglass:Hourglass系列

优势:

  • 可以与单阶段目标检测结合,加上关键点检测;也可直接作为端到端关键点检测(associative embedding);
  • 检测精度高;

不足:

  • 整体模型较大,速度慢;
  • 结构设计时,限定了检测的车牌数上限;

两阶段top-down关键点检测:检测算法+CNN/CPN/stack hourglass等

优势:

  • 在多车牌场景下,可以获得高准确率及召回率;
  • 设计灵活;

不足:

  • 没形成端到端模型,训练/优化麻烦;

车牌检测总结

  • 具有极致的速度要求和角度较小的单一场景,可以考虑使用单阶段目标检测算法。
  • 若车牌角度变化大:则使用关键点检测算法;
    • 若有速度要求,单车牌场景可考虑两阶段关键点检测,多车牌场景可考虑Deepercut、Pose Residual Network/openpose;
    • 若对算力约束不大,角度要求高,多车牌,则可考虑使用复杂二阶段关键点检测、stack hourglass变种等算法。

车牌识别

GRU/bi-LSTM + CNN + CTC Loss

优势:

  • 先验的空间分割(但对双层车牌,这个先验则变成劣势)
  • 空间上下文信息(这个信息较少,应该就只有两个: 省份简称和首字母、剩余5位车牌中最多2位是字母)

不足:

  • 中国车牌不同位置的字符具有不同取值集合,而RNN结构将这些值集放到一起进行预测, 失去了不同位的值集先验,并且提升了类别失衡的风险;
  • RNN结构使得推理最后分类部分有时序耦合作用,降低推理速度;

多标签多分类

优势:

  • 速度快;
  • 结构灵活

不足:

  • 没有运用字符间的空间信息

其他方案

检测与识别端到端优化(如CCPD论文)

优势:

  • 端到端训练与推理;

不足:

  • 没法引入其他车牌进行车牌侧的优化;
  • 不算是主流方法,精度待验证;

检测+字符分割+识别

优势:

  • 复用不同位置的字符样本
  • 单字符识别更加容易

不足:

  • 需要进行字符分割;
  • 多字符分别识别(也可作为batch),影响速度;
  • 类别失衡和位置集合信息丢失;
感谢对原创的支持~