IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 我用AI回怼美女汽车销售系列[yolo车牌识别](二) -> 正文阅读

[人工智能]我用AI回怼美女汽车销售系列[yolo车牌识别](二)

前期回顾:

在上一期介绍了事情的起因,为什么要做yolo车牌识别,以及最终的网络结构。(链接在这里:(141条消息) 我用AI回怼美女汽车销售系列[yolo车牌识别](一)_cjnewstar111的专栏-CSDN博客icon-default.png?t=M1L8https://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。支持从图片,视频,以及摄像头获取图片,然后将图片输入给检测网络进行车牌检测,根据检测出的车牌矩形框,从原始图片中裁剪出车牌图片。然后根据车牌的类型(蓝牌还是绿牌)再送入到对应的网络中进行分类识别。如下图所示:

?

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

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

总结

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

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-03-08 22:28:33  更:2022-03-08 22:31:57 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 16:30:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码