告别繁琐,ModelArts一键解决车牌号识别难题
  YqbaJkf98QJO 2023年11月19日 18 0

本文分享自华为云社区《基于ModelArts实现车辆车牌号的目标识别》,作者:屿山岛。

前言

车辆车牌是车辆的唯一身份标识,能够提供车辆的类型、颜色、归属地等信息,对于交通管理、安全监控、智能出行等领域具有重要的应用价值。随着计算机视觉技术的发展,车辆车牌的自动检测和识别成为了一个热门的研究课题,也有许多成熟的商业产品和开源项目

我对车辆车牌检测和识别的技术原理和应用场景很感兴趣,想要通过实践来提高自己的图像处理和机器学习的能力,同时也想要探索一些新的方法和思路,解决一些实际问题。因此,我选择了华为云的ModelArts平台,利用其提供的数据处理、模型训练、模型管理和模型部署等全流程的支持,实现了一个对车辆车牌的目标检测模型。

在本博客中,我将详细介绍我使用ModelArts平台的过程和经验,包括数据集的准备、模型的选择和修改、训练的参数和结果、部署的方法和效果等,以及遇到的一些问题和解决方案。我希望能够通过本博客,与有兴趣的读者分享和交流,也欢迎大家提出宝贵的意见和建议。

前置工作

首先确保已经完成了华为云账号的开通与认证,并添加用户的访问密钥,以方便使用ModelArts。

数据集的准备

来自于中科大2018年开源的大型国内停车场车牌数据集CCPD(Chinese City Parking Dataset)弥补了上述车牌数据的缺陷,该车牌数据集图片收集自安徽省合肥市的各种街道路边停车场,每个收集员于各自负责的街道不分天气的从早上07:30一直工作到晚上22:00,每当开停车账单时就需要手持特殊设备根据要求拍摄前后车牌图片并进行车牌信息标注,从而在不可确认的拍摄位置、拍摄角度、拍摄光照、拍摄天气、拍摄背景、拍摄街道等约束条件下保障了所获取车牌数据的多样性

本人从github上获取了该数据的2020新版。

告别繁琐,ModelArts一键解决车牌号识别难题_ModelArts

OBS桶及对象的创建

OBS是ModelArts提供的使用对象存储服务,目的是为了进行数据存储以及模型的备份和快照。本次实验在创建训练数据集之前,需要创建一个OBS桶,然后在OBS桶中创建文件夹用于存放训练文件。

OBS桶的创建

进入服务列表,找到存储服务项,点击对象存储服务OBS

告别繁琐,ModelArts一键解决车牌号识别难题_目标识别_02

登录OBS管理控制台,在桶列表页面右上角单击“创建桶”,创建OBS桶

填写参数:

• "区域":华北-北京四,后续区域需要选择和OBS桶一致。

• "桶名称":创建桶名称“carlic-detect”,注意重名时可以添加后缀。

• “数据冗余存储策略”:多AZ存储

• “默认存储类型”:标准存储

其他使用默认值即可,确认无误后单击右下角“立即创建”。

告别繁琐,ModelArts一键解决车牌号识别难题_AI_03

OBS桶中对象的创建

在桶列表页面,单击桶名称,进入该桶的概览页面。单击概览页面的左侧导航的“对象”,在“对象”页面单击新建文件夹,创建OBS文件夹。我们在这里创建两个文件夹,一个用于数据集的输入,一个用于数据集的输出

数据集输入文件夹“carlic-input”

告别繁琐,ModelArts一键解决车牌号识别难题_目标识别_04

数据集输出文件夹“carlic-output”

告别繁琐,ModelArts一键解决车牌号识别难题_目标识别_05

ModelArts自动学习项目的创建

进入ModelArts自动学习版跨,创建物体检测的项目

告别繁琐,ModelArts一键解决车牌号识别难题_ModelArts_06

创建物体检测项目的数据集

此时发现我们并没有数据集,所以需要创建数据集。此时点击创建数据集

告别繁琐,ModelArts一键解决车牌号识别难题_ModelArts_07

点击后有如下界面,其中各参数为:

• “数据集名称”:carlicense

• “数据类型”:图片

• “数据来源”:OBS

• “导入路径”:选择之前创建OBS桶时创建的carlic-input文件夹

• “数据标注状态“:未标注

• “数据输出位置”:选择之前创建OBS时创建的carlic-output文件夹

再点击右下角提交,数据集创建成功

告别繁琐,ModelArts一键解决车牌号识别难题_ModelArts_08

此时再填入物体检测项目的各个参数信息

• “名称”:carlicense-detect

• “数据集”:选择刚刚创建好的数据集“carlicense”

• “输出路径”:选择所创建OBS桶中的数据输出文件夹“carlic-output”

• “训练规格”:选择限时免费的规格

然后点击右下角的创建项目

告别繁琐,ModelArts一键解决车牌号识别难题_数据集_09

创建项目后得到如下界面:

告别繁琐,ModelArts一键解决车牌号识别难题_AI_10

数据的上传与标注

该界面显示我们需要对实例进行标注,点击进入实例详细

告别繁琐,ModelArts一键解决车牌号识别难题_ModelArts_11

数据上传

由于数据集是空的,所以该页面显示未查询到图片,此时我们点击添加数据

告别繁琐,ModelArts一键解决车牌号识别难题_目标识别_12

导入数据参数如下:

• “数据来源”:本地上传(因为下载的数据都在本地上,并没有上传至OBS中)

• “上传数据存储路径“:选择之前创建的OBS桶中的数据输入文件夹“carlic-input”

• “数据标注状态“:未标注(数据集的所有数据均为未标注)

然后点击文件上传,将本地文件上传之所创建的OBS桶中的数据输入文件夹中

告别繁琐,ModelArts一键解决车牌号识别难题_ModelArts_13

点击添加文件,上传本地的训练数据文件

告别繁琐,ModelArts一键解决车牌号识别难题_ModelArts_14

上传结束后我们再点开OBS存储,发现此时的输入文件夹已经有了所用的数据

告别繁琐,ModelArts一键解决车牌号识别难题_目标识别_15

但是此时实力详细中并没有数据信息,此时我们需要点击数据源同步,将已经上传至OBS桶中的数据全部同步至数据集中

告别繁琐,ModelArts一键解决车牌号识别难题_目标识别_16

结果如下

告别繁琐,ModelArts一键解决车牌号识别难题_AI_17

数据标注

接下来要对该数据集中的数据进行数据标注

先进行手动标注

告别繁琐,ModelArts一键解决车牌号识别难题_ModelArts_18

告别繁琐,ModelArts一键解决车牌号识别难题_目标识别_19

告别繁琐,ModelArts一键解决车牌号识别难题_ModelArts_20

在进行20多各样例的标注后,我们可以使用ModelArts所提供的工具:智能标注,即通过已标注的样例来自动学习,实现自动化标注

告别繁琐,ModelArts一键解决车牌号识别难题_数据集_21

此时我们点击启动智能标注

参数选择如下:

• “智能标注类型”:主动学习(系统自动使用半监督学习,难例筛选等多种手段来进行智能标注,降低人工标注量,帮助用户找到难例)

• “算法类型”:精准型

• “计算结点规格”:任意选择即可

告别繁琐,ModelArts一键解决车牌号识别难题_ModelArts_22

点击提交,得到如下界面

告别繁琐,ModelArts一键解决车牌号识别难题_目标识别_23

在智能标注完成后,我们需要确认智能标注信息是否正确,以下为智能标注后需要待确认的界面

告别繁琐,ModelArts一键解决车牌号识别难题_目标识别_24

然后我们点击进入具体确认界面

告别繁琐,ModelArts一键解决车牌号识别难题_AI_25

放大后查看该案例的智能标注情况

告别繁琐,ModelArts一键解决车牌号识别难题_AI_26

此图片中对与车牌的智能标注十分准确,但是这并不代表每一张图片都是十分准确的,在本人确认了多张图片的智能标注情况后发现一些常见的易错误标注的现象,过大的车标,车身与车牌类似的矩形广告贴,地表的一些与车牌十分相似的矩形牌号等。

告别繁琐,ModelArts一键解决车牌号识别难题_数据集_27

过大的车标

告别繁琐,ModelArts一键解决车牌号识别难题_目标识别_28

车身矩形小广告-

告别繁琐,ModelArts一键解决车牌号识别难题_AI_29

地表的矩形牌号与车牌十分相似

在进行人工确认和改正后,得到最终的已标注所有的数据集

告别繁琐,ModelArts一键解决车牌号识别难题_目标识别_30

然后再进行对标注数据的快速复核,点击快速复核,得到如下界面,我们发现其中有一些明显不是车标的标注信息

告别繁琐,ModelArts一键解决车牌号识别难题_AI_31

点击其中一个得到如下图片标注

告别繁琐,ModelArts一键解决车牌号识别难题_AI_32

说明在确认标注过程中出现了纰漏,然后只需要对这些错误标注进行修改或者删除即可

进入工作流

在成功标注完数据后,我们便可以进入workflow流中开始工作

首先是数据集版本发布

告别繁琐,ModelArts一键解决车牌号识别难题_AI_33

然后是数据校验

告别繁琐,ModelArts一键解决车牌号识别难题_数据集_34

同时我们可以查看后台的工作记录,跟进工作流的进度

告别繁琐,ModelArts一键解决车牌号识别难题_AI_35

然后就是模型的训练工作

告别繁琐,ModelArts一键解决车牌号识别难题_ModelArts_36

告别繁琐,ModelArts一键解决车牌号识别难题_数据集_37

模型训练

接下来是模型注册工作

告别繁琐,ModelArts一键解决车牌号识别难题_AI_38

模型部署

最后是模型部署工作

模型部署的参数选择如下:

• “AI应用来源”:我的AI应用

• “资源池”:公共资源池

• “是否自动停止”:是,选择在一小时后停止运行

其他参数保持默认即可

告别繁琐,ModelArts一键解决车牌号识别难题_数据集_39

在部署过程中我们可以查看一些基本信息,同时跟踪部署情况事件:

告别繁琐,ModelArts一键解决车牌号识别难题_ModelArts_40

在部署成功后,我们可以查看部署成功的AI应用,部署的AI应用信息如下

告别繁琐,ModelArts一键解决车牌号识别难题_ModelArts_41

同时在该AI应用状态改变为运行中后,我们便可以开始进行我们的车辆车牌目标识别的实践了

告别繁琐,ModelArts一键解决车牌号识别难题_数据集_42

结果检测

将图片上传至该AI应用进行目标检测,得到结果如下

告别繁琐,ModelArts一键解决车牌号识别难题_ModelArts_43

发现检测的大致位置是正确的,但是精准度不高,于是再上传图片进行几次车牌的检测:

告别繁琐,ModelArts一键解决车牌号识别难题_AI_44

告别繁琐,ModelArts一键解决车牌号识别难题_AI_45

告别繁琐,ModelArts一键解决车牌号识别难题_AI_46

告别繁琐,ModelArts一键解决车牌号识别难题_数据集_47

发先该模型的检测结果都是大致位置正确,但是不够精确,这说明该模型的精准度不够搞,还需要进一步改进。

对于出现该问题的原因,我猜测可能有以下几个原因:

1、数据集问题

2、数据处理算法设计和实现问题

3、算法设计和实现问题

4、超参设置问题

5、环境问题

……

在后续的实验中,会对该模型进行进一步优化,推出新的模型版本和应用版本。

资源释放

到此,该实践已完成,接下来我们需要对申请的各种资源进行释放

删除创建的在线服务

告别繁琐,ModelArts一键解决车牌号识别难题_目标识别_48

删除创建的自动学习项目

告别繁琐,ModelArts一键解决车牌号识别难题_数据集_49

删除用于存储服务的OBS桶中的对象

告别繁琐,ModelArts一键解决车牌号识别难题_AI_50

释放资源到此结束,本次实践到此完成。

实践总结

在这篇文章中,我介绍了如何使用华为云ModelArts实现车辆车牌的目标识别的实践,并部署上线服务的过程。我首先介绍了车牌目标检测的背景和意义,然后介绍了ModelArts的特点和优势,以及如何使用ModelArts进行数据集的管理、模型的训练、评估和部署。我使用了CCPD数据集,这是一个包含了约30万张中国车牌图片的数据集,它根据图片的复杂度分为了八个类别。我使用了YOLOv5作为目标检测的模型,它是一个基于PyTorch的轻量级、高效的目标检测框架。我在ModelArts上进行了模型的训练和评估,得到了较高的精度和召回率。我还展示了如何使用ModelArts的在线服务功能,将模型部署为一个可调用的API,实现了车牌的实时检测。

通过这次实践,我深刻地体会到了ModelArts的强大和便捷。ModelArts为我提供了一个一站式的端到端的机器学习平台,让我可以在一个统一的界面上完成数据集的管理、模型的训练、评估和部署的全流程。ModelArts还提供了丰富的预置算法和模型,以及高性能的计算资源和存储空间,让我可以快速地搭建和运行我的模型,节省了时间和成本。ModelArts的在线服务功能也让我可以轻松地将我的模型转化为一个可用的服务,实现了车牌目标检测的应用场景。我认为ModelArts是一个非常适合机器学习爱好者和开发者的平台,它可以帮助我们实现更多的机器学习的创新和价值。

点击关注,第一时间了解华为云新鲜技术~

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月19日 0

暂无评论

推荐阅读
YqbaJkf98QJO