基于深度哈希网络的车型识别方法

2020-01-10 06:38费东炜
计算机技术与发展 2020年1期
关键词:池化哈希全局

费东炜,孙 涵

(南京航空航天大学 计算机科学与技术学院模式分析与机器智能工业和信息化部重点实验室,江苏 南京 211106)

0 引 言

车型识别是以计算机视觉、模式识别技术为基础,通过车辆的图像对车辆的品牌、型号进行识别的一种应用[1]。车辆型号的识别对于交通监控、停车管理等智能交通应用具有重要的意义。由于不同型号的车辆都属于汽车这一大类,不同车型图像之间的类间差异往往比较小,如何在这种情况下提取到有效的车辆特征成为车型识别的研究重点。

目前,主流的车型识别方法可以分为四个步骤,分别是局部特征提取、特征描述、特征编码、分类或检索[2]。局部特征提取这一步需要抽取出图像中富含信息的关键点,主要有两种方式:一种是基于关键点检测,有Harris角点检测[3]、FAST算子[4]、LoG[5]、DoG[6]等方法;另一种是密集提取,直接按照一定的步长和尺度指定关键点。特征描述则将关键点附近的图像特征转换为特征描述子,特征描述子一般的形式为特征向量或二进制串,常用的特征描述子有SIFT[6]、SURF[7]、BRISK[8]、ORB[9]等。特征编码则是通过特征变换方法对特征描述子进行编码,从而获得更高区分性和鲁棒性的特征表达,主要的特征编码方法有向量量化、稀疏编码、Fisher向量编码等。特征编码之后,图像被抽象为一个多维的特征向量。最后对得到的特征向量进行分类或检索。常用的分类算法有支持向量机(SVM)[10]、随机森林[11]、神经网络等;检索指的是对得到的特征进行K近邻搜索,返回前K个与查询图像最相似的一批图像,为了检索的高效率,通常采用二进制串作为图像的特征表达。

传统的基于手工特征的车型识别方法提取的特征在类间差异很小时区分性比较弱[12],导致车型识别的准确率不高。而卷积神经网络能够将特征提取、特征描述、特征编码和分类(检索)这四个步骤集成到一个深度神经网络中,且提取的特征区分性强,泛化能力强,针对车型识别应用的效果比较好。卷积神经网络一般用于图像分类,可以直接输出图像的类别,常见的网络有AlexNet[13]、VGG等。深度哈希网络使用卷积神经网络中的卷积层提取图像特征,然后编码为二值的哈希码,主要用于图像检索。

基于以上研究背景,文中提出了一种深度哈希网络,并设计了基于深度哈希网络的车型识别方法。首先介绍了卷积神经网络和深度哈希网络。然后对现有的深度哈希网络进行优化,并将全局平均池化和数据增广应用到现有的哈希网络中,提出了HashNet-GAP网络和车型检索与分类的方法。接着介绍了车型识别实验方法,对实验结果进行分析。最后总结全文,并且提出下一步研究方向。

1 相关研究

1.1 卷积神经网络

卷积神经网络是以卷积层为核心的具有深度结构的神经网络。卷积神经网络的研究受到了生物学中对猫的视觉皮层研究的启发,视觉皮层中细胞只会对视网膜上图像中的部分区域敏感,不同细胞对于不同的信号敏感程度是不同的。卷积神经网络模拟了这种结构,采用部分连接的方法,提取图像中的空间结构信息。图1给出了卷积神经网络的基本结构。

卷积神经网络的核心是卷积层。在大尺寸图像中,有这样一个性质,图像局部区域的像素点之间存在着很大的相关性,而相距较远的像素点之间往往是无关的。利用这一性质,卷积神经网络提出了“感受野”(receptive field)的概念。卷积层中通过卷积核对输入图像进行局部连接,其输出的特征图中每一个元素对应着输入图像的一部分区域,这部分区域被称为“感受野”[14]。传统神经网络中每一层的感受野均为输入图像的全部区域,特征提取效果不佳且参数量巨大。而卷积神经网络各层的感受野均为图像的局部区域,随着网络层数加深,感受野的尺寸逐渐变大,使网络能够提取从底层到高层,从局部到全局的特征。卷积层中主要进行的是卷积运算。卷积运算的示意图如图2所示。卷积运算是以一定的间隔滑动卷积核的窗口,在滑动过程中,卷积核的参数一直保持不变,即图像的不同区域采用相同参数的卷积核进行特征提取。这一特性被称为“权值共享”[15]。权值共享相对于神经元全连接,可以大幅度减少参数数量,使得大规模神经网络的结构变得更简单、适应性更强[16]。另外,一层卷积层通常会提取图像的多个特征,这可以通过增加卷积核的通道数来实现,每个通道的卷积核提取一个特征图。

池化层一般连接在卷积层之后,用于缩小卷积层得到的特征图的尺寸。除了降低特征维度,池化层还可以提升整个网络的鲁棒性。当输入数据发生微小变化时,池化后的结果会保持不变。池化操作主要有最大值池化和平均值池化,最大值池化指的是取输入特征图的一个窗口中的最大值,平均值池化则是取平均值。在卷积神经网络中,常用的池化方法是最大值池化。

如图1所示,卷积神经网络的整体结构是先用“卷积层、池化层”的组合,重复若干次,然后连接到一层或多层全连接层,最后连接到输出层。多个“卷积层、池化层”的组合相当于传统手工特征的特征提取和特征描述步骤。全连接层则相当于特征编码,最后将得到的特征进行Softmax分类或K近邻搜索。为了实现非线性映射,每一个卷积层和全连接层后还需要非线性的激活函数[17]。从卷积神经网络的结构来看,使用一个网络端到端地实现了图像分类,只需要输入目标图像,即可直接得到图像的类别,相对于传统的手工特征方法,大大简化了操作流程。

1.2 深度哈希网络

深度哈希网络是使用深度学习技术来进行哈希学习(learning to hashing)的一种神经网络。哈希学习的目的是从数据中学习哈希表示,可以看作学习哈希函数的参数。在深度学习时代,使用卷积神经网络进行哈希学习成为了主流。

深度哈希网络的结构和一般的卷积神经网络相似,都是由“卷积层、池化层”的基本单元组成,再连接上全连接层。不同的是深度哈希网络的输出层和优化目标。深度哈希网络的输出层一般是全连接层,直接输出一串实数向量,再使用符号函数转换为二值向量。这个全连接层的节点数即为输出的哈希码的位数。

与用于分类的卷积神经网络不同的是,深度哈希网络输出的是目标图像的二值特征,无法直接根据有监督的标签信息来计算训练时的损失。因此,深度哈希网络通常采用成对相似性来设计损失函数。在网络输入时,输入两个不同图像进行哈希特征生成。这一对图像的相似性的真实数据(ground truth)可以通过它们的标签得到,具有相同标签的图像对被认为是相似的。而网络在训练中对相似性的预测可以通过计算哈希码之间的汉明距离(Hamming distance)得到。哈希码的汉明距离定义为两串哈希码中不同的位的数量。哈希码的汉明距离越大,表示对应的图像差异越大,汉明距离越小,则表示图像越相似。这里将汉明距离作为深度哈希网络对一对图像相似性的预测,那么根据真实数据和预测值即可设计损失函数。损失函数的设计原则是保持相似的数据汉明距离尽可能小,或者不相似的数据汉明距离尽可能大。

由于深度哈希网络需要通过一个不连续的符号函数(即sgn函数)得到哈希码以计算损失,网络在训练时面临梯度消失的挑战。处理sgn函数的方法主要有两种,第一种方法就是最常用的连续性弛豫法(continuous relaxation),包括sigmoid弛豫、tanh弛豫或者直接在优化时丢掉符号函数即sgn(z)≈z。弛豫后使用常规的优化技术即可。第二种方法是两步策略[18],首先在不考虑哈希函数的情况下优化哈希码,然后再根据优化过的哈希码优化哈希函数的参数。

2 深度哈希网络优化

2.1 全局平均池化

全局平均池化(global average pooling)是一种卷积神经网络改进技术。传统的卷积神经网络先用卷积层提取特征,然后通过多个全连接层将特征编码成特征向量。全连接层的特征是参数过多,容易过拟合,降低了整个网络的泛化能力。有很多研究致力于解决这一问题,如dropout[19]技术在训练过程中采用随机删除神经元的方法来避免全连接层带来的过拟合。全局平均池化是另一种正则化策略,其思路是用全局平均池化层代替全连接层。全局平均池化指的是求每个通道特征图的平均值,将h*w*d的多通道特征图张量直接降维至1×1×d,即d维特征向量,替代了全连接层的功能[20]。全局平均池化示意如图2所示。

图2 全局平均池化示意

从图中可以直观地看到,每个通道的二维特征图直接转换为一个值,这个值是得到的特征向量的一个维度,而且每个维度对应着一个卷积通道。全局平均池化和dropout都属于正则化技术,dropout是删除全连接层部分节点,而全局平均池化是直接替换了全连接层,同时也能达到将多通道特征图拉伸成特征向量的目的。因此全局平均池化相比dropout能够更好地处理过拟合问题。

全局平均池化相对于全连接层主要有以下几个优点:

(1)全局平均池化得到的特征向量与特征图之间的联系更紧密,特征向量的每一维对应着特征图的一个通道,更好地保留了卷积结构。

(2)全局平均池化没有任何参数,用在卷积神经网络中大大降低了参数数量,也避免了全连接层带来的过拟合。

(3)全局平均池化汇合了空间信息,增加了对于输入数据空间变化的鲁棒性。

(4)网络测试时可以任意变换输入图像的大小,因为全局平均池化层无需学习参数,不同尺寸的特征图都会降维至1×1。而全连接层需要学习特征图中每一点连接到下一层每个节点的权重,当输入图像尺寸变化时,特征图的尺寸也随之变化,无法进行全连接层的计算。

全局平均池化可能会导致收敛速度减慢,表现在达到同样损失前,网络训练所需的迭代次数增加。这是因为使用全局平均池化相当于简化了特征编码方法,使得特征提取和特征描述时的学习压力增大,卷积层需要更多迭代次数来调整参数。在使用预训练模型进行初始化或是增加新的分类时,卷积层参数调整的幅度会更大。文中在使用全局平均池化时,在其后保留了一个全连接层,这样可以一定程度上缓解收敛速度的下降。另外,由于大幅度减少了参数,训练中每次迭代的计算量也减少了,因此训练一个模型所需的时间总体上变化不大。

2.2 数据增广

数据增广(data augmentation)指的是对训练集图像进行一系列变换,目的是增加训练集数量,从而提升训练后神经网络的性能,抑制模型过拟合现象。在车型数据集中,通常有不同环境不同光照不同角度下拍摄的车辆图片。针对这些特点,文中提出一种数据增广方法,这种方法由完全随机裁剪、色彩抖动和随机旋转三个步骤组成。

2.2.1 完全随机裁剪

完全随机裁剪随机生成裁剪位置和裁剪区域大小,可以生成不同位置不同尺度的图像。完全随机裁剪后的图像统一为正方形图像,图像的边长d是随机生成的,取值范围是[l/2,l],其中l是原始图像长和宽的较小值。确定了裁剪后大小之后,再随机生成裁剪位置,裁剪区域的中心相对于原图的中心进行随机移动,随机移动的范围在x轴和y轴上均为[0,l-d]个像素。完全随机裁剪生成的图像如图3所示。

图3 完全随机裁剪示例

2.2.2 色彩抖动

色彩抖动是对图像的颜色进行随机调整,主要调整图像的饱和度、亮度和对比度。调整饱和度使图像变得鲜艳或灰暗,调整亮度使图像整体变暗或变亮,调整对比度使得图像明暗的差异变大或变小。色彩抖动通过调整这些属性,模拟生成了不同采集设备拍摄的图像。色彩抖动之后生成的图像如图4所示。

图4 色彩抖动示例

2.2.3 随机旋转

随机旋转对图像进行一定角度范围内的旋转。旋转角度限制为顺时针-30度到30度,旋转采用后向映射的方法实现,映射后的插值算法采用双三次插值法(bicubic)。随机旋转的目的是生成不同视角的训练图像。随机旋转后的图像见图5。

图5 随机旋转示例

3 基于深度哈希网络的车型识别方法

文中提出的车型识别方法是基于检索的方法,利用深度哈希网络对车辆图像进行二值特征提取,然后再使用二值特征进行K近邻搜索,返回一批与输入图像相似的图像。检索用的深度哈希网络是基于HashNet[18]网络进行改进的,HashNet网络结构如图6所示。

图6 HashNet网络结构

HashNet网络主要由三部分组成:(1)卷积神经网络(CNN)层,用于学习图像的深度特征;(2)全连接的哈希层,首先将深度特征转换为k维的特征表示,再将k维的特征表示转换为k位二进制哈希码;(3)配对(pairwise)损失层,使用带权重的交叉熵损失函数进行相似性保持学习。

HashNet网络使用数据之间的成对相似性进行哈希表示的学习,因此该网络训练时具有两个并列的输入层,输入两幅图像及其标签。这两幅图像经过图像拼接层在channel维度上合并为一层作为第一个卷积层的输入。HashNet的卷积神经网络层使用AlexNet的前7层(分别是Conv1-5、fc6、fc7)来学习车辆图像的深度特征。这些特征在全连接的哈希层被转换为k位的二进制哈希码。由于输入的是两幅图像,需要将输出的哈希码结果经过slice_output层分离成各个图像各自的哈希码,再输入到配对损失层,同时两幅图像各自的标签也被送入配对损失层进行训练。

文中提出的改进的HashNet网络称为HashNet-GAP网络,即全局平局池化的AlexNet网络。网络结构上移除了HashNet中的全连接层fc6、fc7,在卷积层conv5后的池化层pool5后增加了全局平均池化层GAP,池化后的结果直接输入到全连接的哈希层进行二值特征编码。AlexNet-GAP网络结构如图7所示。

图中全局平均池化层GAP是增加的层。HashNet中的pool5仍然保留,这一层采用最大值池化对特征图进行降维,保留这一层可以增加全局平均池化后的特征的鲁棒性。由于移除了全连接层fc6和fc7,HashNet-GAP相比HashNet极大地减少了参数数量,同时也会带来更低的运算时间,方便用于快速车型识别。

图7 HashNet-GAP网络结构

HashNet-GAP要训练的层有Conv1~5共5个卷积层以及全连接的哈希层,其中Conv1~5的网络结构和AlexNet类似,因此可以使用AlexNet的预训练模型作为初始值继续训练。训练网络时,对训练集进行数据增广,采用文中2.2节提出的数据增广方法将训练集扩充为原来的30倍大小,对于小样本数据集能够有效提升网络的性能。

4 实 验

4.1 实验方法

实验采用了一个小样本训练集对HashNet-GAP网络进行训练和测试。该数据集是从CompCars数据集[21]抽取的一部分图像组成,抽取的图像为MINI Cooper品牌的13种车型,称为CompCars-mini数据集,每种车型随机抽取50张图像。数据集中不同类的图像如图8所示。图中两幅图像是不同类的车型,可以看出类间差异较小,分类难度较大。

图8 CompCars-mini数据集示例

CompCars-mini数据集在实验中被划分为训练集和测试集。训练集每类有25张图像,经过数据增广后每类图像数量是原来的30倍,有750张图像。测试集中的图像不参与训练,在测试阶段用来评估深度哈希网络检索和分类的性能。

实验中分别对无任何优化的HashNet网络、带数据增广的HashNet网络(HashNet+da)和带数据增广的HashNet-GAP网络(HashNet-GAP+da)这三种算法进行性能测试。训练和测试均在Caffe框架下实现。训练时三个网络均采用了Caffe框架中实现的随机梯度下降法,批处理数量(batch_size)设置为128,共迭代10 000次,学习率采用分阶段设置,初始学习率为0.000 5。哈希码的位数设置为256位。测试阶段对训练集和测试集中各图像的哈希特征进行提取,采用网络的前向计算,批处理大小设置为5,并测量前向计算所需的时间。

HashNet-GAP网络相当于一个哈希函数,将车辆图片转换为二进制哈希码。通过计算两幅图像哈希码之间的汉明距离可以得到两幅图像之间的相似度。根据这一性质,可以实现相似车辆图片检索。首先,将训练集中的车辆图像作为查询库,先计算这些图像的哈希码,存储在文件或数据库中。然后,输入测试集中的车辆图像,计算该图像的哈希码,与查询库中保存的哈希码进行匹配,得到与输入图像最相似的一批车辆图像。采用MAP(mean average precision)来评价网络的性能,AP(average precision)指的是一次检索中不同召回率下准确率的平均值,MAP则是每次检索的AP值的平均。MAP不仅反映了检索算法的准确率,而且考虑了顺序的因素。同样的准确率下,返回的一批图像中相似的图像排名越靠前的,MAP的值越高。

在相似车辆图片检索的基础上,分析返回的一批车辆图像,当返回图像中某一类的车辆图像占比最多,就将查询图像分类到这一类中,从而对输入图像进行分类。实验中使用这个方法对测试集中所有图像进行分类,并和图像的标签进行比较,计算分类的Top1准确率。

4.2 实验结果与分析

对于325张测试图像,基于HashNet-GAP网络的车型识别方法获得了0.8的Top1准确率。针对车型数据集的数据增广方法获得了一定的性能提升,MAP相对于未使用数据增广的HashNet网络则提升了1.23%。在相同的训练集下,用全局平均池化层替换全连接层减少了参数数量,抑制了过拟合现象,使得MAP和Top1准确率有较大的提升,而且缩短了网络前向计算的时间。详细实验结果见表1。

表1 CompCars-mini数据集实验结果

CompCars-mini数据集上的实验表明,通过数据增广扩充训练集能够提升卷积神经网络的性能。本次实验中,每类图像只有25张,通过数据增广后增加到750张。对于较难分类的车型数据集,数据增广可以简单地获得性能提升,只需要增加训练时的迭代次数,不会增加网络测试时的时间。

深度哈希网络中的全局平均池化层相比全连接层能够得到几个方面的提升。第一,全局平均池化层没有任何要训练的参数,替换了HashNet中4 096个节点的全连接层后,大幅度减少了参数数量,减少了网络模型存储时消耗的空间。HashNet网络模型文件大小为231.7 MB,而HashNet-GAP网络仅有9.6 MB大小,减少了约96%,大幅度降低了存储消耗和内存消耗。第二,降低了网络计算复杂度,缩短了每张图像的处理时间,从50 ms降低到46 ms,能够在车型识别应用时加快处理速度。第三,显著提升了深度哈希网络的性能,这是因为HashNet-GAP网络移除了具有4 096个节点的两个全连接层,减少了96%的参数。全连接层容易发生过拟合,在HashNet和AlexNet中采用dropout技术对过拟合进行抑制。全局平均池化是另一种抑制过拟合的方法,实验结果表明,采用这种方法的HashNet-GAP网络能够有效提升网络性能。

5 结束语

车型识别对智能交通系统有重要的意义。基于卷积神经网络和深度哈希网络的车型识别方法在性能上优于基于手工特征的方法。文中结合了数据增广和全局平均池化,在HashNet网络的基础上,提出了基于HashNet-GAP网络的车型识别方法。该方法在CompCars-mini数据集上取得了80.0%的Top-1准确率,相对于HashNet有5.69%的提升。另外实验结果表明HashNet-GAP中的全局平均池化层可以替代全连接层,大幅度减少参数数量,减少运算时间,并提升检索和分类时的性能。虽然该算法可以有效提高车型识别效果,但是在实际应用中还需要进一步提高准确率。接下来的工作要围绕这两方面进行:第一,需要研究如何提取更具有区分性的卷积特征,采取的方法是加深卷积层层数或者使用更强表现力的特征编码算法;第二,需要研究如何更好地进行数据增广,进一步提升车型识别方法对小样本数据集的分类能力。

猜你喜欢
池化哈希全局
基于高斯函数的池化算法
基于改进空间通道信息的全局烟雾注意网络
领导者的全局观
卷积神经网络中的自适应加权池化
哈希值处理 功能全面更易用
文件哈希值处理一条龙
二分搜索算法在全局频繁项目集求解中的应用
落子山东,意在全局
用于手写汉字识别的文本分割方法
巧用哈希数值传递文件