1 引言 (Introduction)
交通标志识别是图像处理和模式识别领域的一个研究热点, 广泛应用于无人驾驶汽车、车载导航等领域, 具有很强的实际应用价值。虽然交通标志的图形结构较为简单, 但对自然环境下的交通标志进行识别, 面临着遮挡、噪声、光照多变性、形状失真等多方面的严峻挑战, 因此交通标志识别是模式识别领域的重点研究内容之一。
2 机器学习方法简述 (Three kinds of machine learning methods)
2.1 BP神经网络
BP神经网络是一种按误差逆传播学习算法训练的多层前馈网络, 能学习和存贮大量的输入—输出模式映射关系, 是目前应用最为广泛的神经网络模型之一。
BP神经网络的学习过程由信号的正向传播与误差的反向传播两个过程组成。正向传播的方向为输入层→隐层→输出层, 每层神经元的状态只影响下一层神经元, 在输出层获得响应, 若实际输出与期望输出不符, 则进入误差反向传播阶段。误差反向传播阶段是从输出层经过隐层向输入层反传, 并逐层修正权值, 不断提高正确率。两个过程的交替进行, 是网络误差函数达到最小值, 从而完成信息提取和记忆过程。
3 BP神经网络识别交通标志
(1) 图像预处理
预处理的目的是提高图像对比度, 增强有用信息。本实验的预处理操作是灰度转换 (自适应阈值法) 及二值化。
(2) 特征提取
特征提取是通过降维获得最能反映样本本质的低维特征。本实验采用粗网格特征提取。首先采用最临近插值法将样本缩放至70×50, 再将样本划分成10×10大小的网格, 统计每个网格中像素值, 形成35维的特征向量。
(3) BP神经网络的设计
BP算法可应用于四层或更多的前馈网络, 却更易陷入局部极小点而不收敛, 因此选用三层BP网络, 同时选用有动量因子介入的训练方法, 避免陷入局部极小值。
对于激励函数的选择, 通常采用对数S函数、双曲正切S函数及线性函数。MATLAB中提供三种传递函数与上述激励函数相对应:logsog函数、tansig函数和线性purelin函数。鉴于本文实验输出, 选用tansig函数。
迄今为止, 对隐含层节点数目的选择仍无法用完备的理论解决, 但是要在满足精度要求下尽可能紧凑神经网络的结, 即尽可能减少隐层节点数。一般情况下, 隐层结点个数根据具体训练结果确定。
对于训练函数的选择, 本文采用traingdx函数, 是在动量法的基础上集合自适应学习速率法, 自动调节学习率, 能够有效缩短训练时间。
设置本实验的最大迭代次数1000, 期望目标1e-5, 动量因子0.95。
function varargout = Traffic_Iden(varargin)
% TRAFFIC_IDEN MATLAB code for Traffic_Iden.fig
% TRAFFIC_IDEN, by itself, creates a new TRAFFIC_IDEN or raises the existing
% singleton*.
%
% H = TRAFFIC_IDEN returns the handle to a new TRAFFIC_IDEN or the handle to
% the existing singleton*.
%
% TRAFFIC_IDEN('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in TRAFFIC_IDEN.M with the given input arguments.
%
% TRAFFIC_IDEN('Property','Value',...) creates a new TRAFFIC_IDEN or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before Traffic_Iden_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to Traffic_Iden_OpeningFcn via varargin.
%
% *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 Traffic_Iden
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @Traffic_Iden_OpeningFcn, ...
'gui_OutputFcn', @Traffic_Iden_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
1 matlab版本
2014a
2 参考文献
[1] 蔡利梅.MATLAB图像处理——理论、算法与实例分析[M].清华大学出版社,2020.
[2]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解[M].清华大学出版社,2013.
[3]周品.MATLAB图像处理与图形用户界面设计[M].清华大学出版社,2013.
[4]刘成龙.精通MATLAB图像处理[M].清华大学出版社,2015.
[5]张兴国,刘晓磊,李靖,王环东.BP神经网络下的限速交通标志实时检测识别[J].西安电子科技大学学报. 2018,45(05)
[6]钟玲,于雅洁,张志佳,靳永超.交通标志识别算法的对比与分析[J].软件工程. 2016,19(01)