问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

毕业设计:基于深度学习的手写字识别

创作时间:
作者:
@小白创作中心

毕业设计:基于深度学习的手写字识别

引用
CSDN
1.
https://m.blog.csdn.net/qq_37340229/article/details/135869300

大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。本文分享基于深度学习的手写字识别的毕业设计课题,帮助大家顺利通过和节省时间与精力投入到更重要的就业和考试中去。

前言

标点符号、调整字体和文字位置、提取图像特征等技术是脱机手写汉字识别的关键挑战。当前的研究主要集中在优化特征提取算法、改进分类器模型和使用深度学习技术等方面,以提高脱机手写汉字识别的准确度和鲁棒性。脱机手写汉字识别技术的进一步发展将为文字识别、文档处理和自然语言处理等领域提供更加精确和可靠的解决方案。

实现技术思路

一、 算法实现

1.1 算法原理

通过融合传统机器学习算法,解决传统机器学习识别效果差与深度网络泛化能力、速度慢的问题。主要算法步骤如下:

(1)数据的采集与输入。针对票据合同中的手写体汉字样本进行采集,并将采集的图片汇集成数据集。

(2)数据加工与图像增强过程。针对每个汉字进行单独标注,并对采集的图片进行图像增强处理。由于票据合同中某些常用汉字出现频率较高,需要对数据集进行数据扩增,以防止在模型拟合时发生过拟合。

(3)改进YOLO-9000模型。YOLO-9000是能够对9000个类别的物体进行识别的模型。在常见的票据合同中,每个汉字都可以视为一个物体,而票据合同中常用的汉字约为500-1000个,因此可以改进YOLO-9000模型,将分类减少到1000类。

(4)DBN模型训练。DBN模型由一系列叠加的玻尔兹曼机(RBM)和顶层的反向传播网络(BP)组成。在有标签样本的训练模型阶段,通过调整BP网络的权值,逐层反向传播实际输出与预期数据的误差。通过RBM层进行无监督的机器学习训练,将下层RBM的输出作为上一层的输入。然后使用BP神经网络对输出结果进行训练,通过逐层反向传播实际输出与预期输出的误差来调整网络权重,最终得到DBN模型。

(5)模型融合。步骤4和步骤5的两个模型都可以用于手写体汉字识别,并应用各自的网络进行特征提取。由于YOLO和DBN模型的建模本质有所区别,它们在特征提取方面各有优势。通过融合YOLO和DBN的模型,可以在识别能力上超过单一模型。

(6)结果输出。通过步骤五模型融合的结构,对于一个新输入的样本x,将其所属分类的最大概率值进行输出,并进行结果的可视化展示。

1.2 汉字识别流程

手写体汉字的识别系统主要由数据采集、数据清洗、模型融合和结果输出四部分组成。下面对每个部分进行详细说明:

  1. 数据采集与数据清洗:这一部分负责收集原始的手写体汉字样本,并对这些样本进行标注和清洗。数据采集可以通过扫描或拍摄票据合同中的手写体汉字来获取图像样本。然后,对每个汉字进行单独的标注,以便后续的模型训练和评估。数据清洗包括对图像进行预处理和增强,例如调整图像大小、去噪、增强对比度等,以提高后续模型的准确性和鲁棒性。

  2. 模型融合:在这一部分,通过将不同模型或算法的预测结果进行融合,提高手写体汉字识别系统的性能。可能使用的模型包括改进的YOLO9000模型和DBN(深度置信网络)模型。在融合过程中,可以使用统计方法统计不同模型对于不同汉字的识别能力,并根据统计结果进行融合决策。融合可以基于权重加权求和、投票或其他融合策略进行。

  3. 输出结果:针对一个新输入的样本,通过模型融合后的系统,输出预测结果。预测结果可以是对应于最大概率的分类标签,表示输入手写体汉字所属的类别。为了使模型更加泛化和减轻过拟合,可以对输出的熵进行正则化处理。熵是一个度量概率分布不确定性的指标,通过正则化熵可以提高模型的一般化能力。

改进的YOLO9000模型和DBN模型在整个系统中起到关键作用。改进的YOLO9000模型通过减少卷积层数、引入dropout层和使用交叉熵损失函数加平均差相似度函数来提高分类性能。DBN模型则通过训练神经元之间的权重,通过无监督的机器学习训练和逐层反向传播来得到适用于手写体识别的DBN模型。

二、 数据集

为了使网络模型能够快速、简单、易于理解地进行分类,首先选择了一个手写汉字库,并为每个汉字构造了对应的标签。然后,对选择的手写汉字库进行批量预处理,以确保待识别的图片与数据集中的图片具有一致性。

卷积神经网络在这项研究中包含了15层卷积层。通过改进卷积层的结构,减少了瓶颈结构的卷积操作,减轻了网络的复杂度。具体地,删除了两层1×1的卷积层,并将原本的9个卷积层减少为6个。此外,在每个最大池化层之后都应用了dropout层,以防止过拟合现象的发生。

三、实验及结果分析

改进的模型,相比传统的机器学习模型,在保证识别时长的情况下,显著提升了手写体汉字的识别率和运算识别速度。与单一的深度学习模型相比,融合模型通过调节加权因子,使得识别率更高,并且具有更好的泛化性能,能够防止过拟合现象的发生。

相关代码示例:

import torch
import torch.nn as nn
import torch.optim as optim

class ImprovedYOLO9000(nn.Module):
    def __init__(self):
        super(ImprovedYOLO9000, self).__init__()
        self.conv1 = nn.Conv2d(3, 64, kernel_size=3, stride=1, padding=1)
        self.dropout1 = nn.Dropout2d(p=0.5)
        self.conv2 = nn.Conv2d(64, 128, kernel_size=3, stride=1, padding=1)
        self.dropout2 = nn.Dropout2d(p=0.5)
        self.fc1 = nn.Linear(128 * 7 * 7, 1024)
        self.fc2 = nn.Linear(1024, num_classes)

    def forward(self, x):
        x = nn.ReLU()(self.conv1(x))
        x = self.dropout1(x)
        x = nn.ReLU()(self.conv2(x))
        x = self.dropout2(x)
        x = x.view(x.size(0), -1)
        x = nn.ReLU()(self.fc1(x))
        x = self.fc2(x)
        return x

criterion = nn.CrossEntropyLoss()
similarity_loss = nn.L1Loss()

# 创建模型实例
model = ImprovedYOLO9000()

# 定义优化器
optimizer = optim.Adam(model.parameters(), lr=0.001)

# 训练模型
for epoch in range(num_epochs):
    # 前向传播
    outputs = model(inputs)
    # 计算交叉熵损失
    loss_ce = criterion(outputs, labels)
    # 计算平均差相似度损失
    loss_sim = similarity_loss(outputs, targets)
    # 总损失
    loss = loss_ce + loss_sim
    # 反向传播和优化
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号