基于Seam Carving和深度学习的车标识别系统研究与实现

2018-03-18 09:06
梧州学院学报 2018年6期
关键词:车标隐层能量

王 霞

(福建船政交通职业学院 信息工程系,福建 福州 350007)

随着以“人”“车”“路”三者协调发展为内涵的智能交通系统(ITS)迅速发展,采用图像智能缩放技术、高速视频流采集技术、多传感器融合技术等来进行“人”“车”“路”三者的重新智能化洗牌成为当下政府相关部门的共识[1],大量案例表明,新技术的引入对于提高交通运输资源一体化共享、优化道路利用效率、缓解道路拥挤、显著提高车辆出行安全等方面发挥了巨大的作用。车标识别作为智能交通系统核心技术之一,具有广泛的应用领域,特别是在车辆号牌发生人为污染时,车标作为车辆的另一个核心特征对于准确识别目标车辆并进行必要的唯一性标识具有重要意义[2]。Petrovic等人[3]利用梯度过滤器对车辆标识等部位进行定位;但当车标发生旋转时,该方法的准确性会有所下降。部分学者利用低层次特征,即尺度不变特征变换(SIFT)和梯度直方图(HOG)来识别车标[4-5];但大多数方法仍然严重依赖于低级特性和手工特性(例如SIFT),因此这些算法在处理具有不同成像条件的图像时仍然受到限制。由CNNs进行自动特征提取比手工提取更有效,CNNs算法已经成功应用在ImageNet[6]上,并被广泛应用于解决车标识别问题[7-8]。但研究表明,CNNs在某些条件下会失败,如像素值的变化[9]。传统的车标识别大多基于模板匹配或者支持向量机(SVM)求解最佳评测函数,进而调用模板库和分类库得出结果,上述方法对环境敏感性较强,可扩展性较差,识别准确率较低,已经不适应日益复杂的交通现状。基于上述背景,提出了一种基于Seam Carving和深度学习的车标识别算法,通过车辆图像预处理、图像智能缩放处理、车标识别网络构建等步骤,可以准确定位并识别车标[10],具有较好的可扩展性和稳定性,对环境干扰敏感度较低,可以广泛应用于车标识别领域。

1 车辆图像的预处理

1.1 车辆图像的物理预处理

通过道路图像采集器获得的图像一般为带有大量噪声和信息冗余的真彩色图像,这种图像一般含有明显的干扰区域,不利于车标的定位和识别,为了节约图像后期处理资源,提高处理效率,需要对车辆图像进行物理预处理。为了缩小车辆图像的颜色取值范围,节约内存空间,需要对图像进行灰度化处理,处理方法采用常用的三原色加权法,处理效果如图1所示;为了降低噪声对车标识别的影响[11],凸显车标有益特征,需要对图像进行平滑处理,处理方法采用常用的中值滤波法,处理效果如图2所示;为了进一步抑制灰度化图像中的边缘点信息,在车标定位的同时去除图像中不相干的信息,需要对图像进行边缘检测,处理方法采用常用的Sobel算子检测法,处理效果如下页图3所示。

图2 车辆图像中值滤波处理效果图

图3 车辆图像边缘检测处理效果图

1.2 基于Seam Carving的车辆图像缩放处理

Seam Carving是一种可以实现图像低失真条件下的图像智能缩放技术,可以在改变图像自身大小的同时保留图像的重要特征不失真,其核心点是能量梯度函数的选取,根据能量梯度函数来插入或者删除水平或者垂直的裁切线,进一步根据上述裁切线获取图像重要特征能量的最小通道,确保图像的重要特征不失真[12]。Seam Carving技术完整的处理流程一般包括能量分布图计算、能量累加图预测、获取最小低失真裁切线等,其中,能量累加图预测和获取最小低失真裁切线的主要依据是能量梯度函数与图像的亮度变化幅度、纹理丰富度等呈正相关[13]。

基于内容感知的图像缩放关键在于如何选择要删除的像素。直觉上,我们的目标是移除与周围环境相融合的不明显的像素。本文使用的能量函数如下所示:

(1)

给定一个能量函数,假设我们需要减少图像宽度。我们可以考虑几种策略来实现这一点。例如,保存能量的最佳策略,即保持像素具有较高的能量值,删除能量最低的像素。为了防止图像被破坏,可以从每一行删除等量的低能量像素。同时为了保持图像的形状和视觉一致性,可以使用自动裁剪,即寻找包含最高能量的子窗口。另一种可能的策略是删除能量最低的整个列。这导致了我们的缝刻策略(图2(d))和内部缝的定义。假设I是一个n×m的图像,垂直缝的定义为:

(2)

其中,x是映射x:[1,...,n]→[1,...,m]。若y是映射y:[1,...,m]→[1,...,n],则水平缝的定义为:

(3)

(4)

对于问题(4),我们可以采用动态规划求解,动态规划的贝尔曼方程如下所示:

M(i,j)=e(i,j)+min(M(i-1,j-1),M(i-1,j),M(i-1,j+1))

(5)

动态规划的过程结束后,矩阵M中最后一行的最小值将表示最小连接垂直接缝的结束。因此,在第二步中,我们从M上的最小值开始回溯,就能找到最优接缝的路径。

经过Seam Carving技术处理的车辆图像效果如图4所示。为了提高编程效率,快捷的寻找最佳有效的能量梯度函数,采用动态规划的方法实现,核心代码如下:

%求解能量最小路径

lastCol=find(Energy(m,:)==min(Energy(m,:)));

col=lastCol(1);

%描画出裁切线

Line=Im;

for i=m:-1:1

Line(i,col,:)=[0,255,0];

col=col+Path(i,col);%连续动态迭代

end

%得出有效的能量值图

Energy=zeros(m,n);

%得出有效路径图

Path=zeros(m,n);

tmp=0;

for i=1:m

for j=1:n

if(i==1)

Energy(i,j)=Gradient(i,j);

Path(i,j)=0;

图4 经过Seam Carving技术处理的车辆图像效果图

1.3 车标粗定位算法设计

由于车辆图像获取的环境较为复杂,获取的图像由于道路上的不确定因素、车辆自身的装饰物等造成车辆本身是一个形状不规则目标体,此外,由于车标形状各异、底色、凹凸性差异明显,为车标的精确识别带来较大干扰[14],基于此,设计了车标粗定位算法,可以粗略识别出类车标区域,如图5所示,算法主要流程如下:S1:根据整合的车标核心特征点检测信息,进行分时特征点标定操作;S2:根据先验模板库中计算车标核心特征点的主轮廓并进行轮廓标定操作;S3:整合特征点标定信息,为车标粗定位做准备。根据上述流程,在Matlab环境下编程实现,效果如下页图6所示。

图5 车标粗定位算法流程图

图6 Matlab环境下的车标粗定位效果图

2 基于深度学习的车标识别算法设计

2.1 算法总体概述

基于深度学习的车标识别算法主要包括含多隐层的多层感知神经网络训练子算法、基于人眼视觉纹理的车标精定位与识别子算法两部分,如图7所示,其中,含多隐层的多层感知神经网络训练子算法用来实现车标识别网络的初始化与车标样本的训练、拟合、反馈、层级递进等,形成包含多层感知器的种深度学习网络;基于人眼视觉纹理的车标精定位与识别子算法用来实现车标的精确定位与识别,车标在粗略定位的基础上基于人眼视觉纹理进行精确定位并把定位信息反馈给深度学习网络,进而得出车标分类与识别结果。为了保证样本训练效率,样本的训练采用有监督的训练模式,不断增加模型结构的深度,最终形成具有6层隐层节点的深度学习网络结构,使算法整体向着最优解方向迭代。

图7 基于深度学习的车标识别算法总体示意图

2.2 含多隐层的多层感知神经网络训练子算法设计

含多隐层的多层感知神经网络训练子算法通过获取并重新组合底层车标特征抽象出更加简洁的高层共同特征,可以实现不同车标特征的分布式表达。含多隐层的多层感知神经网络训练子算法包含输入层、输出层、隐藏层,其中,输入层的源数据是经过预处理过的车辆图像信息,在输入层进行二维矩阵格式化处理后附加期望输出值传递给隐藏层;如图8所示,隐藏层在数目上与输入层节点一致,从包含单个节点的独立隐藏层开始,将内含节点添加到隐藏层接口,依次递推,同时计算泛化误差,训练误差,偏差和方差。当泛化误差已经下降并且在其再次开始增加之前[15],在这一点上的节点数量是最终的隐藏层目标值;输出层的类型由期望模型决定,可以是回归或者分类结果。与上述过程相对应,核心代码如下:

with tf.Session()as sess:

sess.run(tf.global_variables_initializer())

for epoch in range(6):# 隐藏层迭代次数

for batch_xs,batch_ys in generatebatch(X,Y,Y.shape[0],batch_size):# 每个周期进行MBGD算法

sess.run(train_step,feed_dict={tf_X:batch_xs,tf_Y:batch_ys})

if(epoch%100==0):

res = sess.run(accuracy,feed_dict={tf_X:X,tf_Y:Y})

print(epoch,res)

res_ypred = y_pred.eval(feed_dict={tf_X:X,tf_Y:Y}).flatten()# 只能预测一批样本,不能预测一个样本

print res_ypred

图8 隐藏层迭代示意图示意图

2.3 基于人眼视觉纹理的车标精定位与识别子算法设计

通过广泛调研和查阅相关文献得知,车标一般处于车身两端,这里仅考虑前端车标,前端车标大多处于车辆前端发动机散热网所覆盖的区域,发动机散热网考虑到散热效率,一般设计成规则起伏的纹理状,这些纹理状与车标性状形成显著差异。基于这一特性,提出了一种基于人眼视觉纹理的车标精定位与识别算法,如图9所示,算法主要流程如下:S1:获取原始车辆图像并进行预处理;S2:进行车标粗定位并根据发动机散热网的纹理特性唯一定位车标;S3:根据精确定位结果采用含多隐层的多层感知神经网络训练子算法进行车标识别并把识别结果反馈给深度学习网络;S4:深度学习网络根据反馈结果适当调整隐藏层的目标数目。与上述过程相对应,核心代码如下:

accuracy = tf.reduce_mean(tf.cast(bool_pred,tf.float32))%设定人眼视觉纹理阈值

from collections import Counter%唯一定位车标

singerDict = {} %车标信息统计

for songKey in bigSongDict.keys():

theArtist = bigSongDict[songKey][artist_id]

if(theArtist in singerSDict):%调用深度学习网络

图9 基于人眼视觉纹理的车标精定位与识别子算法流程图

3 车标自动识别系统设计

为了实际验证上文所提算法的有效性和实用性,本文在vs2012环境下调用OpenCV通用计算机视觉库开发了一款通用车标自动识别系统,该系统可以实现通用车标二维轮廓的准确定位、车标内容的快速识别、车标核心特征点检测与标定、一般车标特征点提取、车辆号牌污染情况下的车辆辅助追踪、车标后期真实感渲染等功能,系统实际运行界面如下页图10所示。

图10 通用车标识别系统界面示意图

为了进一步验证系统在非正常环境下的性能,选取对车辆图像采集影响较大的因素(本文选取环境亮度和环境噪声)进行控制变量验证,具体做法为:S1:控制图像采集噪声不变,人为调整图像采集环境亮度,观察车标识别准确率;S2:控制图像采集亮度不变,人为调整图像采集环境噪声,观察车标识别准确率。基于上述做法,则实验结果如图11所示(绿色曲线为固定时间段内的预测识别准确率、蓝色曲线为实验曲线)。

图11 控制变量法下的系统性能示意图

由于篇幅所限,仅展示部分车标的识别结果,如下页图12所示。

图12 车标识别结果示例

4 结论

本文研究了基于Seam Carving和深度学习的车标识别方法并开发了对应的系统,依次设计了车辆图像预处理算法、基于Seam Carving的车辆图像缩放算法、车标粗定位算法、基于深度学习的车标识别算法等,在此基础上,本文在vs2012环境下采用OpenCV通用计算机视觉库开发了一款通用车标自动识别系统并对系统的性能进行了实际测试。实际测试表明,本文所提基于Seam Carving和深度学习的车标识别方法速度快、信息需求量较小、识别精度较高,重构出的车标具有较强的真实感和纹理性,可以较好地满足肇事车辆信息确认、复杂路况下的车辆布控、车辆监管等领域的应用需求,具有一定的实际推广价值。

猜你喜欢
车标隐层能量
基于RTD可编程逻辑门的n变量函数实现算法
劳斯莱斯“欢庆女神”车标换代升级
基于BP神经网络学习算法的图像压缩技术研究
能量之源
有趣的车标
基于RDPSO结构优化的三隐层BP神经网络水质预测模型及应用
代价敏感正则化有限记忆多隐层在线序列极限学习机及图像识别应用
诗无邪传递正能量
开年就要正能量
雷人的车标