版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
手写汉字识别系统构建与测试案例分析目录TOC\o"1-3"\h\u20437手写汉字识别系统构建与测试案例分析 1310161手写汉字识别系统构建 1184881.1数据集处理 1106571.2卷积神经网络搭建 3190871.3训练函数 6177851.4图形界面 7297122手写汉字识别系统测试 984402.1测试环境 9276862.2测试结果 10248602.3分析比对 111手写汉字识别系统构建1.1数据集处理旧的gnt文件存放于odata文件目录下,新生成的png图片都放在各自的标签文件夹中,标签文件夹存放于data文件中,os.path.join()为路径拼接函数。read_from_gnt_dir()该方法实现从gnt文件中提取png图片信息,第一个循环是对信息完成对信息的提取操作,第二个循环完成对原数据的读取操作。其中np.fromfile()方法实现的是对文件的提取,数据类型uint8,数目10进行提取。接下来实现对数据字典的生成操作,首先调用上述的读取gnt文件信息,按照gb18030编码标准解码,通过zip函数将汉字和字符信息与标号对应生成元组,再格式转换为字典char_dict=dict(zip(sorted(label_list),range(len(label_list))))将最终结果存入数据字典。使用pickle库中的pickle.dump(char_dict,f)来保存生成的数据字典文件。图5手写汉字数据集图5手写汉字数据集1.2卷积神经网络搭建对图片数据的处理操作,定义一个数据类型便于输入到卷积神经网络。这里我设置的CNNdataset是在pytorc库中的Dataset模块的子类,完成的是一个自定义加载数据类别,在pytorch的torch.utils.data模块中的Dataset就是完成对数据类型的定义操作,而我的CNNdataset(Dataset)数据类表示CNNdataset将会继承父类Dataset,这其中的super(CNNdataset,self)的功能就是继承父类的属性和方法,在这些基础上可以添加自己所需的一些功能或变换,基本上只需要重写Dataset里的__init__,__getitem__,__len__这几个部分的内容就可以了。__init__将会获取图片信息,同时对已经存入txt文件中的图片的路径进行标签获取,最后在进行一步图片转换操作,转换的方式由输入的转换方法来决定。__getitem__在训练的时候返回输入卷积神经网络的图片和标签信息等,使之形成图片标签和识别结果的匹配。__len__返回的是该数据集的长度信息。在对torch.utils.data.Dataset类进行重写的过程中,必须注意的是,在继承的过程中如果要使用其他的数据类,这些数据类必须也是torch.utils.data.Dataset类的子类,且必须要重写_getitem_和_len_方法。总而言之,该部分就是创建一个数据类,拥有着两个最重要的属性,即为样本的图片和标签信息,该数据类可以得到这些信息和数据集的总长度。图6卷积神经网络代码图6卷积神经网络代码上图为最重要的CNN搭建模块代码,首先是类似上述数据类的设置,卷积神经网络所生成的类是继承nn.Module的子类,在初始化__init__(self)的过程中,首先继承父类nn.Module的属性和方法,之后即可直接调用父类的卷积神经网络搭建方法,接下来将对模型搭建的过程中用到的方法,方法的基本原理及所需参数进行详细说明。nn.Conv2d()方法搭建的是卷积层,该方法有许多参数,本模型输入三个参数,按顺序依次为输入通道个数,输出通道个数,卷积核大小,其他参数均设置为默认值。下为Conv2d()用到的相关变量意义。其中,N表示采样大小;C表示通道数,分为Cin和Cout两种;H表示像素高度;W表示像素宽度;k由卷积核大小变换生成;groups表示分组卷积的组数,默认为1;padding表示对于输入的填充,默认填充为0;dilation表示内核各元素的间距,默认为1;stride表示卷积的步长,默认为1。图7C图7Conv2d()运算公式其中k的计算公式为k=其中input的变换公式如图图8input()运算公式图8input()运算公式图9MaxPool2d图9MaxPool2d()运算公式nn.Linear()方法是全连接模块,第一个参数是输入样本的大小,第二个参数是输出样本的大小。其中x为输入的行向量,A是计算后得到的输入权重矩阵,T表示矩阵的转置变换,b是偏移值。线性变换的公式为y=xA在池化的过程中,实现了两层卷积,两层池化,在最后添加三层全连接层。forward()是继承nn.module必须重写的方法。这一方法完成的是卷积神经网络中的激活层操作。F.relu()是线性整流函数,实现的是对输出判断是否达到阈值,即经由训练后的特征强度是否达到所需的标准。该方法使用之前在初始化过程中已经设置好的各个层参数,进行两轮的卷积、激活、池化操作。x.view实现的功能是把多行的张量转变为一维的数据。最后进行两次对全连接层的激活操作,经由最后一次全连接层得到输出结果。relu()函数公式为ReLU(图10线性整流函数图像图10线性整流函数图像1.3训练函数下面介绍训练函数trainging_CNN()中。第一步进行图像处理操作,主要使用的是torchvision.transforms模块。注意此处的图片都为PILImage格式,根据参数设置的图像尺寸,使用Resize()将输入的图像调整为指定大小,第一个参数是高度,第二个参数是宽度。使用Grayscale()将图像转换为灰度图。利用ToTensor()将图片形式转换为torch.FloatTensor的数据形式。最后用Compose()串联所有的变换操作。具体代码为transforms.Compose([transforms.Resize((args.image_size,args.image_size)),transforms.Grayscale(),transforms.ToTensor()])下一步是按照之前定义的数据类别CNNdataset进行数据类别的输入,再使用torch.utils.data.DataLoader类加载输入的数据,返回的是可迭代的处理数据。DataLoader()有三个参数变量,第一个就是输入的数据类,第二个是参数设置中的每批加载的样本数量,最后一个shuffle参数表示是否在每次迭代中进行数据顺序的随机化处理操作。torch.device()表示训练使用GPU或CPU,一般而言GPU训练速度远大于CPU。图11交叉熵损失函数图11交叉熵损失函数optim.Adam()是使用Adam这个随机优化方法,第一个变量是待优化的参数,第二个变量是学习率,学习率越大在初始的学习过程中就会学习得越快。torch.load()加载已保存的模型文件信息,若有则读取并继续迭代直到运行至最大迭代次数,若无则从零开始训练。optimizer.zero_grad()将梯度重置为0,loss.backward()是反向传播计算当前梯度,optimizer.step()通过梯度下降实现参数的更新,主要用于优化参数。每进行200步显示一次损失值,每完成一次迭代就使用torch.save保存模型文件。1.4图形界面最后实现一个简单的图形用户界面,sg.theme()设置界面的主题颜色,layout是一个布局列表,子列表按顺序实现每一行的布局,每个子列表占用一行空间。在本图形界面布局中,定义了一个文本提示框,两个文本输入框,一个上传文件组件,三个按钮。接着是创建窗口方法sg.Window(),第一个参数为窗口标题,第二个参数为布局信息。这里需要打开数据字典,存入dictionary变量,以便于后续标签和汉字或字符的对照。循环维持窗口,当点击事件为“开始识别”,则根据文件上传至第一个文本输入框的文件路径,进行识别功能,调用之前的result()函数,识别完毕后,sg.Popup()方法实现一个弹窗显示识别的结果,包括正确标签和预测标签。当点击事件为“查询”,则根据输入至第二个文本输入框的标签信息,根据字典查询到对应的汉字或字符,同样弹窗显示。下图为图形界面及测试界面,弹窗1为识别的弹窗,弹窗2为标签查询的弹窗。图13弹窗1图14弹窗2图12图形用户界面
图13弹窗1图14弹窗2图12图形用户界面2手写汉字识别系统测试2.1测试环境argparse该模块作为非常重要的参数设置模块,对于代码的可移植性,可读性都有很大的帮助。该模块能够在命令行的运行中提供功能选项,就类似Windows系统下的命令行,我们可以使用netstat–ano来实现对于端口信息的查看。而该模块就是实现在命令行中进行不同的CNN模型在应用方面上对于需求的选择,在后续举例中会进一步说明。对于可选择参数,基本上每一个参数都会设置一个最常用的默认值。除此之外,它也能够提供帮助手册,对程序用到的参数可以在help参数中添加对于参数的解释部分,增强程序的可读性。使用parse.add_argument添加参数,使用“args”+“参数名”调用设置的参数。.function参数形成的是功能选择,在命令行中可以根据设置—function参数而选择实现训练神经网络、显示已有的模型的识别率、随机进行单个标本的预测操作这三种功能。saving参数实现对已经训练的模型进行保存,保存路径为当前文件的log.pth文件中,该文件可用于后续的继续训练或者准确率统计功能中。iftrained参数用于判断是否已经存在已完成训练的模型,False表示不存在log.pth文件,需要建立新的日志文件,True表示已存在log.pth文件,在后续的操作中可以进行更新或者直接调用。epoch参数是设置迭代次数的上限,若要完成100次迭代,将值设为100即可。batch_num参数表示每批加载的样本数量,默认值为16。需要注意的是,分类越多,对于采样的最小数量要求就越大。例如16可以满足200类别的分类识别,而不能满足500类别。若要完成对500类的分类识别,最好是将采样的最小数量设置为64,总而言之,该参数根据分类数目的多少而成正比例关系。allclasses参数是对分类类别数目的设置,默认值即为所要分类的数目,choices是对数据集的一个选择,数据集是有0-3925类别,因此从这里面按顺序选择分类的数目进行识别率统计。下面为address参数添加过程:parse.add_argument('--address',type=str,default='C:\\Users\\DELL\\Desktop\\generationproject\\OCR\\data',help='文件的存放路径,目录位于data和test目录的上级')2.2测试结果图15正确率测试图以下为测试用到的两个测试函数,识别率函数show_accuracy(),随机预测函数random_inference()。前面的步骤与训练函数类似,完成的就是对模型的读取和数据的输入操作。torch.no_grad()是一个禁止计算梯度的上下文管理器,在测试函数中不需要计算梯度,因此使用该方法可以大大减少内存消耗,提高运行效率。model.eval()是将模型设置为测试模式,之后就是输入加载的数据到模型中去进行预测识别,输出识别的结果,每100个样本输出一次正确率,最终计算平均正确率。图2.1.1为200类别,迭代50次之后的结果。随机预测函数random_inference()操作基本类似,打开存放的测试txt文件,随机选取一行图片路径信息,保存正确标签。依据路径信息将图片输入至模型进行识别预测,显示预测的结果和正确的标签。测试结果如图2.1.1所示。result()函数基本与随机测试函数结构类似,区别在于后续的图形界面主要调用该函数来实现单个手写汉字的预测,因此会有一个返回值,返回的是预测的标签。同时,文件读取的分割策略也会有所区别。图15正确率测试图随机预测函数random_inference()操作基本类似,打开存放的测试txt文件,随机选取一行图片路径信息,保存正确标签。依据路径信息将图片输入至模型进行识别预测,显示预测的结果和正确的标签。测试结果如图2.1.2所示。result()函数基本与随机测试函数结构类似,区别在于后续的图形界面主要调用该函数来实现单个手写汉字的预测,因此会有一个返回值,返回的是预测的标签。同时,文件读取的分割策略也会有所区别。图16图16随机识别测试图2.3分析比对该部分研究的是本次毕业设计基于CNN的脱机手写汉字识别的识别率与哪些因素有关。该部分主要从两个方面入手,第一个方面是随着分类数量的增多,相同模型下,是否会产生识别率的下降、第二个方面是研究迭代次数与识别率的关系。第一部分,如表1所示,对比200,300,500,1000,2000类别的识别率。表表1识别类别数与识别数对照表类别数20030050010002000识别率78.52%77.72%76.07%70.78%68.16%可以得出两个结论:在模型的结构类似的情况下,对于分类的数量要求越高,训练所得
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 科技创新企业研发投入激励制度
- 物流行业货物运输安全管理制度
- 文娱产业内容审核与发布制度
- 医疗纠纷处理协商制度
- 制造业安全生产规范制度
- 2.5 差错控制技术
- 数控剪板机配件生产项目可行性研究报告模板-立项申报用
- 年产3000吨含氟高分子材料生产线项目可行性研究报告模板立项申批备案
- 护理实践中的沟通障碍与解决策略
- 麻疹风疹防控方案学习考试试卷
- 2026年全民营养周“营养餐桌 家庭健康”系列活动方案(5篇)
- 急性脑血管意外急救流程
- 16 胡萝卜先生的长胡子 课件(内嵌音视频)2025-2026学年统编版语文三年级下册
- 【未来营养】营养餐桌 家庭健康
- 更正登记申请书范本律师
- 黄帝文化精髓与民族精神
- 2026年人教版八年级数学下册 第十九章 二次根式 单元检测基础测试卷(含答案)
- 2025年《地质与矿业工程基础》真题(附答案)
- 2021公路项目安全性评价规程
- 康复护士进修结业汇报
- 2025年11月广东深圳市公办中小学招聘教师454人(编制)(公共基础知识)测试题附答案解析
评论
0/150
提交评论