Auto Byte

专注未来出行及智能汽车科技

微信扫一扫获取更多资讯

Science AI

关注人工智能与其他前沿技术、基础学科的交叉研究与融合发展

微信扫一扫获取更多资讯

胡晓曼作者

PaddlePaddle车牌识别实战和心得

车牌识别作为一种常见的图像识别的应用场景,已经是一个非常成熟的业务了,在传统的车牌识别中,可以使用字符分割+字符识别的方式来进行车牌识别,而深度学习兴起后,出现了很多端到端的车牌识别模型,不用分割字符,直接输入车牌图片即可识别出车牌字符。2019年1月5日百度深度学习线下技术公开课PaddlePaddle TechDay第一期演讲则邀请了百度认证布道师胡晓曼老师分享基于PaddlePaddle最新版本Fluid作用于车牌识别模型训练的实践。

以下为胡晓曼讲师的演讲实录:

PaddlePaddle Fluid和TensorFlow的设计理念有何不同?

  • 执行流程不是“先定义再执行”,而是“先编译再运行”,通过写一个 Transpiler把Protobuf Message翻译成C++程序,然后用NCVV、ICC、GCC编译成二进制代码,可以直接运行在服务器和手机上。

  • 抛弃静态图思想,采用Program设计思想,原始的Program在平台内部转换成ProgramDesc,python的Executor接收ProgramDesc后,传递给Transpiler,输出一段C++可执行的Program。

基于此,Fluid解释器极大的加快了执行Program的速度,PaddlePaddle Fluid运行速度也会更快。

按步骤来,你也能创造自己的车牌识别数据集

1.数据准备

数据准备是做训练的第一步,往往大家第一印象都是去网上下载车牌数据集,但是会有很多问题,如数据集不方便下载,大部分需要花钱等等。但其实除了收集真实场景的车牌数据,我们也可以自己用程序的方式生成车牌数据:

1.1生成车牌数据

1.1.1定义车牌所需字符

1.1.2生成中英文字符

一个车牌第一个字母都是中文,后面是英文和数据集合。 

1.1.3数据增强:添加畸变、噪音和模糊处理

字符生成后,需要对车牌数据进行一些数据增强,因为直接生成的数据是非常干净和清晰的车牌数据,跟真实场景的数据有一定差距,直接拿来用的训练结果会非常好,但是自然场景里,噪音、畸变、模糊等问题会影响真实图片的效果,最后实际应用依然达不到预期。因此,我们需要对这些数据进行畸变、噪音、模糊处理,尽量贴近现实场景的图片。

1.1.4生成车牌背景——加入背景图片,生成车牌字符串list和label,并存为图片格式。

车牌目前有蓝牌、绿牌、白牌、黑牌,常见的是蓝牌和绿牌,车牌数字搞定后需要加入背景图片,使其跟真实车牌更相近。 

1.1.5批量生成

生成字符后加入背景图片,用函数的使其可以批量生成,做测试最好生成数量越多越好,起码几十万张起。

1.2.6车牌生成效果

2.Fluid数据读取

支持两种传入数据的方式:

 以PythonReader同步读取方式为例(注:batch_size:Fluid中Tensor的第0维度固定为batch_size,在上面代码段中,图像输入x的形状为[3,32,32],分别代表:channel数目,图像的高度和宽度。如果不指定batch_size,那么data算子会根据实际数据来推断batch_size的大小,如果需要自定义batch_size,就需要在第0维指定维度即可):

3.Fluid网络模型

采用PaddlePaddle Fluid提供的vgg19模型来进行训练,完整代码请见:

https://github.com/huxiaoman7/PaddlePaddle_code/tree/master/plate_recognition

这个模型的好处是把vgg9所有的网络模型都写进去了。 

4.启动训练-参数初始化

启动训练的时候如何进行参数初始化,可以选择是否使用GPU。初始化完成后,需要把数据灌进来,启动数据模型并输入数据。

5.模型测试并输出日志

 打印日志

打印的日志,pass表示第一次迭代,batch表示第一次batch,Loss是第一次迭代,第一次迭代里面是98,acc是0.08,一直迭代到后面,loss值在不断的下降。Loss值不断下降可以画成一张图,根据它下降的幅度,可以帮助我们侦查这个模型训练是否有问题。 保存模型

创建一个保存模型的路径,通过调用Fluidio这个模块,将这个模型保存下来。 6.预测模型

保存好的模型不一定要在这台机器上使用,在其他机器和容器里面,也是可以进行使用的。提前将这个网络和模型加载进来,放入测试数据,就可以进行测试,预测模型。

 预测结果(测试图片)

这张图片是预测的新能源的车牌图片,豫GD17926,预测之后把模型加载进来,测试图片,结果是豫GD17826,9变成8,没有想象中的效果好,原因是只迭代了2000次,没有迭代太多的时间,如果模型并没有完全收敛,大家可以在自主构建过程当中,增加迭代次数,看是否能够达到收敛的状态。当然,实际应用落地中,还是要看具体的业务场景。

最后,晓曼老师也根据自身经验,给初学者提出几点关于深度学习的建议:

1.不要过于追求高大上的模型和数学名词,做工业应用实践,要做好最基本的工作,不要深究理论;

2.不要随便调参,理论有助于我们懂得如何更快速、更高效调参,使其以最快的方式达到最优的状态;

3.不要只依赖机器,机器的资源是有限的,我们更应该考虑如何把模型进行性能优化,这样可以加速模型进行训练;

4.提高工程能力,多看代码,多写代码,论文多复现,以此提高自己的工程能力。

飞桨PaddlePaddle
飞桨PaddlePaddle

飞桨(PaddlePaddle)是中国首个自主研发、功能完备、开源开放的产业级深度学习平台。

https://www.paddlepaddle.org
专栏二维码
工程PaddlePaddle车辆检测图像识别
5
相关数据
深度学习技术

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

参数技术

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

收敛技术

在数学,计算机科学和逻辑学中,收敛指的是不同的变换序列在有限的时间内达到一个结论(变换终止),并且得出的结论是独立于达到它的路径(他们是融合的)。 通俗来说,收敛通常是指在训练期间达到的一种状态,即经过一定次数的迭代之后,训练损失和验证损失在每次迭代中的变化都非常小或根本没有变化。也就是说,如果采用当前数据进行额外的训练将无法改进模型,模型即达到收敛状态。在深度学习中,损失值有时会在最终下降之前的多次迭代中保持不变或几乎保持不变,暂时形成收敛的假象。

TensorFlow技术

TensorFlow是一个开源软件库,用于各种感知和语言理解任务的机器学习。目前被50个团队用于研究和生产许多Google商业产品,如语音识别、Gmail、Google 相册和搜索,其中许多产品曾使用过其前任软件DistBelief。

噪音技术

噪音是一个随机误差或观测变量的方差。在拟合数据的过程中,我们常见的公式$y=f(x)+\epsilon$中$\epsilon$即为噪音。 数据通常包含噪音,错误,例外或不确定性,或者不完整。 错误和噪音可能会混淆数据挖掘过程,从而导致错误模式的衍生。去除噪音是数据挖掘(data mining)或知识发现(Knowledge Discovery in Database,KDD)的一个重要步骤。

百度智能云机构

百度是全球最大的中文搜索引擎,是一家互联网综合信息服务公司,更是全球领先的人工智能平台型公司。2000年1月1日创立于中关村,公司创始人李彦宏拥有“超链分析”技术专利,也使中国成为美国、俄罗斯、和韩国之外,全球仅有的4个拥有搜索引擎核心技术的国家之一。

http://www.baidu.com
推荐文章
暂无评论
暂无评论~