License Plate Recognition(车牌识别)基本介绍

车牌识别,目标是准确识别图片中所拍到的车牌的信息,现在在各大停车场已经很常见了。
在车牌识别中,比较大的挑战就在于拍摄角度的不同、距离的差异、光线的差异、包括雨雾天气等的影响会导致抓取的照片或帧的清晰度很差。
车牌的识别整体主要分为两部分,车牌的检测和牌照的识别在本文中,主要介绍牌照识别。

牌照识别

牌照识别,其实可以看做OCR(Optical Character Recognition)文字识别中的一个小类,它相比文字识别而言,简单的地方在于车牌上一共会出现的字符(文字、字母、数字)的最大长度基本固定,而且在中国包含的字符总类别也仅仅只有省会的简称文字、英文字母和10个数字。所以相比公用的OCR牌照识别中的在最后需要判断的类别信息会很少。所以在市场上,车牌识别的准确率和稳定性也高于其他场景的OCR。

基于CNN的牌照识别的基本知识

因为之前博主对其他的牌照所使用一些基本技巧没有了解过,所以本文记录的主要是LPRNet所有用的一些基本知识,主要分为LOSS的解读以及Spatial Transformer Layer。

loss

CTC LOSS(Connectionist Temporal Classification Loss)主要是为了解决不对齐的分类问题。在我们常用的多分类问题中,我们常用的loss就是softmax loss,它有一个先天的限制,就是维度对齐,例如,你在OCR中要一段图片分成4个字符,那么在你要对齐四个字符出现在图片中的位置,不然你提取的语义信息会差异很大。
如图所示:首先我们会发现,不同字符的占图片中大小的差异就比较大,如果在你不对每个单独字符进行定位的时候,在一个模型中,同一层的感受野是一致的,会导致提取的feature会过多或者过少,就会导致在序列的softmax会很难对齐。所以在面向端到端的序列的分类问题,且两端序列难对齐时,我们会尝试使用CTC loss(好吧,我之前从来没用过~)。除了在车牌识别中之外,在语音识别中CTCloss也是一个常用的loss。

因为CTC是在2006年出现的文章,所以,网上有很多对其原理做了深入的分析和解释,在这里做个简单介绍,如果想了解详细解析的,可以去看一下连接
CTC 原理及实现
对CTC的理解及一些公式的推导
车牌字符识别中ctc loss损失函数理解
CTC,loss的原理可以分为几块:
1.在输出端,会用空格把所有的字符给分割开来,以上图牌照为例,输出端是为[ ]京[ ]F[ ]A[ ]9[ ]1[ ]5[ ]2[ ],同理在我们OCR的索引表中,也会增加空格。
2.在解码端,相同字符会进行合并。如输出的长度为[ ]京[ ]FF[ ]AAA[ ]9[ ]1[ ]55[ ][ ]222[ ]会等同于[ ]京[ ]F[ ]A[ ]9[ ]1[ ]5[ ]2[ ]。通过这种方法,就可以对输入端和输出端长度不同是进行匹配了。

在我的理解中,CTCloss有最亮眼的两个思想:
1.它巧用了blank符号,首先把制造的groundtruth中所有的字符都是分离的,我们都知道,任何任务中离散型的数据都比连续性的数据易于分析,且通过blank,解决的长度差异的问题。
2.其见解的HMM(Hidden Markov Model)(其实我也不知道谁先提出来的),去求整体序列中出现概率最大的情况。而不是单独考虑某一个字符具体是什么。

Spatial Transformer Layer

我们知道,对于CNN来说,图片的旋转和平移是会影响模型对图片的认知的,Spatial Transformer Layer(STL)或者说是Spatial Transformer Networks(STN),是通过CNN对图片或者feature进行平移和旋转操作,得到我们需要的样子。
有关于相信介绍STN的博客先列下来
详细解读Spatial Transformer Networks
NN特殊结构(1)——Spatial Transformer Layer
我稍微整理下相关知识:
STN主要分为几块:
参数预测:Localization net
坐标映射:Grid generator
像素的采集:Sampler
Localization net:我们知道,图片的所有的平移,缩放和旋转变化,最终可以通过6个参数来确定,所以Localization net就是根据输入的feature信息去学习这6个参数。我们定义从Localization net出来的6个参数为 θ \theta θ.
Grid generator: θ \theta θ也就是去控制输入图像或者featuremap进行变化的参数。
Sampler:对输入端进行 θ \theta θ的变化,这里的输入端可以是输入的图像,也可以是featuremap。

LPRNet解读

论文连接:LPRNet: License Plate Recognition via Deep Neural Networks

网络结构

这个就是生成 θ \theta θ的localization的网络结构,输出的一个6维的变化参数。

上图是网络前向的整体结构,输出是一个1*13维的向量,在训练时采用了drop避免过拟合。其中的Samll basic block的模块如下图所示

具体的实验结果和参数可以去看原文。这篇文章两个主要特点就是通过采用CTC LOSS解决序列不对齐的问题。可以把整个车牌当做一个整体进行识别,去掉了常用车牌或者ocr识别中的文字提取的过程。

License Plate Recognition的基础介绍,以及LPRNet的解读相关推荐

  1. 多校联赛四之找边界 License Plate Recognition HDU - 6993

    题目链接:https://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1009&cid=987 Little Rabbit is a ...

  2. LPRNet: License Plate Recognition via Deep Neural Networks

    论文:https://arxiv.org/abs/1806.10447?context=cs 代码:https://github.com/sirius-ai/LPRNet_Pytorch 0 摘要 本 ...

  3. 车牌识别1:License Plate Detection and Recognition in Unconstrained Scenarios阅读笔记

    转载好文一篇 一.WHAT 论文下载地址:License Plate Detection and Recognition in Unconstrained Scenarios [pdf] github ...

  4. License Plate Detection and Recognition in Unconstrained Scenarios

    论文:License Plate Detection and Recognition in Unconstrained Scenarios http://sergiomsilva.com/pubs/a ...

  5. 车牌识别--Towards End-to-End License Plate Detection and Recognition: A Large Dataset and Baseline

    Towards End-to-End License Plate Detection and Recognition: A Large Dataset and Baseline ECCV2018 ht ...

  6. 【读文献】License Plate Detection and Recognition in Unconstrained Scenarios(2018年ECCV)

    [读文献]License Plate Detection and Recognition in Unconstrained Scenarios(2018年ECCV) 参考文章链接:https://bl ...

  7. golang roadrunner中文文档(一)基础介绍

    2021年5月24日14:34:05 golang roadrunner中文文档(一)基础介绍 golang roadrunner中文文档(二)PHP Workers golang roadrunne ...

  8. day23:shell基础介绍 alias及重定向

    2019独角兽企业重金招聘Python工程师标准>>> 1.shell基础介绍: shell是一个命令解释器,用于用户与机器的交互: 也支持特定的语法(逻辑判断,循环): 每个用户都 ...

  9. Android NDK开发之 NEON基础介绍

    原文:http://blog.csdn.net/app_12062011/article/details/50434259 Android NDK开发之 NEON基础介绍 这是官方介绍: http:/ ...

最新文章

  1. Spring AOP与IOC以及自定义注解
  2. 测试页打印失败0x0000045a_激光打印机就该选这样的,联想领像L100DW评测
  3. 教你在微信头像上加皇冠,很漂亮!
  4. openpyxl方法记录
  5. 公文字体字号标准2020_党政机关公文格式典型错误20例,引起重视!
  6. linux 音频文件播放文件管理,linux dsp 播放音频文件
  7. 正则表达式基本语法规范
  8. 博客园首页新随笔联系管理订阅订阅随笔- 610 文章- 0 评论- 83 阅读- 144万 Calendar时间获取天,周,月,季度,年度时间段
  9. Android studio打包遇到的问题总结
  10. VB.NET 中图形旋转任意角度 [ZT]
  11. python求解LeetCode问题之trapping rain water
  12. 如何从包含代码库的.repo目录恢复出代码
  13. 色彩处理的5大颜色空间和区别
  14. 细胞迁移 | cell migration
  15. R包survival,survminer生存分析代码
  16. 一个人、一场梦、一座空城、一生心疼
  17. 内外兼修 高阶游戏鼠标达尔优A970黑武士评测
  18. Violations Associated with Nets
  19. 运用Python 模拟太阳-地球-月亮运动模型
  20. 云数据库有什么用?有了云服务器为什么还要云数据库?

热门文章

  1. netdata邮件告警配置
  2. 智伴科技:4个月销售破亿,创业明星的铁骨柔情
  3. 回波数据adc_data.bin解析(附MATLAB程序)
  4. go 解析 toml
  5. 算法-C语言-二分法查找
  6. PAT 基础编程题目集(编程题1-38)题解
  7. virtualbox ubuntu20.04 配置共享文件夹
  8. 把AI生成的数据喂给AI
  9. 基因组大数据与全民健康
  10. BCE_loss的理解