⛄一、 神经网络简介
1 概述
树叶识别与分类在对于区分树叶的种类,探索树叶的起源,对于人类自身发展、科普具有特别重要的意义。目前的树叶识别与分类主要由人完成,但,树叶种类成千上万种,面对如此庞大的树叶世界,任何一个植物学家都不可能知道所有,树叶的种类,这给进一步研究树叶带来了困难。为了解决这一问题,一些模式识别方法诸如支持向量机(Support Vector Ma⁃chine,SVM)[1],K最近邻(k-Nearest Neighbor,KNN)[2]等被引入,然而,随着大数据时代的到来,这些传统分类算法暴露出越来越多的不足,如训练时间过长、特征不易提取等不足。
上世纪60年代开始,学者们相继提出了各种人工神经网络[3]模型,其中卷积神经网络由于其对几何、形变、光照具有一定程度的不变形,因此被广泛应用于图像领域。其主要特点有:1)输入图像不需要预处理;2)特征提取和识别可以同时进行;3)权值共享,大大减少了需要训练的参数数目,是训练变得更快,适应性更强。
卷积神经网络在国内研究才刚刚起步。Le Net-5[4]就是一种卷积神经网络,最初用于手写数字识别,本文研究将卷积神经网络Le Net-5模型改进并应用于树叶识别中。本文首先介绍一下卷积神经网络和Le Net-5的结构,进而将其应用于树叶识别,设计了实验方案,用卷积神经网络与传统的模式识别算法支持向量机(SVM)进行比较,得出了相关结论,并对进一步研究工作进行了展望。
2 人工神经网络
人工神经网络方面的研究很早就已开展,现在的人工神经网络已经发展成了多领域、多学科交叉的独立的研究领域。神经网络中最基本的单元是神经元模型。类比生物神经元,当它“兴奋”时,就会向相连的神经元发送化学物质,从而改变这些神经元的状态。人工神经元模型如图1所示:
图1 神经元
上述就是一个简单的神经元模型。在这个模型中,神经元接收来自n个其他神经元传递过来的输入信号,这些信号通过带权重的w进行传递,神经元接收到的总输入值将与神经元的阈值进行比较,然后通过“激活函数”来产生输出。
一般采用的激活函数是Sigmoid函数,如式1所示:
2.1 多层神经网络
将上述的神经元按一定的层次结构连接起来,就得到了如图3所示的多层神经网络:
图3 多层神经网络
多层神经网络具有输入层,隐藏层和输出层。由于每一层之间都是全连接,因此每一层的权重对整个网络的影响都是特别重要的。在这个网络中,采用的训练算法是随机梯度下降算法[5],由于每一层之间都是全连接,当训练样本特别大的时候,训练需要的时间就会大大增加,由此提出了另一种神经网络—卷积神经网络。
2.2 卷积神经网络
卷积神经网络(CNN)由于在图像分类任务上取得了非常好的表现而备受人们关注。发展到今天,CNN在深度学习领域已经成为了一种非常重要的人工神经网络。卷积神经网络的核心在于通过建立很多的特征提取层一层一层地从图片像素中找出关系并抽象出来,从而达到分类的目的,CNN方面比较成熟的是Le Net-5模型,如图4所示:
图4 Le Net-5模型
在该Le Net-5模型中,一共有6层。如上图所示,网络输入是一个28x28的图像,输出的是其识别的结果。卷积神经网络通过多个“卷积层”和“采样层”对输入信号进行处理,然后在连接层中实现与输出目标之间的映射,通过每一层卷积滤波器提取输入的特征。例如,Le Net-5中第一个卷积层由4个特征映射构成,每个特征映射是一个24x24的神经元阵列。采样层是基于对卷积后的“平面”进行采样,如图所示,在第一个采样层中又4的12x12的特征映射,其中每个神经元与上一层中对应的特征映射的2x2邻域相连接,并计算输出。可见,这种局部相关性的特征提取,由于都是连接着相同的连接权,从而大幅度减少了需要训练的参数数目[6]。
⛄二、部分源代码
function varargout = gui(varargin)
%GUI MATLAB code file for gui.fig
% GUI, by itself, creates a new GUI or raises the existing
% singleton*.
%
% H = GUI returns the handle to a new GUI or the handle to
% the existing singleton*.
%
% GUI(‘Property’,‘Value’,…) creates a new GUI using the
% given property value pairs. Unrecognized properties are passed via
% varargin to gui_OpeningFcn. This calling syntax produces a
% warning when there is an existing singleton*.
%
% GUI(‘CALLBACK’) and GUI(‘CALLBACK’,hObject,…) call the
% local function named CALLBACK in GUI.M with the given input
% arguments.
%
% *See GUI Options on GUIDE’s Tools menu. Choose “GUI allows only one
% instance to run (singleton)”.
%
% See also: GUIDE, GUIDATA, GUIHANDLES
% Edit the above text to modify the response to help gui
% Last Modified by GUIDE v2.5 9-Mar-2023 11:19:22
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct(‘gui_Name’, mfilename, …
‘gui_Singleton’, gui_Singleton, …
‘gui_OpeningFcn’, @gui_OpeningFcn, …
‘gui_OutputFcn’, @gui_OutputFcn, …
‘gui_LayoutFcn’, [], …
‘gui_Callback’, []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
% — Executes just before gui is made visible.
function gui_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin unrecognized PropertyName/PropertyValue pairs from the
% command line (see VARARGIN)
% Choose default command line output for gui
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% UIWAIT makes gui wait for user response (see UIRESUME)
% uiwait(handles.figure1);
% — Outputs from this function are returned to the command line.
function varargout = gui_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Get default command line output from handles structure
varargout{1} = handles.output;
% — Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
load(‘netTransfer.mat’)
h=warndlg(‘模型加载成功’,‘提示’,‘modal’);
handles.netTransfer=netTransfer;
guidata(hObject, handles)
% — Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
[filename,filepath] = uigetfile({‘.bmp;.jpg;.png;.jpeg;.tif’,…
'文件类型 (.bmp,.jpg,.png,.jpeg,.tif)’;‘.’, ‘所有文件(.)’},…
‘Pick an image’);
file = strcat(filepath,filename);
in = imread(file);
in=imresize(in,[227,227]);
axes(handles.axes1);
imshow(in);
handles.in=in;
guidata(hObject, handles)
% — Executes on button press in pushbutton3.
function pushbutton3_Callback(hObject, eventdata, handles)
netTransfer=handles.netTransfer;
picture=handles.in;
tic;
label = classify(netTransfer,picture);
toc;
t=toc;
set(handles.edit1,‘String’,label);
set(handles.edit2,‘String’,t);
⛄三、运行结果
⛄四、matlab版本及参考文献
1 matlab版本
2014a
2 参考文献
[1]许振雷,杨瑞,王鑫春,应文豪.基于卷积神经网络的树叶识别的算法的研究[J].电脑知识与技术. 2016,12(10)
3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除