在博主的YOLOv5手写数字系列教程中,提到使用OpenBayes来完成YOLOv5模型的训练以及部署。本次应课程设计要求,同样基于OpenBayes,使用MNIST数据集与CNN模型来完成手写数字识别任务。相比较于先前的YOLOv5的手写数字任务,本项目的不同之处在于:
- 训练比YOLOv5简单,更加适合新手入门机器学习。
- 使用开源数据集,而非自制数据集,省去了标注的过程。
- 主要使用Pytorch进行训练,可以更快上手主流机器学习工具。
- 有更多的学习资料可供参考。
- 所用CNN模型相比于YOLOv5模型落后一些。
顺带一提,MNIST数据集是一个来自美国国家标准与技术研究所,被用来训练手写数字图像处理系统的二进制图像数据集(即二值化图像)。其中训练集由来自 250 个不同人手写的数字构成,测试集也是同样比例的手写数字数据。MNIST被广泛应用于机器学习中的训练和测试。作为一个入门级的计算机视觉数据集,发布20多年来,已经被无数机器学习入门者“咀嚼”千万遍,是最受欢迎的深度学习数据集之一。
声明:本篇文章旨在于追求实践部分,而尽可能减少理论成分,以防出现大量作品雷同的现象。本系列仅用于个人学习使用。
一、前置准备
1.1 本篇所解决的设计要求
- 下载MNIST或其他手写体数字识别用训练数据集。
- 构建手写体数字识别的神经网络或其他识别模型。
- 利用上述数据集中的图片进行识别模型的训练。
1.2 下载所需训练的示例文件
本项目使用OpenBayes提供的MNIST示例训练来进行。我们使用其中的Pytorch的版本,其中包括一个train.py和openbayes.yaml,YAML文件是OpenBayes训练容器的信息文件,所以我们只使用到其中的train.py即可。train.py是进行训练的主要运行文件。
- Github项目地址:https://github.com/signcl/openbayes-mnist-example
- 蓝奏云备用链接:https://wwl.lanzouo.com/i2RTk1t79xwh
- OpenBayes官方示例文档:https://openbayes.com/docs/tutorial-mnist/
二、开始使用OpenBayes
这篇会讲到如何使用OpenBayes,但还是要引用一下之前的文章,可以参考这篇文章来进一步熟悉OpenBayes的使用:YOLOv5-手写数字识别:二、使用OpenBayes建立YOLOv5环境。
2.1 注册OpenBayes账号
这一步不多赘述。点击下方链接,填写信息注册 OpenBayes,会赠送 60 分钟 RTX 4090 使用时长:
2.2 创建模型训练容器
在左侧的“模型训练”中,点击创建新容器。我们将在创建的容器里进行项目训练。
创建后,你需要在其中填写一些信息。其中包括容器的名称、备注、数据集、接入方式等。在一些必需信息填写完成后,由于本项目使用MNIST数据集进行训练,所以我们在”绑定数据“一栏中搜索”MNIST“数据集。其中包括两个版本的MNIST数据集,我们只选择其中一个即可。
数据集选择完成后,我们的接入方式选择提交任务。在下方框中上传你下载的train.py,然后输入以下执行命令(注意:官方原文档没有–save-model的参数,这会导致模型训练后不会输出结果,所以此处要作修改)。
python train.py --save-model
下一步,我们选择算力。如果你是点击本篇文章链接进行注册的话,恭喜你,你白嫖到了1小时的RTX4090的使用时长!所以此处我们选择使用RTX4090进行训练。没有的可以使用CPU训练,或者自己动用钞能力吧。下一步进行审核,信息都没有问题直接执行即可。
执行训练的过程大概使用5分钟左右。我们稍微等一会即可,可以关注一下日志里的训练信息,看到几个批次下来,损失函数已经很低了。当完成训练时,控制台上方会提示我们“执行完成”,此时我们点击概览右侧的工作目录,可以发现训练好的mnist_cnn.pt模型,我们点击右侧图示位置的按钮,即可下载模型到本地。
三、结语
至此,我们完成了基于OpenBayes在CNN模型上训练MNIST数据集的基本操作。真是简简又单单、轻轻又松松口牙!下一篇我们将针对以下设计要求,介绍如何使用训练好的mnist_cnn.pt模型来运用到实际的手写数字识别任务中:
- 手写多个数字,并分别拍摄成手写体数字的图片。
- 将上述手写体数字图片转换成模型所能够识别的格式。
- 利用训练好的模型识别步骤6生成的手写体数字图像,并给出识别结果。
测试
测试2
测试3