图像识别技术解析:手写数字识别(二)

        在计算机视觉(CV)运用方面使用的主流技术之一是卷积网络(CNN),本文通过从一篇经典的论文构建一个卷积网络模型,然后使用手写数字识别的程序来对比测试模型预测能力并分析结果。

一、关于卷积网络

首先看一下这篇关于卷积网络的经典论文:

在这篇论文中提到了LeNet-5的卷积神经网络的架构,在下面的架构图中,最左边是输入(这里举的例子是一个尺寸为32x32的英文字母A,依次通过卷积层,池化层,卷积层,池化层,最后通过全连接层输出预测结果)。

卷积层的作用就是从输入中提取特征从而构建特征图,而Subsampling(亚采样)可以用来减少特征图的尺寸。接下来就是根据这样一个架构图构建一个卷积模型,用于手写数字识别程序来预测用户输入的数字是什么,并且和基于随机森林算法的模型的预测结果进行简单的对比分析。

二、训练数据准备

通过手写数字前端页面输入数字来生成模型训练需要的数据集,为了方便两种模型预测结果的对比分析,在前端输入时会尽量书写规范,以下就是新建数据集中数字“5”的图片打印出来的效果(原图片的分辨率为280x280,这里缩小为28x28的尺寸):

按照数字0 – 9 通过前端页面手写输入的方式,合计生成了1200个左右的图片作为训练数据集(这里只是做demo演示用,所以数量不多):

三、使用卷积网络构建模型

根据上面论文中提到的LeNet-5的卷积神经网络的架构来构建模型,首先定义卷积层和池化层:

其次定义3个全连接层:

定义正向传播过程:

四、调用模型进行预测

继续使用前面构建的手写数字程序的前端,只是在后端把之前使用的随机森林算法构建的模型替换为使用卷积网络构建的模型,下面是加载模型的过程:

model.load_state_dict(state_dict=torch.load(f="../saved_models/model_epoch_4_train_0.99672_test_0.99671.mod", map_location="cpu"))

以下是方法predict()中调用模型进行预测的过程,可以进行批量预测:

最后把预测结果返回给前端:

为了能直观比较两个模型的预测效果,可以在后端的predict方法中同时调用卷积模型和随机森林模型。

把前端页面改造一下,便于同时输出两个模型的预测结果,测试过程如下:

首先输入数字“6”,看起还比较规范,但是从预测结果看,卷积模型准确结果正确,而随机森林模型则预测为“1”:

再来看个例子,下面输入的数字“4”的位置有偏移(超出了画面设定的输入框),这时随机森林模型预测结果为“0”,而卷积模型则正确预测出了“4”:

五、总结

从这个手写数字的小程序的测试可以看出机器学习算法的局限性,而基于深度学习的卷积网络算法更能适应复杂多变的环境,当然这里只是在小数据集上使用经典的LeNet进行的一个简单的对比测试而已。

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值