深度学习手写字符识别:推理过程

说明

本篇博客主要是跟着B站中国计量大学杨老师的视频实战深度学习手写字符识别。
第一个深度学习实例手写字符识别

深度学习环境配置

可以参考下篇博客,网上也有很多教程,很容易搭建好深度学习的环境。
Windows11搭建GPU版本PyTorch环境详细过程

数据集

手写字符识别用到的数据集是MNIST数据集(Mixed National Institute of Standards and Technology database);MNIST是一个用来训练各种图像处理系统二进制图像数据集,广泛应用到机器学习中的训练和测试。

作为一个入门级的计算机视觉数据集,发布20多年来,它已经被无数机器学习入门者应用无数遍,是最受欢迎的深度学习数据集之一。

序号 说明
发布方 National Institute of Standards and Technology(美国国家标准技术研究所,简称NIST)
发布时间 1998
背景 该数据集的论文想要证明在模式识别问题上,基于CNN的方法可以取代之前的基于手工特征的方法,所以作者创建了一个手写数字的数据集,以手写数字识别作为例子证明CNN在模式识别问题上的优越性。
简介 MNIST数据集是从NIST的两个手写数字数据集:Special Database 3 和Special Database 1中分别取出部分图像,并经过一些图像处理后得到的。MNIST数据集共有70000张图像,其中训练集60000张,测试集10000张。所有图像都是28×28的灰度图像,每张图像包含一个手写数字。

手写字符识别模型训练

可以参考下篇博客:
深度学习手写字符识别:训练模型

手写字符识别推理过程

  1. 选用训练好的模型output/params_yl.pth

  2. Pycharm运行AI_course/classify_pytorch/test_mnist.py文件,输入的手写字符图片里的数字是"4"。

  3. 推理源码如下:

python 复制代码
import torch
import cv2
from torch.autograd import Variable
from torchvision import transforms
from models.cnn import Net
from toonnx import to_onnx

use_cuda = False
model = Net(10)
# 注意:此处应把pth文件改为你训练出来的params_x.pth,x为epoch编号,
# 一般来讲,编号越大,且训练集(train)和验证集(val)上准确率差别越小的(避免过拟合),效果越好。
model.load_state_dict(torch.load('output/params_yl.pth'))
# model = torch.load('output/model.pth')
model.eval()
if use_cuda and torch.cuda.is_available():
    model.cuda()

#to_onnx(model, 3, 28, 28, 'output/params.onnx')

img = cv2.imread('4_00440.jpg')
img = cv2.resize(img, (28, 28))
img_tensor = transforms.ToTensor()(img)
img_tensor = img_tensor.unsqueeze(0)
if use_cuda and torch.cuda.is_available():
    prediction = model(Variable(img_tensor.cuda()))
else:
    prediction = model(Variable(img_tensor))
pred = torch.max(prediction, 1)[1]
print(prediction)
print(pred)
cv2.imshow("image", img)
cv2.waitKey(0)
  1. 运行结果:打印其张量,可以看到用训练模型output/params_yl.pth的推理后结果,输入一张手下字4,最终推理结果是4;打印出0-9数字的概率,可以看到"4"的概率最高。
  2. 验证推理有效性:为了验证其推理的真实性,重新手写一个手写字符。注意,得和训练集里的字符一样,黑底白字形式。
  • 手写"0",识别出来的是"0"

  • 手写"3",识别出来的是"3"

  • 手写"5",识别出来的是"7",可以看到识别错了。

  1. 验证推理结果,额外手写了3个字符,未使用测试集里的手写字符验证,对了2个,错了1个;识别率有待提高,可能需要更多次的epoch。

后续

  • 下一篇章跟着视频进行手写字符识别的代码解析。
相关推荐
Cloud云卷云舒9 小时前
云卷云舒:HaishanDB的AI原生能力主要应用场景
数据库·人工智能·ai-native·haishandb·移动云长期记忆
梦梦代码精9 小时前
开源AI应用平台BuildingAI解析:插件化架构、应用市场与热门案例
人工智能·机器学习·docker·开源
半个落月10 小时前
用 LangChain 连接远程 MCP:从工具发现到多轮调用闭环
人工智能·后端·node.js
码上解惑10 小时前
从模型接入到应用运行:智能体开发平台的整体架构设计
人工智能·agent·智能体·spring ai
湘美书院--湘美谈教育10 小时前
湘美谈教育湘美书院大湘西文学系列:AI时代的武侠小说怎么写
大数据·人工智能·深度学习·机器学习·生活
Geoking.10 小时前
JSON vs JSONL:从数据格式到 AI Agent 的工程实践
人工智能·深度学习·json
饼干哥哥10 小时前
腾讯会议出AI同传了?这下跨境人开会不用担心哑巴英语了
人工智能·性能优化·腾讯
亲爱的译官.10 小时前
实测|告别手持翻译设备,AR眼镜能否解决跨语言沟通痛点?
人工智能·ar·亲爱的翻译官·翻译设备
Nturmoils10 小时前
把工具变成可发现能力:鸿蒙端动态能力注册表实践
人工智能
ZGIS智博创享10 小时前
矿产数智化专题连载③ | 深挖AI智能找矿内核:以传统成矿理论为根基,算法赋能隐伏矿体突破
人工智能·知识图谱·ai算法·ai找矿·地质找矿逻辑