基于Tensorflow 的车型识别系统研究
2022-10-31何梓林
何梓林
(200093 上海 上海理工大学)
0 引言
随着社会交通事业的蓬勃发展,省、市际公路网、高速、桥梁及其收费网点迅猛增加,车辆智能分类越来越受到重视,直接促使车型分类辨认系统成为“智能交通”的一个重要组成部分。随着计算机和数字图像以及信号信息处理检测技术的发展,机器视觉检测器取代传统检测器进行车辆检测已经成为一种具有巨大发展潜力的检测方法[1]。
车型智能识别是指以数字图像或视频信号流作为研究对象,通过图像处理与自动识别获取机动车辆有关型号信息的技术。随着计算机技术、软件技术、模式识别技术等的快速发展,车型识别产品在智能交通系统中得到了广泛应用。
文献[2]将目前常见车型分为3 大类:客车、卡车和轿车。本文采集了1 650 余张图片,将车辆分为6 种常见车型:公共汽车、轿车、消防车、卡车、中巴车和SUV。采用基于Tensorflow 框架、应用卷积神经网络对6 种类型的汽车图片进行处理、数据增强、建模、训练、测试等,通过多次训练校正神经网络超参数,最终得到准确率约为92%的汽车类型识别神经网络模型。
1 Tensorflow 深度学习框架
TensorFlow 是谷歌基于DistBelief 研发的人工智能学习系统,它将复杂的数据结构传输至人工智能神经网进行分析和处理。TensorFlow 完全开源,具有可移植性、可延伸性、高效性、灵活性等特点。目前,TensorFlow 机器学习逐渐成为一个重要的研究热点[3],它提供了丰富的构建和训练机器学习模型的 API 库,支持卷积神经网络(CNN)、循环神经网络(RNN)、长短期记忆网络(LSTMN)等深度神经网络模型。
2 卷积神经网络理论
2.1 卷积神经网络概述
卷积神经网络是近年发展起来并引起广泛重视的高效识别方法。20 世纪中期,HUBEL 和WIESEL 在研究猫脑皮层中用于局部敏感和方向选择的神经元时,发现其独特的网络结构可有效降低反馈神经网络的复杂性,继而提出了卷积神经网络(CNN)[4]。现在,CNN 已经成为众多学科领域的研究热点之一,特别是在图片分类领域,由于该网络无需对图像进行复杂的前期预处理,甚至一张原始图像不经处理即可作为其网络的输入对象,因而CNN 得到了广泛的应用。
当电脑看到一个图像(以图像作为输入)时,它看到的其实是一个像素值的数组。假设有一个JPG 格式的彩色图像,它的大小是64×64,代表性的数组将是64×64×3,3 指的是RGB 值。这些数字中的每一个都有一个从0 到255 的值,它描述该点的像素强度。这些数字对于人类肉眼进行图像分类时虽然毫无意义,却是计算机唯一可利用的输入信息。图1 所示为一个完整的卷积神经网络框架,由卷积层conv1、池化层p1、卷积层conv2、池化层p2 和全连接层构成[5]。
图1 卷积神经网络模型Fig.1 Convolutional neural network model
2.2 卷积层
卷积神经网路中每层卷积层由若干个卷积单元组成,每个卷积单元的参数通过反向传播算法优化得到。卷积运算的目的是提取输入的不同特征,第1 层卷积层可能只提取一些低级的特征如边缘、线条和角等层级,更多层的网络就能从低级特征中迭代提取出更复杂的特征[6]。
如图2 所示,经过一个3×3 的卷积核处理后,输入图像已经显得棱角分明、画面清晰。该卷积利用图像的边缘信息比周围像素有更高的对比度,经过卷积之后进一步增强了这种对比,从而达到锐化图像的效果。
图2 卷积Fig.2 Convolution
2.3 池化层
池化层实际上是一种形式的降采样,它具有多种不同形式的非线性池化函数,而其中“最大池化(Max pooling)”是最为常用的。最大池化是指将输入的图像划分为若干个矩形区域,对其中每个子区域都输出最大值。池化能够有效的原因主要是发现一个特征之后,它的精确位置远不及它和其他特征的相对位置的关系重要。池化层会不断地减小数据的空间大小,因此会导致参数的数量和计算量下降,这在某种程度上也可以控制过拟合。常见的池化层除最大池化还有平均池化、全局平均池化、全局最大池化和重叠池化[7]。
对输入图像的卷积过程中,只存在少量的有用信息,大多数信息属于冗余信息,采用最大池化能避免较多冗余信息的介入。
3 卷积神经网络车型图片分类
3.1 数据来源
本文原始图片数据主要是从湖南大学2018-2019 秋季学期《机器学习》课程项目提供的2 000余张标注了的车辆场景分类信息的高分辨率图片和BIT-Vehicle 数据集中人工筛选出的。
BIT-Vehicle 数据集是北京理工大学实验室公布的一批数据,包含9 850 张车辆图像,这些图像包含照明条件、尺度、车辆表面颜色和视点的变化,数据集中的所有车辆分为6 类:公共汽车、微型汽车、小型货车、轿车、SUV 和卡车[8]。本文将汽车分为6 种车型:公共汽车、轿车、消防车、卡车、中巴车和SUV,不同类型目标的图片数目分别为156,258,155,302,145,289。
3.2 数据增强与数据预处理
3.2.1 数据增强
一般而言,比较成功的卷积神经网络往往需要大量的训练数据,而实际情况中数据并没有想象的那么多,为了进行更多训练和获取数据,一般采用2 种方法:一是获取新数据,这往往需要在技术上投入大量成本;二是对已有训练数据进行强化,比如对现有训练数据进行翻转、平移或旋转以创建更多数据。通过数据增强,可以极大增加训练的数据容量,提高模型的泛化性能,同时还增加了噪声和数据,提升了模型的鲁棒性,避免过拟合。
Keras 作为前端,在keras.preprocessing.image模块中有专门用于做数据增强的图片生成器ImageDataGenerator,每一次给模型一个“batch_size”大小的样本数据,同时也可以在每一批次中对“batch_size”个样本数据进行数量增强,扩充数据集大小以增强神经网络模型的泛化能力。常见的增强手段有旋转、变形、归一化等等。如图3 所示,9 张图中第1 张为原图,后8 张都是通过一定程度的翻转变换、缩放变换、尺度变换、错切变换、对比度变换等数据增强手段得到的图片[9]。通过数据增强后的数据集各车型数目如表1 所示。
图3 数据增强Fig.3 Data enhancement
表1 数据增强后各车型数目Tab.1 The number of models after data enhancement
3.2.2 数据预处理
由于神经网络在接收输入图片时,只能接收一个或几个固定的尺寸,原始图片数据集的尺寸又各式各样,所以将图片输入到卷积神经网络之前,需对图片进行预处理及优化。考虑到每张图片具有不同的形状和大小,所以对图片数据集的第1 步处理是使图像大小相同,本文中将数据集图片统一处理成64×64 像素大小的图片。
除图像尺寸需要统一外,还要对图像色彩进行调整。色彩调整包括对图像的亮度、对比度、饱和度和色相方面的调整,训练神经网络模型时将随机调整这些属性,目的是使经过训练的模型尽可能少地受这些与图像识别无关因素的影响,使CNN 模型更加稳定。
3.3 基于Tensorflow 的卷积神经网络模型构建
如前文所述,卷积神经网络主要由输入层、卷积层、池化层、全连接层和输出层组成。ALEX Krizhevsky 在2012 年提出的Alexnet 深度学习模型引爆了神经网络的应用热潮,使得CNN 成为在图像分类上的核心算法模型。首先,Alexnet 模型使用RelU 函数作为CNN 的激活函数,解决了梯度弥散问题;其次,在训练时使用Dropout 随机忽略一部分神经元,以避免模型过拟合;同时,在CNN 中使用重叠的最大池化,避免了平均池化的模糊化效果。本文搭建的卷积神经网络模型即是在AlexNet 模型的基础上,改变原网络的卷积层,采用2 个3×3 的卷积层堆叠,同时对全连接层参数进行调整。
本文以Tensorflow 为后端,keras 作为前端进行建模,分别对每层进行介绍:
(1)Input 层:为输入层,卷积神经网络的输入数据是维度为64×64×3 的图像,即输入图像的高度为64,宽度为64,色彩,通道数为3。
(2)Conv1 层:为卷积神经网络的第1 个卷积层,使用的卷积核为(3*3*1)*64(卷积核大小为3*3,输入通道为1,输出通道为64),步长为1,Padding 为same 方式,保证输入图片大小和输入图片大小一致。
(3)Conv2 层 :为卷积神经网络的第 2 个卷积层,使用的卷积核为(3*3*64)*64,步长为1,Padding 为same 方式。
(4)MaxPool1 层 :为卷积神经网络的第1个最大池化层,池化核大小为3×3,步长为2,Padding 为valid 方式,即对边界数据不处理。
(5)Dropout1 层:在训练的时候以1/2 概率使得隐藏层的某些神经元的输出为0,这样就丢掉了一半节点的输出,反向传播的时候也不更新这些节点。
(6)batch_normalization 层:批量归一化层,使数值更稳定,使深层神经网络更容易收敛而且降低过拟合风险。
(7)Conv3 层 :为卷积神经网络的第3 个卷积层,使用的卷积核为(3*3*64)*128,步长为1,Padding 同为same 方式。
(8)Conv4 层 :为卷积神经网络的第4 个卷积层,使用的卷积核(3*3*64)*128,步长为1,Padding 为same 方式。
(9)MaxPool2 层 :为卷积神经网络的第2个最大池化层,池化核大小为为3×3,步长为2,Padding 为valid 方式。
(10)Dropout2 层:同样在训练的时候以1/2概率使得隐藏层的某些神经元的输出为0。
(11)batch_normalization 层:批量归一化层。
(12)FC5 层:为卷积神经网络的第1 个全连接层,首先要对输入的特征图进行扁平化处理,将其变成维度为1×28 800 的输入特征图,本层要求输出数据的维度是1×2 304。
(13)Dropout3 层:在训练的时候以1/2 概率使得隐藏层的某些神经元的输出为0。
(14)FC6 层:为卷积神经网络的第2 个全连接层,输入数据的维度为1×2 304,输出数据的维度是1×1 000。
(15)Dropout4 层:在训练的时候以1/2 概率使得隐藏层的某些神经元的输出为0。
(16)FC7 层:为卷积神经网络的分类层,采取softmax 多分类函数,输入数据的维度为1×1 000,输出数据的维度要求是1×6,表示6种车型,最后得到输出数据的维度为1×6。
3.4 试验结果
如表2 和图4 所示,在学习率为0.01,激活函数选择ReLU,优化算法选择SGD,训练2 h 后迭代150 次时,模型已经开始收敛且准确率曲线波动不超过2%,训练集准确率接近1,损失函数值在0.06 左右,验证集综合准确率能达到92%;损失函数值在0.36 左右,各车型验证集上的准确率都能达到85%以上。模型依然存在过拟合现象,原因是数据特征过多,而数据量不足,可以继续增加图片数据集数量或者进一步使用数据增强手段以降低过拟合。
表2 CNN 模型验证结果Tab.2 CNN model validation results
图4 训练结果Fig.4 Training results
保存训练好的模型最后进行预测,从数据集库中选择新鲜的图片输入,输出结果如图5 所示,可以成功预测出输入图片的正确车型。
图5 预测结果Fig.5 Predicted results
4 结论
本文说明了车型识别在智能交通领域的重要意义,介绍了Tensorflow 机器学习架构和卷积神经网络的基本原理。
通过多种数据增强手段对原有数据集进行扩充,提高了模型在验证集上的准确率,降低了CNN 模型的过拟合;基于Alexnet 神经网络模型,采用Dropout 以降低过拟合,同时使用堆叠的最大池化层,有效避免平均池化的模糊化效果,采用两层3×3 的卷积层堆叠,一方面减少了参数量,加快了模型的训练速度,另一方面每层可以使用两次ReLU 激活函数,使得CNN 对特征的学习能力更强;通过对模型的多次训练调整,最终得到准确率达92%的车型识别CNN 模型,并能准确预测出新的图片数据。