黄瀚宇 陈焯辉 肖梓勤 王达灏 王业哲 赵志红*
(北京理工大学珠海学院,广东珠海 519088)
信息技术是人类历史上的第三次工业革命,计算机、互联网、智能家居等技术的普及极大地方便了人们的日常生活。通过编程的方式,人们可以将提前设计好的交互逻辑交给机器重复且快速地执行,从而将人们从简单枯燥的重复劳动工作中解脱出来。但是对于需要较高智能水平的任务,如人脸识别、聊天机器人、自动驾驶等任务,很难设计明确的逻辑规则,传统的编程方式显得力不从心,而人工智能(Artificial Intelligence, AI)是有望解决此问题的关键技术。
随着深度学习算法的崛起,人工智能在部分任务上取得了类人甚至超人的智力水平,如围棋上AlphaGo 智能程序已经击败人类最强围棋专家之一柯洁,在Dota2 游戏上OpenAI Five 智能程序击败冠军队伍OG,同时人脸识别、智能语音、机器翻译等实用的技术已经进入到人们的日常生活中。现在的生活处处被人工智能所环绕,尽管目前能达到的智能水平离通用人工智能(Artificial General Intelligence, AGI)还有一段距离,但仍坚定地相信人工智能时代已经来临。
本文首先收集手写数字表格,然后用OpenCV(一个基于BSD 许可(开源)发行的跨平台计算机视觉和机器学习软件库)技术制作手写数字图像数据集,接着用LeNet-5 模型检测数据集的数据质量优劣情况,最后使用HTML 和Flask 框架搭建网站,再使用内网穿透使外网用户访问网站。
首先收集100 份手写数字表格,如图1。
图1 手写数字表格
然后使用图像处理中二值化、腐蚀与膨胀技术[1]去除图像中的表格,去除表格后的图像,如图2。
图2 去除表格后的图像
接着使用OpenCV 技术,提取每张图片中所有数字的轮廓。至此,使用OpenCV 技术自制的手写数字图像数据集已完成,共10000 张手写数字图像。
首先使用图像的像素值作为模型的特征,由于特征的数量级不一致,图片像素值的范围为[0, 255],因此需要对特征进行标准化,将原来的在[0, 255]范围内的特征值映射到[0,1]区间。因标签为数字编码,会占用较多的存储空间,因此需将标签转为独热编码,即One-hot 编码。One-hot 编码是非常稀疏的,一般在计算时,需要把离散的数字编码转换成One-hot 编码。最后对数据集进行拆分,选择80%作为训练集,20%作为测试集。即训练集的样本容量为8000,测试集的样本容量为2000。
首先使用LeNet-5 模型作为手写数字图像识别模型,LeNet-5 是由Lecun 等[2]设计的用于识别手写和机器打印字符的卷积神经网络[3],是首次提出的卷积- 池化- 全连接的神经网络结构。LeNet-5 共有7 层(不包括输出层),包含卷积层、池化层和全连接层。输入图片的形状为28×28×1,Convolutions 为卷积层,Subsampling 为池化层,Full connection 为全连接层,Gaussian connections 为输出层,且输出层神经元个数为10。
由于手写数字图像识别[4]属于多分类问题,需分别使用Softmax 与交叉熵作为输出层的激活函数与损失函数,具体如下。
Softmax 激活函数公式:
其中,xi为第i 张图片的像素值,M为类别总数。
Softmax 函数不仅可以将输出值映射到[0, 1]区间,还满足所有的输出值之和为1 的特性。每个输出值代表了当前样本属于每个类别的概率,且概率值之和为1。通过Softmax 函数可以将输出层的输出转译为类别概率,在分类问题中使用得非常频繁。
交叉熵可以很好地衡量两个分布之间的“距离”,其损失函数公式:
其中,c 为类别,M为类别总数。
当Loss 为0 时,损失函数取得最小值,此时网络输出的预测值与标签真实值完全一致,神经网络取得最优状态。
对LeNet-5[5]模型进行训练,设置模型训练的超参数如表1。
表1 模型训练超参数
其中,Epoch 为模型的训练次数,此处设置训练次数为20;Batch size 为批训练大小,设置为128 即一次并行计算128 个样本的数据;Optimizer 为优化器,这里选择Adam 作为图像类别数量预测模型的优化器,它默认学习率(Learning rate)为0.001,是一种基于梯度的随机目标函数优化算法[6];Input shape 为输入图像的形状,设置输入图像为像素大小28×28,并且通道数为3 的RGB 图片;Validation split 为训练集与验证集的比例,设置为0.2 即选择训练集中的80%作为模型的训练集,20%作为验证集,即模型的训练集的样本容量为6400,验证集的样本容量为1600。
模型训练共20 个epoch,耗时5 秒。最终训练集的准确率为99.60%,验证集的准确率为98.12%。并且绘制训练过程的损失值与准确率的变化曲线,最后保存模型。训练过程的损失值和准确率的变化曲线如图3。
图3 去除表格后的图像
将测试集放入模型中进行测试,准确率达到了98.30%,可以看出模型的预测结果较好,手写数字图像识别准确。首先输出模型预测的混淆矩阵如图4。
图4 混淆矩阵
从混淆矩阵来看,混淆矩阵的理想输出结果是主对角线上均存在非零的数字,而非主对角线上的元素均为零,由此可以看出该模型的预测效果好。
再输出分类报告如表2。
表2 分类报告
Precision1为查准率,Recall1为查全率,F1-score 为F1分数。
Support1为标签各类别的数量,它们可用于评估模型的预测效果。
从分类报告来看,查准率和召回率得分都较高,且平均的F1-Score 达到98%,由此也能看出该模型的预测效果好。
使用VGG16、VGG19、ResNet50、DenseNet169 和Dense Net201[7]共5 种深层CNN 模型架构对手写数字图像数据集进行训练。在模型训练之前,先对上述五个模型进行介绍。VGG 系列网络模型是ILSVRC14 挑战赛ImageNet 数据集分类任务的亚军牛津大学VGG 实验室于2014 年提出的,如VGG16 与VGG19 模型。以VGG16 为例,它在ImageNet 取得了7.4%的Top-5 错误率,比AlexNet 在错误率上降低了7.9%。ResNet50 网络则由微软亚洲研究院何凯明于2015 年提出,在ILSVRC2015 挑战赛ImageNet 数据集上的分类与检测等任务上面均获得了最好性能。而DenseNet 与ResNet 颇为相似,但是它将前面所有层的特征图信息通过Skip Connection 与当前层输出进行聚合,与ResNet 的对应位置相加方式不同,DenseNet 采用在通道轴维度进行拼接操作,聚合特征信息。
并且在更换模型训练的过程中控制相同的超参数,所有的模型都在同一环境下进行训练,得出各个模型的得分与耗时如表3。
表3 模型比较
可以看出LeNet-5[8]的准确率已经接近各种大型网络,并且比多个大型网络的要高。另外,耗时比各种大型网络的少得多。因此选用得分较高而且更加小巧的网络LeNet-5 作为训练手写数字图像数据集的模型。
使用HTML 来构建网站页面,再使用flask 框架使网站运转起来,最后使用内网穿透技术来实现外网访问网站。
本文使用OpenCV[9]技术制作手写数字图片数据集,并用LeNet-5 网络检测数据集的数据质量优劣情况。得出自制数据集的测试集得分为98.30%,并从混淆矩阵与分类报告输出结果中发现,数据集是可用的。使用Flask 框架和内网穿透搭建网站使用户可以在网站上使用该模型。