
4.2 基于改进LeNet的交通灯识别
【例4-1】 基于LeNet的基本构架,设计一种卷积神经网络并对其进行训练,实现对输入的交通灯图像进行分类,计算分类准确率。
如图4-3所示,我们采用LeNet为基本构架来设计用于交通灯识别的卷积神经网络,需要将LeNet的网络输出分类根据数据集的分类进行改变。

图4-3 基于LeNet构架的交通灯分类示意图
改进后的网络结构见表4-1。
表4-1 改进后的网络结构

(续)

表4-1所列的网络结构的实现程序如下。

本节中所采用的数据集见本书附赠网盘资料中的文件夹Traffic Light Samples。该数据集中的部分图像如图4-4所示。

图4-4 数据集中的部分图像
该样本中有21个分类,每一个分类都有自己的标签。分类标签由字母数字及下画线组成。具体含义:G代表绿灯,R代表红灯,AF代表向前箭头,AL代表向左箭头,AR代表向右箭头,C代表圆形,数字代表灯的个数,N代表负样本(不是交通灯)。如图4-5所示的图像的分类标签为RC3,如图4-6所示的图像的分类标签为GAL3。

图4-5 分类标签为RC3的图像

图4-6 分类标签为GAL3的图像
将名为Traffic Light Samples的文件夹复制到图像数据集在C盘的\Documents\MATLAB下(MATLAB安装在不同的盘里,路径可能不同。笔者安装后的路径为C:\Users\zhaox\Documents\MATLAB),通过如下程序段进行加载。

实现本节实例需求主要包括以下几个步骤。
步骤1:加载交通灯数据样本。
步骤2:将样本划分为训练集与测试集。
步骤3:构建改进的LeNet卷积神经网络并进行分析。
步骤4:将训练集与验证集中图像的大小调整为与所设计的网络输入层的大小相同。
步骤5:配置训练选项并对网络进行训练。
步骤6:将训练好的网络用于对新的输入图像进行分类,并计算准确率。
步骤7:显示验证效果。
步骤8:创建并显示混淆矩阵。