前期回顾:

在上一期介绍了事情的起因,为什么要做yolo车牌识别,以及最终的网络结构。(链接在这里:(141条消息) 我用AI回怼美女汽车销售系列[yolo车牌识别](一)_cjnewstar111的专栏-CSDN博客https://blog.csdn.net/cjnewstar111/article/details/123160063)但是为了验证和编码的方便,我们基于下图的网络结构开发。即将yolo检测网络和识别网络分开,验证通过了,再将识别功能集成到yolo上面,这样可以大大降低风险。回顾一下流程,首先图片经过检测网络YoloX,识别出蓝牌或者绿牌。然后根据矩形框坐标从原图中剪裁出牌照图片,将裁剪出的蓝牌图片送入到蓝牌分类网络进行牌照的识别;绿牌则送入到绿牌分类网络进行识别。本期将要根据开源数据集CCPD,对三个网络(YoloX车牌检测网络),蓝牌识别网络和绿牌识别网络进行训练。

检测网络训练

检测网络使用普通的目标检测网络即可,这里我选择YoloX。这是一个AnchorFree的Yolo系列,速度和精度都还不错。由于YoloX目标检测需要使用coco格式的数据集。因此需要将CCPD的格式进行转换。在上一期已经介绍过CCPD通过文件名来标注车牌信息。我们可以编写一个python脚本,将CCPD转换成COCO格式。

转换好之后,就可以使用YoloX进行训练。可以直接使用YoloX官方的代码进行训练,也可以使用我之前开源的YoloX EasyTrain进行训练。我这里使用YoloX EasyTrain进行训练,因为只需要点点鼠标,并且所有配置信息可以在界面中编辑,而且训练过程中还有实时的曲线信息,非常的方便。在YoloX EasyTrain中新建一个工程:CCPD,然后选择基于YoloX Nano(小模型训练快),然后配置一下CCPD的路径(注意是转换成coco格式的CCPD),点击训练。出去喝一杯咖啡,再回来看看效果吧。

训练了5个epoch之后,map0.5以及map0.75已经达到了0.99,精度是非常的高,那就直接停止训练,使用第5个epoch的结果来测试一下推理,看看从百度上随意下载的图片,能否准确的检测出车牌。效果非常理想!!!

蓝牌网络训练

首先对CCPD数据集进行一个转换。由于蓝牌网络输入的是车牌图片,而不是整张图片。因此需要对CCPD进行裁剪,裁剪出车牌图片,然后进行保存。可以写一个python脚本,进行自动的裁剪。裁剪后的图片与原始图片对比:

有了图片就可以训练了,我这里使用shufflenetv2进行车牌的分类和识别。大家对分类任务应该非常熟悉,需要输入多少个类别,就让shufflenetv2最终输出多少维度的向量。由于蓝牌识别需要对7个位置进行分类,且每个位置有非常多的可能。例如省份有31中可能,而普通的字符位置有34种可能,那么我们就定义蓝牌网络最终的输入是7*34维的向量。对于第一位的省份来说,34位是冗余的,因为省份只有31位,不过这没有关系,最后几位不用关注即可。训练过程也非常简单,使用常见的sgd优化器,训练60epoch,step学习率下降。最后top1测试精度达到了95%。非常nice!

绿牌网络训练

最后训练绿牌网络,和蓝牌网络几乎一样。不同的是需要使用CCPD中的新能源车的图片进行裁剪和训练。然后网络的输出是8*34维度,而不是蓝牌的7*34维度。因为绿牌比蓝牌多了一位。

ONNX转换

由于训练好的模型是pytorch的,不利于部署,因此我们将yolox模型和分类模型直接通过pytorch的接口导出为onnx模型,然后利用onnxruntime进行推理。使用如下代码进行导出:

torch.onnx._export(model,

dummy_input,

"yolox.onnx",

verbose=True,

opset_version=11,

input_names=['input'], output_names=['output'])

对于yolox来说,直接导出会报如下错误:

Exporting the operator silu to ONNX opset version 11 is not supported

意思是onnx不支持yolox中的silu激活函数。最简单的方式是修改一下pytorch的源代码,将silu的实现修改为如下图所示,然后在调用上面的接口可以顺利导出。

DEMO开发

有了上面训练完的三个onnx网络之后,为了测试的方便,我们用PyQt编写一个简单的demo。支持从图片,视频,以及摄像头获取图片,然后将图片输入给检测网络进行车牌检测,根据检测出的车牌矩形框,从原始图片中裁剪出车牌图片。然后根据车牌的类型(蓝牌还是绿牌)再送入到对应的网络中进行分类识别。如下图所示:

正当我觉得效果流逼,可以马上上路检测的时候,却发现在视频中同一个车牌被检测出来不同的车牌号。导致一辆车会被识别成很多辆车。按照之前的逻辑,就会被识别出不同的车辆。这对于统计道路上的新能源车占比来说,是无法容忍的。因此需要解决该问题。

冷静分析,通过上面的测试视频来看,车牌的检测倒是非常准确(红框基本没有问题),但是车牌识别的不够准确。那么如何解决该问题,从而实现准确的车牌检测呢?留在下期去解决吧。(说实话:我自己还没有想好!)

总结

感谢各位观众老爷又看到了最后。这期主要是数据集的准备和网络的调通。原以为可以马上上路测试了,却遇到了在视频中识别不准的问题,严重影响实验的精度。用这种精度统计出来的新能源车占比,我自己都不信,更不要说让销售相信了。下一期还是先解决识别精度的问题,尽情期待哦!

我用AI回怼美女汽车销售系列[yolo车牌识别](二)相关推荐

  1. 我用AI回怼美女汽车销售系列[yolo车牌识别](五) 完结

    上期回顾 上一期中,我们使用CTC技术,将蓝牌和车牌放在同一个网络里面训练和识别,取得了不错的效果.这一期主要是上路进行相关的统计,一方面检测程序的性能,一方面看看到底新能源车的占比有多少.结果还真是 ...

  2. 我用AI回怼美女汽车销售系列[yolo车牌识别](四)

    上期回顾 上一期中,我们从数据增强角度,对车牌识别进行了mixup,彷射变换,模糊处理等,最终在ccpd数据集的测试集上面将t将top1准确率从0.9683提升到了0.991(提升了2.3个点),但是 ...

  3. 我用AI回怼美女汽车销售系列[yolo车牌识别](三)

    前期回顾: 在上一期中,正当我信心满满的准备将模型应用在车牌识别的时候,遇到了很大的问题.就是在视频中,会把同一个车牌识别成很多不同的车牌号.这样会严重影响最终的统计精度.如下图所示,同一个这牌,由于 ...

  4. 《Mastering Opencv ...读书笔记系列》车牌识别(I)

    一.ANPR简介: Automatic Number Plate Recognition (ANPR),,是一种使用Optical Character Recognition (OCR)和其他分割.检 ...

  5. 华为回怼特朗普;中兴首款 5G 上市;iPhone 可免息分期购买 | 极客头条

    Python这么火,为什么还不学? https://edu.csdn.net/topic/python115?utm_source=csdn_bw 「CSDN 极客头条」,是从 CSDN 网站延伸至官 ...

  6. “我有技术到哪都是一样的”?年薪40W测试工程师被裁,回怼的这一番话,令人沉思

    一位年薪40W测试工程师被开除回怼道:"反正我有技术,在哪不一样" 一技傍身,万事不愁,当我们掌握了一技之长后,在职场上说话就硬气了许多,不用担心被炒,反过来还可以炒了老板,这一点 ...

  7. 一位年薪35W的测试被开除,回怼的一番话,令人沉思

    一位年薪35W测试工程师被开除回怼道:"反正我有技术,在哪不一样" 一技傍身,万事不愁,当我们掌握了一技之长后,在职场上说话就硬气了许多,不用担心被炒,反过来还可以炒了老板,这一点 ...

  8. python 微信机器人自动聊天+回怼表情包+Adidas公众号自动抽签 四、获取表情包中的文字并进行同类型回怼

    前言 在前文自动回怼表情包中, 只是做到爬取表情包存放在本地 ,然后当微信好友发送表情包给你的时候,随机抓取本地一个表情包进行回复.太不灵活 识别表情包中的文字 from __future__ imp ...

  9. 字节老板在群里diss员工:上班时间聊游戏,工作很闲吗?员工回怼:查聊天记录,看聊天时间占工作时间百分比!网友:真·扁平化管理!...

    上班时间聊天是大多数社畜的现状,如果不小心被老板抓包怎么办? 这几天,几张截图在网上火了起来,截图显示这是一个字节跳动的游戏群,某天字节张老板突然在里面说了长长的一段话,内容如下: 看来张老板对员工上 ...

最新文章

  1. HTML5 服务器推送事件(Server-sent Events)实战开发
  2. delphi内存泄露查找工具之MemProof教程
  3. 北京内推 | 华为高斯实验室招聘AI算法工程师/实习生
  4. c语言四个数找大wxyz,2015年计算机二级《C语言》考试上机测试题(7)
  5. mysql中将某个字段做计算,mysql创建计算字段使用子查询教程
  6. HAProxy用法详解 全网最详细中文文档
  7. Linux里的21究竟是什么
  8. 使用Powershell自动化Linux,macOS和Windows进程
  9. 25个顶级PHP模板引擎【转】
  10. Word 2016问题导致无法创建其他博客账号
  11. 时区时钟插件html,日期、时间选择控件 - datetimepicker
  12. 工业交换机ERPS环网协议工作原理介绍
  13. 小程序开发解决方案_小程序开发方案怎么写
  14. js获取当前页面url信息
  15. 草图大师(SketchUp Pro 2019)多语言 永久启用教程
  16. 机器学习笔记之基础概念
  17. html5拖放详解,HTML5拖拽/拖放(drag drop)详解
  18. JavaWeb学习-AJAX-3-练习:验证用户名是否存在
  19. Error: Failed to load config “standard“ to extend from
  20. python实现企业微信群机器人提醒功能

热门文章

  1. Galaxy+note3+android+5.0,5.9寸+Android 5.0 Galaxy Note 4参数曝光
  2. 苹果笔记本怎么找文件夹_如何在苹果笔记本中找出 “~/Library/Preferences/” 文件夹?...
  3. python协程处理海量文件_python_实战篇_使用协程gevent模块实现多任务copyA文件夹到B文件夹...
  4. TFBOYS饭票上线引热议,骗局之外,区块链技术能重构娱乐产业吗?
  5. ios34---GDC,dispatch_once
  6. spring-data-redis相关api
  7. postgresql数据库基础
  8. Windows 2008之Hyper-V安装攻略
  9. php解压功能的函数
  10. 项目中git远程地址修改