| |
|
开发:
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博客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。支持从图片,视频,以及摄像头获取图片,然后将图片输入给检测网络进行车牌检测,根据检测出的车牌矩形框,从原始图片中裁剪出车牌图片。然后根据车牌的类型(蓝牌还是绿牌)再送入到对应的网络中进行分类识别。如下图所示: ? 正当我觉得效果流逼,可以马上上路检测的时候,却发现在视频中同一个车牌被检测出来不同的车牌号。导致一辆车会被识别成很多辆车。按照之前的逻辑,就会被识别出不同的车辆。这对于统计道路上的新能源车占比来说,是无法容忍的。因此需要解决该问题。 冷静分析,通过上面的测试视频来看,车牌的检测倒是非常准确(红框基本没有问题),但是车牌识别的不够准确。那么如何解决该问题,从而实现准确的车牌检测呢?留在下期去解决吧。(说实话:我自己还没有想好!) 总结感谢各位观众老爷又看到了最后。这期主要是数据集的准备和网络的调通。原以为可以马上上路测试了,却遇到了在视频中识别不准的问题,严重影响实验的精度。用这种精度统计出来的新能源车占比,我自己都不信,更不要说让销售相信了。下一期还是先解决识别精度的问题,尽情期待哦! |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |