字符识别
一、字符识别算法的实现
车牌字符识别是车牌识别中的最后一步,也是决定车牌识别成功与否的关键步骤。字符识别是对经过车牌定位、车牌纠正和车牌字符划分后得到的各个车牌字符进行识别的过程。字符识别利用BP反馈神经网络对字符进行识别。BP反馈神经网络是一种基于误差反向传播的神经网络,它不同于传统的神经网络,传统的神经网络采用数值微分法计算梯度以使损失函数达到最小值,这种做法虽然原理简单且容易实现,但计算较费时,而BP神经网络采用误差反向传播的方法,该方法较数值微分法更为高效。所以本文采取比数值微分法高效的BP反馈神经网络对划分出的各个车牌字符进行识别。
1.1 神经网络组成部分介绍
1.1.1 激活函数
常用的激活函数有ReLU和Softmax函数,本文使用ReLU函数作为隐藏层的激活函数,使用ReLU函数作为激活函数的优点主要有两个,第一是ReLU函数计算简单,可以提升模型的运算速度;第二是反向传播时要计算偏导数,如果传递过来的值很大,Sigmoid函数的梯度会变得非常小,使得模型收敛的速度会非常慢,而使用ReLU函数可以有效的解决模型收敛速度慢的问题。使用Softmax函数作为输出层的激活函数。ReLU激活函数的数学表达式如式(4-1),图像如图4-1所示。
1.1.2 损失函数
神经网络的学习中所用的性能评判标准被称为损失函数,本文使用交叉熵误差损失函数作为衡量神经网络性能的指标。交叉熵误差的计算公式如式(4-2)。
1.1.3 神经网络梯度
1.2 神经网络原理与训练算法流程
1.2.1 相关符号说明
1.2.2 前向传播过程
1.2.3 反向传播过程
1.2.4 训练算法流程
神经网络的训练步骤如下:
- 1.初始化神经网络的权重参数、偏置参数、学习步长等。
- 2.读取训练数据,随机抽取训练样本以及对应的训练标签。
- 3.计算隐藏层和输出层的输出
- 4.计算损失函数值,并判断是否达到最大迭代次数
- 5.计算损失函数关于权重参数和偏置参数的偏导数
- 6.更新权重参数和偏置参数
二、车牌识别算法实现
2.1 开发工具及数据集说明
2.2 字符识别网络实现
在车牌识别算法进行之前,需要先训练好具体的字符识别网络,这是车牌识别算法的前提。本文训练了两个识别网络分别用来识别汉字、字母与数字。在深度学习中,一般将数据分为训练数据和测试数据两部分来进行神经网络的学习和测试等。划分为监督数据和测试数据的目的是能够正确评价神经网络模型的泛化能力,泛化能力是指处理未被观察过的数据,也就是不包含在监督数据范围内的数据。根据车牌特点,车牌中包含7个字符,分别是第1个字符是各省级行政区的简称,共34个;第2个字符是城市代号,由A-Z组成,为了不与1和0混淆,其中不包括字母I和O,共24个;第3-7个字符是由数字和字母共同组成,共10个数字和24个英文大写字母,共34个。如图5-2所示,整个识别网络分为两个识别网络,汉字识别网络用来识别各省级行政区的简称,字母数字识别网络用来识别车牌上剩余的大写英文字母和阿拉伯数字。
2.2.1 汉字识别网络
2.2.2 字母数字识别网络
可以看到损失函数的值逐渐减少,识别网络的训练结果也很理想,这是BP神经网络正在从大量数据中正确学习的表现。
2.3 识别算法流程及实验结果
2.3.1 识别算法流程及实验结果
2.3.2 实验分析
三、不足
汽车车牌识别系统的实现是我大学本科的毕业论文,当时还没接触神经网络这方面的知识,所以当时很傻的用了BP神经网络来进行图片的识别,结果当然是非常不理想了,其中有错误的地方请各位及时批评指正。CNN更加适用图像识别,研究生期间研究方向就是深度学习,所以在之后的三年时间内我会陆续更新深度学习的相关知识。虽然最后的实验结果不太理想,但是应付毕业论文应该够用了!在这即将毕业的学弟学妹毕业顺利!!
四、代码实现
代码实现我直接把当时做的项目上传,有需要的各位可以参考一下。不需要积分下载,一个关注就是我及时更新最大的动力!