徐 云,杨承翰,高 磊
(浙江理工大学信息科学与工程学院,浙江 杭州 310018)
工业自动化极大地便捷了社会生产和人们生活[1]。自动化生产过程中,部分数据难以直接通过传感器获取,因此需要人工监测并记录。这阻碍了自动化生产的流程,降低了工业生产的效率。机器视觉技术通过视觉传感器捕获图像,利用辨识算法实现自动化生产过程中部分数据的识别、处理与存储,代替了人工监测,提高了生产效能[2-4]。阿拉伯数字作为全球通用的符号,广泛应用于金融票据、邮政编码、手写财务报表、试卷批阅等[5-6]。大量手写数字亟需自动化识别技术来完成识别,从而为提高工作效率奠定基础。目前,国内外研究学者对手写数字识别的工作开展了广泛研究。
2015年,SALDANHA对手写数字识别的硬件系统进行了改进设计,对基于神经网络的识别算法进行了正则化处理,极大地减少了浮点运算。将该算法布署在现场编程门阵列(field-programmable gate array,FPGA)芯片上,提高了嵌入式处理器的应用性能。试验测试表明,改进系统能够将手写数字识别时间由2.938 s降低到1 s内[7]。2020年,KUSETOGULLARI设计了专门用于识别历史文献中手写数字的深度学习体系结构DIGITNET,针对特定的历史手写数字,识别正确率可达97.12%[8]。2018年,李怡轩以Matlab2015为开发平台设计了基于机器学习的手写数字识别系统,通过计算待识别图像和模板矩阵的欧式距离和后验概率实现了手写数字的识别,识别精度可达97.63%[9]。2020年,康磊基于LeNet设计了RLeNet加速器,在FPGA上通过软硬件协同的方式实现了手写数字的识别,识别率约为96.18%[10]。
从现有文献可以看出,针对手写数字识别的算法研究层出不穷。但由于基于神经网络的识别算法具有较多模型参数以及庞大的计算量,对于实际嵌入式硬件系统而言,这将导致手写数字识别的硬件系统造价昂贵、配置复杂,难以推广到实际应用[11-12]。如何在低成本的嵌入式系统中布署基于神经网络的识别模型,并兼顾手写数字识别速度和识别正确率是当前国内外学者开展基于机器视觉手写数字识别研究存在的主要问题。因此,针对低成本的嵌入式硬件系统,开展手写数字辨识算法的研究势在必行。
针对上述问题,本文设计了低成本的手写数字嵌入式识别系统。系统采用STM32作为主控芯片,通过视觉传感器采集手写数字,利用改进后的卷积神经网络对手写数字训练集进行训练,从而构建手写数字识别模型;经压缩加速处理,将该算法模型布署在STM32中实现手写数字的识别,并将识别结果予以实时显示。
本文设计的手写数字识别系统架构如图1所示。
图1 手写数字识别系统架构Fig.1 Handwritten digit recognition system architecture
手写数字识别系统主要分为硬件和软件两部分。其中,硬件部分以STM32作为主控芯片,通过OV7725摄像头采集手写数字图像,利用软件算法对其进行识别,从而将识别结果输出至液晶显示器(liquid crystal display,LCD);软件部分以Tensorflow为平台优化卷积神经网络,对MNIST数据集中手写数字图像进行训练,从而获得TFlite识别模型。对该识别模型进行加速处理并将其布署至STM32芯片上,实现了基于嵌入式系统的手写数字在线识别。
卷积神经网络是1种包含卷积计算且具有深度结构的前馈神经网络[10]。本文以LeNet-5卷积神经网络为基础。该模型结构简单。LeNet-5卷积神经网络体系结构如图2所示。
图2 LeNet-5卷积神经网络体系结构图Fig.2 LeNet-5 convolutional neural network architecture
输入层输入待辨识图片后,以LeNet-5卷积神经网络进行特征提取。特征提取可分为6个步骤。
①卷积。卷积层C1(卷积核5×5)提取图片中相对全面的特征,生成1个特征图像。
②池化。对步骤①中生成的特征图像进行池化处理,去掉一半的多余特征并继续生成特征图像。
③卷积。对步骤②中生成的特征图像再次进行卷积(卷积核5×5),生成特征图像。
④池化。对步骤③中生成的特征图像再次进行池化处理,生成最终的特征图像。
不同区域的地质灾害发育程度、危险性等级的划分也不同,所以要因地制宜,研究人员要进行实地考察,根据事实得出结论,根据成果划分区域,对地质灾害高易发区加大资金与科技的投入,建立更多有效的预警和避难系统。这种因地制宜的方法能够有效的节约资金,减少不必要的投入。另外,进行区域的划分也能让人们针对地质灾害的情况产生预警心理,有防灾的意识,也能有效的降低地质灾害的风险。
⑤展平。对步骤④中的卷积、池化运算得到的三维特征数据展平为一维特征数据。
⑥3层全连接层(D1、D2和输出层)。对步骤⑤中输出的一维特征数据进行多次折叠分类,实现从图片特征的线性不可分到线性可分。其中,输出层可根据需求调整分类大小。
本文对图2所示的LeNet-5卷积神经网络进行优化。优化的手写数字识别用卷积神经网络体系结构如图3所示。
图3 手写数字识别用卷积神经网络体系结构图Fig.3 Convolutional neural network architecture for handwritten digit recognition
优化的LeNet-5卷积神经网络主要包括2个方面。①将3层全连接层降低为1层,即删除了全连接层D1和全连接层D2,将展平层输出的一维特征数据直接送至输出层进行分类输出。这有效地压缩了手写数字识别模型,加速了手写数字识别过程,降低了识别算法的计算量,减弱了基于机器视觉的手写数字识别系统的硬件要求,提高了嵌入式系统的识别速度。②将卷积层C1和卷积层C2中的卷积核由5×5调整为3×3。卷积核的减小虽然增加了手写数字图像识别模型的训练时间,但提高了识别模型的精度。对于实际应用而言,这可以提高嵌入式系统的识别精度。
图3中,卷积层C1和卷积层C2均采用Relu函数作为激活函数:
f(x)=max(0,x)
(1)
式中:x为输入。
手写数字进行分类时,Relu函数计算简单,并能够使分类更快收敛。Tensorflow中应用Relu函数的代码为:
model.add(Conv2D(28,kernel_size=3,activation='relu',kernel_constraint=tf.keras.constraints.MaxNorm(1),padding='same'))
图3中,池化层P1和池化层P2采用最大值池化法,对每个2×2的窗口选取窗口中最大的数作为输出矩阵的相应元素值,实现手写数字图像的压缩处理。池化层处理代码为:
model.add(MaxPooling2D(pool_size=2,strides=2,padding='same'))
手写数字经卷积层、池化层处理后,进入展平层和输出层。输出层采用Softmax函数作为激活函数:
式中:exi为第i个节点的输出;C为分类类别数。
Softmax函数用于解决多分类问题,并将分类结果控制在(0,1)区域,输出分类概率总和为1。输出层中Softmax函数代码为:
model.add(Dense(classes,activation='softmax',name='y_pred'))
本文使用MNIST数据集中的手写数字图像进行训练,随机选取32 000张手写数字图像为训练集,剩余8 000张手写数字图像为测试集。在Tensorflow平台中利用优化的卷积神经网络训练获得TFlite识别模型,对该识别模型进行压缩加速处理后将其布署在以ARM为架构的STM32微控制器中,从而实现手写数字图像的在线识别。
利用Tensorflow平台训练获得的手写数字识别模型,对MNIST数据集中剩余的8 000张手写数字图像进行识别测试。其中,手写数字0~9的每个数字图片约800张,记录各图片的识别结果,并对其进行统计处理。手写数字识别正确率测试统计结果如表1所示。
表1 手写数字识别正确率测试统计结果Tab.1 Handwritten digit recognition correct rate test statistical results
由表1可知:手写数字6的识别正确率最高,可达99.2%;数字8的识别正确率较低,为97.3%。经统计,本文设计的基于机器视觉的手写数字识别模型的平均识别精度约为98.8%。测试过程中,手写数字存在误识别。误识别率结果如图4所示。
图4 误识别率结果Fig.4 False recognition rate results
由图4可知,手写数字会发生误识别的情况,如实际数字8会被误识别为0、1、2、5和9,但误识别率较低。为分析部分手写数字发生误识别的原因,对手写数字0~9的特征分布进行分析。分析结果表明,手写数字0~9的特征分布较分明。因此,优化的卷积神经网络识别模型基本能够较好地辨识出手写数字。但是,因部分手写数字的特征分布界限不够明显,会导致部分手写数字存在误识别情况的发生,因此部分手写数字的辨识精度低。为进一步分析上述手写数字识别错误的原因,将识别错误的个别对象挑选出来。识别错误的手写数字如图5所示。
图5 识别错误的手写数字Fig.5 Recognition of incorrect handwritten digits
图5给出的待识别手写数字分别为7、2和4,利用本文设计的基于机器视觉的手写数字识别模型进行识别测试,获得错误的结果分别为2、7和2。经分析,上述待识别的手写数字均存在数字2的特征,因此较容易识别错误。在实际应用时,有待对本文设计的手写数字识别系统模型作进一步的算法优化设计以提高手写数字的识别精度。
基于机器视觉的手写数字识别系统需消耗较大的随机存储器(ramdom acess memory,RAM),且硬件接口较多。本文选用STM32H743VIT6微控制器作为系统的主控芯片,通过OV7725摄像头捕获手写数字图像,经主控芯片识别后将手写数字识别结果显示至TFT-LCD显示屏。基于该嵌入式系统原理样机开展手写数字识别模型精度测试与分析研究。
本文收集50人次的手写数字0~9,共计500个手写数字。
采用设计的嵌入式系统原理样机分别对手写数字进行识别测试,并对测试结果进行统计。实际手写数字识别正确率测试统计结果如表2所示。
表2 实际手写数字识别正确率测试统计结果Tab.1 Actual handwritten digit recognition correct rate test statistical results
由表2可知,基于嵌入式系统的手写数字识别结果的平均正确率约为98.4%,平均识别时间约为0.3 s。单个数字的识别正确率均高于96%,满足基于嵌入式系统的手写数字识别应用需求。
本文采用STM32H743VIT6作为主控芯片,利用OV7725视觉传感器构建了一款基于机器视觉的手写数字识别系统原理样机,开展了手写数字0~9的识别方法的研究。以Tensorflow为开发平台,优化了卷积神经网络算法,并对手写数字0~9进行特征提取和模型训练,获得TFlite手写数字识别模型。通过对该手写数字识别模型进行压缩加速处理,从而将其布署在STM32H743VIT6微控制器中进行在线检测。试验测试结果表明,本文设计的基于机器视觉的手写数字识别系统原理样机的平均识别精度约为98.4%,识别速度约为0.3 s。本文设计的基于机器视觉的手写数字识别系统原理样机具有较高的识别精度和识别效率,可为本领域中手写数字识别系统的设计提供新思路。