关于图像处理——运用CNN实现数字手写体识别的调研

目录

  • 关于图像处理——运用CNN实现数字手写体识别的调研
    • 前言
      • 关于图像处理
      • 关于CNN
    • 正文
      • 数据处理
      • 特征提取(Feature Extractor)
        • 卷积层设计
        • 池化层设计
      • 分类器(Multi-classifier)
        • 输入层设计
        • 隐层设计
        • 输出层设计
      • 后向传播的实现(Backward)
    • 算法实现
      • 主程序部分
      • CNN-训练部分
        • 前向传播(Forward)
          • 特征提取(Feature Extractor)
          • 分类器(Multi-classifier)
        • 后向传播(Backward)
          • 分类器(Multi-classifier)
          • 特征提取(Feature Extractor)
      • 结果检测
    • 结语
      • 结果分析
      • 网络优化

前言

关于图像处理

当下的21世纪是一个充满信息的时代,图像作为人类感知世界的视觉基础,是人类获取信息、表达信息和传递信息的重要手段。数字图像处理技术,即用计算机对图像进行处理的技术,在当下被广泛地运用到医学,教育,军事等多个领域。受学校以图像处理为主题的新生研讨课的启发,在参加完深度学习课程后,希望通过此例对图像识别有更深入的了解。

关于CNN

卷积神经网络(Convolutional Neural Networks,CNN)是一类包含卷积或相关计算且具有深度结构的前馈神经网络(Feedforward Neural Networks),是深度学习(deep learning)的代表算法之一 。由于卷积神经网络能够进行平移不变分类(shift-invariant classification),因此在文献中也被称为“平移不变人工神经网络(Shift-Invariant Artificial Neural Networks, SIANN)” 。
对卷积神经网络的研究始于二十世纪80至90年代,时间延迟网络和LeNet-5是最早被证实有效的卷积神经网络算法;在二十一世纪后,随着数值计算设备的改进,卷积神经网络得到了快速发展,并被大量应用于计算机视觉、自然语言处理等领域 。
FROM 百度百科-卷积神经网络

本例将以CNN的学习规则为基础结合BP算法,参考数据库中的原始MNIST数据,实现简单的数字手写体的识别。

正文

程序架构

以CNN为基础的程序框架主要分为特征提取(Feature Extractor)和分类器(Multi-classifier)两个部分。通过训练数据的前向(Forward Algorithm)输入运算和误差的后向传播(BP Algorithm)运算,多轮训练获得合适的权值,使得输出逐步靠近真实输出。

数据处理

  • 训练数据用0-1编码,以便进行矩阵运算。本例中单个输入样本为28×28矩阵。
  • 输出结果采用单热编码(e.g. ‘1’=[1 0 0 0 0 0 0 0 0 0],仅用于分类区分),以便于网络设计与统计。

特征提取(Feature Extractor)

这一部分分为卷积层和池化层两部分。通过设置滤波器,我们用卷积层提取图像中的特征。(值得注意的是,用大量数据训练提取出的图像特征大部分十分抽象而与人类肉眼判断的相差很大。)随后通过池化层池化降维以便于之后的运算(本例运用取平均值的方法降维)。

分类器(Multi-classifier)

这一部分的程序设计采用包含一个有100个节点的单隐层神经网络结构(输入层+隐层+输出层)。基于梯度下降算法和BP算法,用每一个输入调整层与层之间的权重矩阵达到训练网络的目的。

  • 输入层设计

  1. 从特征提取网络传入的单组样本为20个10×10的矩阵(因为有20个滤波器,故而每一个输入样本有20组输出),为方便之后的分类训练,我们将其转化为一个2000×1的向量;
  2. 设置第一层权重矩阵大小为100×2000;
  3. 运用ReLU作为第一层的激活函数。
  • 隐层设计

  1. 设置隐层权重矩阵大小为10×100;
  2. 设置激活函数为ReLU。
  • 输出层设计

  1. 设置输出层激活函数为Softmax(用于多分类问题的激活函数);
  2. 最终输出结果为10×1的向量,最大值对应表征为1,其余值表征为0。

后向传播的实现(Backward)

本例中,采用后向传播算法不断更新权值,使得最终输出逐步逼近真实值。而后后向传播的关键在于梯度下降的概念,通过从后往前传导误差,达到训练目的,在此不做赘述。
可参照公式:

(说明:J为代价函数;w为权重矩阵;e为误差;x为前层输出)

算法实现

主程序部分

% this is my main program for MNIST
% CNN and BP are used to build whole structure
% this is a basic one
% name: 余尔聪
% date: 2018-11-28load('MNISTData.mat');
% import TRAINING and TESTING Data% initiation of variables
X = X_Train; % training data-input
D = D_Train; % training data-output
W1 = randn(9,9,20); % 9×9 Convolution Matrix
W3 = (2*rand(100,2000)-1)/20; % 1st layer Weight Matrix
W4 = (2*rand(10,100)-1)/10; % 2nd layer Weight Matrix% Training for 1 time[W1,W3,W4] = CNN(X,D,W1,W3,W4);% Show Accuracy
acc = ACC(D_Test,X_Test,W1,W3,W4);
fprintf('Accuracy is %f\n', acc);

本例只进行了一轮训练作为示例(也因为样本量足够大-60000个,但实际情况下多数需要多轮训练)。

CNN-训练部分

function [W1,W3,W4] = CNN(X,D,W1,W3,W4)
% this is the training function
% comprised of Feature Extractor and Multi-classifier
% inputs include Training input and output, W1, W2, W3
% aims to find proper W1, W2, W3 as outputdW1 = zeros(9,9,20); % preallocating for being fasteralpha = 0.01; % step lengthfor k = 1:60000 % one epoch for one samplex = X(:,:,k); % initiate one epoch inputd = D(:,k); % initiate one epoch output

前向传播(Forward)

  • 特征提取(Feature Extractor)
        % Forward Algorithm% Feature Extractor % comprised of Convolution and Poolingfor m = 1:20V1(:,:,m) = conv2(x,rot90(W1(:,:,m),2),'valid'); % Convolution AlgorithmendY1 = max(0,V1); % Activation Function-ReLUY2 = (Y1(1:2:end,1:2:end,:)+Y1(2:2:end,1:2:end,:)+Y1(1:2:end,2:2:end,:)+Y1(2:2:end,2:2:end,:))/4; % Pooling by 2×2 Mean
  • 分类器(Multi-classifier)
        % Multi-classifiery2 = reshape(Y2,[],1); % reshape Y2 into 2000×1 vectorv3 = W3*y2; % 1st layer calculationy3 = max(0,v3); % ReLUv = W4*y3; % 2nd layer calculationy = Softmax(v); % Softmax-multiclassification

后向传播(Backward)

  • 分类器(Multi-classifier)
        % BP Algorithm% Multi-classifiere = d-y; % error of outputdelta = e; % cross_entropy+Softmaxe3 = W4'*delta; % error of 2nd layerdelta3 = (v3>0).*e3; % ReLUe2 = W3'*delta3; % error of 1st layerdW4 = alpha*delta*y3'; % change in W4dW3 = alpha*delta3*y2'; % change in W3W3 = dW3+W3; % update W3W4 = dW4+W4; % update W4
  • 特征提取(Feature Extractor)
        % Feature ExtractorE2 = reshape(e2,size(Y2)); % reshape e2 into 10×10×20 matrixE1 = zeros(size(Y1));E2_4 = E2/4; % backward poolingE1(1:2:end,1:2:end,:) = E2_4;E1(1:2:end,2:2:end,:) = E2_4;E1(2:2:end,1:2:end,:) = E2_4;E1(2:2:end,2:2:end,:) = E2_4;delta1 = (V1>0).*E1; % ReLUfor m = 1:20dW1(:,:,m) = alpha*conv2(x,rot90(delta1(:,:,m),2),'valid');% change in W1endW1 = W1+dW1; % update W1

结果检测

运用测试集(除训练集以外的样本)检测训练结果(三个权重矩阵)。

function acc = ACC(D_Test,X_Test,W1,W3,W4)
% This is Used to Show AccuracyN = length(D_Test);d_comp = zeros(1,N);for k = 1:Nx = X_Test(:,:,k); % initiate one epoch input% Feature Extractor % comprised of Convolution and Poolingfor m = 1:20V1(:,:,m) = conv2(x,rot90(W1(:,:,m),2),'valid'); % Convolution AlgorithmendY1 = max(0,V1); % Activation Function-ReLUY2 = (Y1(1:2:end,1:2:end,:)+Y1(2:2:end,1:2:end,:)+Y1(1:2:end,2:2:end,:)+Y1(2:2:end,2:2:end,:))/4; % Pooling by 2×2 Average% Multi-classifiery2 = reshape(Y2,[],1); % reshape Y2 into 2000×1 vectorv3 = W3*y2; % 1st layer calculationy3 = max(0,v3); % ReLUv = W4*y3; % 2nd layer calculationy = Softmax(v); % Softmax-multiclassification% Statistics Accuracy[~, i] = max(y);d_comp(k) = i;end
[~, d_true] = max(D_Test); % real output
correctMsk = (d_comp == d_true); % counting
acc = sum(correctMsk)/N; % rate calculation
end

结语

结果分析

运行时间

正确率

MAINPro
Accuracy is 0.975800

注:正确率会因为权重矩阵初始化的不同而有所差异。

网络优化

本例中的程序框架使用了CNN算法,其耗时283.148s(当然取决于自己的电脑了),正确率为97.58%左右。为了提高收敛速度,可以考虑使用批量算法,动量算法;为了提高正确率,可以考虑加深网络层数,使用Dropout,改变激活函数,代价函数……以改变网络性能。

写在最后
作为第一次写博客的新手、深度学习的初学者,希望大家多多包涵。
如有错误,望指正~

关于图像处理——运用CNN实现数字手写体识别的调研相关推荐

  1. MNIST | 基于朴素贝叶斯分类器的0-9数字手写体识别

    MNIST | 基于朴素贝叶斯分类器的0-9数字手写体识别 1 背景说明 2 关于数据集 2.1 什么是MNIST 2.2 数据集处理 3 代码实现 3.1 文件目录 3.2 核心代码 3.3 注意点 ...

  2. MNIST | 基于k-means和KNN的0-9数字手写体识别

    MNIST | 基于k-means和KNN的0-9数字手写体识别 1 背景说明 2 算法原理 3 代码实现 3.1 文件目录 3.2 核心代码 4 实验与结果分析 5 后记 概要: 本实验是在实验&q ...

  3. 基于CNn的MINIST手写体识别

    深度学习的上机作业: 基于CNN卷积神经网络的MINIST手写体识别 版本:python-3.9,tensorflow-2.9 目录 MINIST数据集 训练CNN卷积神经网络 使用训练好的模型进行预 ...

  4. cnn卷积神经网络手写体识别keras和tensorflow

    在学习手写体识别的时候,看到一些B站的教学视频发现,很多用TensorFlow完成的手写体识别,在下载数据集的时候会报错,无法使用,这是因为TensorFlow在维护的时候,处理的不是很好,无法使用i ...

  5. 数字手写体识别python实现(全连接神经网络)

    效果展示 向网络输入测试集中'7'并绘出该输入图,得到10个标签的概率,7对应的标签概率最高,效果很好 全连接神经网络 训练测试集 mnist训练测试集,是一个手写数字识别库,世界上最权威的,美国邮政 ...

  6. 基于CNN的手写体识别与GUI系统设计(新手快进来!)

    目录 1. 写在前面 2. 环境搭建 3. 卷积神经网络 4. 数字手写体识别实现 1. 写在前面     这是我的本科毕设,今天终于差不多降完重了哈哈,总共耗时一个半月,写完赶紧趁热打铁来记录一下整 ...

  7. python神经网络案例——CNN卷积神经网络实现mnist手写体识别

    分享一个朋友的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!大家可以看看是否对自己有帮助:点击打开 全栈工程师开发手册 (作者:栾鹏) python教程全解 CNN卷积神经网络的理论教程参考 ...

  8. ZYNQ图像处理项目——模板匹配数字识别(1)

    一.数字识别基础 FPGA全并行运行的特点,特别适合用于图像的处理.数字识别是一项关键技术,是图像识别等的基础,数字识别主要由以下这几种方法. 基于模板分类匹配的数字识别算法 模版匹配法是一种传统的比 ...

  9. 机器学习|卷积神经网络(CNN) 手写体识别 (MNIST)入门

    人工智能,机器学习,监督学习,神经网络,无论哪一个都是非常大的话题,都覆盖到可能就成一本书了,所以这篇文档只会包含在 RT-Thread 物联网操作系统,上面加载 MNIST 手写体识别模型相关的部分 ...

最新文章

  1. 通过网络安装VMware ESX Server 5
  2. SGU 111 Very simple problem
  3. 深圳内推 | ​腾讯优图实验室视频组招聘计算机视觉算法研究员/实习生
  4. 【JavaScript+JinJa2】表格中将后台传入的None值显示为空字符串,将数据显示为int类型值
  5. res.data.data_在Data.gov进行幕后推销
  6. bzoj1037 [ZJOI2008]生日聚会Party 插数dp
  7. 太阳能电池板正负极图_太阳能LED路灯故障原因有哪些?
  8. 微软彻底拥抱 Python!
  9. 删除的时候提示“该项目不在C:\User\桌面 中
  10. 完全公平调度 c语言,使用完全公平调度程序(CFS)进行多任务处理
  11. 如何打开.azw3 .epub .mobi文件?
  12. 顺网服务器ip修改工具,一键更换IP工具,修改IP地址 — 活动撸羊毛必备
  13. 软件项目管理期末选择题复习100题(含答案)
  14. 【算法竞赛入门经典】习题1-4:正弦和余弦
  15. Encoder-Decoder综述理解(推荐)
  16. 模仿天猫商城的J2EE商城网站项目后端5——bean包
  17. esxi服务器下虚拟机Ubuntu系统搭建PPPoE拨号服务
  18. Wirecast Pro 11 Mac(直播软件) v11.0.0中文破解版
  19. 为什么不建议你吃精致碳水,这里有你需要的答案
  20. 水木清华站长:水木清华十五年辛酸成败

热门文章

  1. 目标检测【Object Detection】
  2. (附源码)springboot客户信息管理系统 毕业设计 281609
  3. 四大私募量化策略解析——阿尔法、套利、期货CTA、高频交易
  4. DockerBuild报错:The command ‘/bin/sh -c yum install -y vim‘ returned a non-zero code: 1
  5. ASP.NET GridView分页
  6. 使用sobel算子提取图片轮廓
  7. 华为p10手机安装linux,matebookD安装linux系统总结
  8. Javascript 模块化简介
  9. 太子妃升职记全集种子下载
  10. HTML强制关机,电脑死机如何强制关机重启