本发明涉及计算机视觉技术领域,具体涉及一种基于densenet121网络的驾驶行为识别方法。
背景技术:
随着人民生活水平不断提高,汽车开始普及,但随之而来的还有交通事故发生频率的逐年增长。其中,驾驶员在驾驶过程中注意力不集中,分心驾驶,疲劳驾驶是导致交通事故发生的主要原因。如今基于深度学习技术的的分心驾驶行为识别系统已经越来越广泛地应用于各种车辆上,高效准确地对驾驶员的分心驾驶行为进行识别,以防止由于分心驾驶带来的交通事故,大大提高了驾驶员的驾驶安全性。对于分心驾驶行为识别系统而言,选用更加准确高效的预训练网络进行迁移学习完成模型的训练可以大大提高识别准确率,是减少由于驾驶员分心驾驶而引起的交通事故的有效手段,同时,在保证高识别准确率的基础上,选用模型体积更小的预训练网络有利于分心驾驶行为识别系统在移动硬件设备上的实际应用部署,大大提高其实用性。
现有的分心驾驶行为识别系统一般通过迁移学习将alexnet、vggnet、resnet等经典卷积神经网络应用于公开驾驶行为识别数据集进行训练获得分心驾驶行为分类模型;之后利用该训练后的模型将待分类的分心驾驶行为图片输入卷积神经网络后得到分心驾驶行为分类预测结果。在预训练网络的选取上,alexnet、vggnet、resnet等经典卷积神经网络在模型体积和识别准确率上都逊于densenet。
可见,运用alexnet、vggnet、resnet等经典卷积神经网络对驾驶员行为数据集进行训练,难以提高识别准确率,并得到体积更小的模型,因而在实际场景中运用受限。而模型体积小、准确率较高的densenet121预训练网络,可以有效拓展分心驾驶行为识别系统的应用场景,并降低硬件成本。
技术实现要素:
为了解决上述alexnet、vggnet、resnet等经典卷积神经网络所存在的难以提高识别准确率以及模型体积大的问题,本发明提供一种基于densenet121网络的驾驶行为识别方法,通过使用densenet121预训练网络进行迁移学习,并将densenet121所包含的四个密集连接模块(denseblock)中的3×3卷积分解成3×1和1×3的两个卷积,从而简化网络结构模型设计出更轻量高效的卷积神经网络,结合auc分心驾驶行为数据集,可以训练出体积小、准确率高的分心驾驶行为分类模型,适合用于车辆驾驶室等实际应用场景的分心驾驶行为的识别分类。
一种基于densenet121网络的驾驶行为识别方法,包括以下步骤:输入测试图片到训练好的分心驾驶行为分类模型,对分心驾驶行为的类别进行预测,模型输出驾驶员行为的类别标签,从而得到测试图片中分心驾驶行为的分类结果;所述分心驾驶行为分类模型先训练后使用,训练过程包括以下步骤:
s1、获取auc分心驾驶行为数据集,得到不同分心驾驶行为标签对应的图片;
s2、对图片进行预处理,预处理过程包括:从数据集中获取驾驶员行为图片,先对图片进行线性归一化处理,然后将图片输入大小缩小为224×224(像素);随机打乱数据集,按8:2的比例将打乱后的数据集划分为训练集和测试集;并对训练集进行数据增强处理,从现有的训练样本中生成更多的训练数据以增加训练样本的多样性;
s3、使用改进的densenet121预训练网络进行迁移学习,将训练集数据输入网络进行特征提取,得到特征向量;
s4、用分类器对提取到的特征向量进行各个驾驶员行为类别的概率预测,得到预测的概率;
s5、根据训练集类别标签对预测的概率计算损失函数,通过反向传播算法进行迭代训练;训练过程中,前10个epoch迭代损失下降较快,迭代20个epoch后损失开始缓慢下降,到30个epoch时基本达到收敛,此时模型训练完成,得到训练好的分心驾驶行为分类模型并保存。
进一步的,分心驾驶行为识别模型包括一个卷积层(convolution),一个池化层(pooling),四个密集连接模块(denseblock),三个过渡层(transitionlayer)和一个分类层(classificationlayer),densenet121的网络结构使用连结结构,将每一层的输出导入后面的所有层,这样的结构可以减少网络参数。
进一步的,所述卷积层(convolution)包括一个7×7卷积(conv),步数(stride)为2。
进一步的,所述池化层(pooling)包括一个3×3最大池化(maxpool),步数(stride)为2。
进一步的,所述过渡层(transitionlayer)包括瓶颈层(bottlenecklayer,即1×1卷积层conv)和池化层(2×2平均池化averagepool),所述瓶颈层用于压缩密集连接模块输出的参数,因为密集连接模块(denseblock)中各个层卷积之后均输出k个featuremaps,所以理论上每个密集连接模块denseblock输出为4k个featuremaps,然而实际情况中会大于这个数字;瓶颈层的作用是将一个密集连接模块(denseblock)输出的参数压缩到4k个;池化层的作用是:卷积层常在下采样提取特征时改变特征大小的情况,当特征大小改变时,连接操作不再适用,采用池化层可以解决使用密集连接模块(denseblock)后带来通道数剧增,使用过多密集连接模块(denseblock)后模型过于复杂的问题。由于池化层采用了denseconnectivity结构,直接在各个层之间加入池化层是不可行的,因此采用denseblock组合的方式,在各个denseblock之间加入卷积层和池化层。
进一步的,每两个密集连接模块(denseblock)之间连接一个过渡层
(transitionlayer),总计四个密集连接模块(denseblock),三个过渡层(transitionlayer);最后一个连续密集连接模块(denseblock)之后连接一个全局平均池化(globalaveragepool)和一个全连接层(fully-connected)。
进一步的,密集连接模块(denseblock)中包含3×1和1×3的两个卷积。将原有密集连接模块(denseblock)中所包含的3×3卷积分解成3×1和1×3的两个卷积,从而简化网络结构模型设计出更轻量高效的卷积神经网络。
进一步的,密集连接模块的函数表达式为:
进一步的,所述分类层(classificationlayer)中包含一个7×7全局平均池化(globalaveragepool)和一个softmax分类器。
本发明与现有技术相比,具有如下优点和有益效果:
1、densenet121预训练网络的密集连接有正则作用,它可以缓减在更小的训练数据集上过拟合,通过迁移学习应用于分心驾驶行为识别任务的识别准确率高于alexnet、vggnet、resnet等经典卷积神经网络,体积仅30.8mb,远小于alexnet、vggnet、resnet等经典卷积神经网络。
2、本发明将原densenet121所包含的四个密集连接模块(denseblock)中的3×3卷积分解成3×1和1×3的两个卷积,从而简化网络结构模型设计出更轻量高效的卷积神经网络,有效降低硬件成本,适用于驾驶室车载硬件设备等实际应用场景中的分心驾驶行为的识别分类。
3、本发明的识别方法使用auc分心驾驶行为数据集,并通过数据增强让有限的数据产生更多的数据,增加训练样本的数量以及多样性,提升模型鲁棒性;采用softmax激活函数改进神经网络的精度,准确率高,以64个批次训练30次后可达到96.07%的准确率,能有效对分心驾驶行为进行预测分类。
附图说明
下面结合附图和具体实施方式对本发明做进一步详细的说明。
图1为本发明实施例提供的一种基于densenet121网络的驾驶行为识别方法流程图;
图2是本发明实施例提供的一种改进的densenet121网络中的密集连接模块denseblock结构图;
图3是本发明实施例提供的一种分心驾驶行为识别模型网络结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在下面的实施例中,所述分心驾驶行为识别模型为一种改进的densenet121卷积神经网络,网络结构包括:一个卷积层(convolution),一个池化层(pooling),四个密集连接模块(denseblock),三个过渡层(transitionlayer)和一个分类层(classificationlayer)。densenet121的网络结构使用连结结构,将每一层的输出导入后面的所有层,每个卷积层的输出featuremap的数量都很小(小于100),这样的结构可以减少网络参数,使得特征和梯度的传递更加有效,网络也就更加容易训练。
基于改进的densenet121卷积神经网络各部分的具体结构和功能如下:
所述卷积层(convolution)包括一个7×7卷积(conv),步数(stride)为2。卷积层由若干卷积单元组成,每个卷积单元的参数都是通过反向传播算法最佳化得到的。卷积运算的目的是提取输入的不同特征,第一层卷积层可能只能提取一些低级的特征如边缘、线条和角等层级,更深层的卷积层能从低级特征中迭代提取更复杂的特征。
所述池化层(pooling)包括一个3×3最大池化(maxpool),步数(stride)为2。通过最大值的方式减少数据量,将输入的图像划分为若干个矩形区域,对每个子域输出最大值。
所述过渡层(transitionlayer)包括瓶颈层(bottlenecklayer,即1×1卷积层conv)和池化层(2×2平均池化averagepool),所述瓶颈层用于压缩密集连接模块输出的参数,因为密集连接模块(denseblock)中各个层卷积之后均输出k个featuremaps,所以理论上每个密集连接模块denseblock输出为4k个featuremaps,然而实际情况中会大于这个数字;瓶颈层的作用是将一个密集连接模块(denseblock)输出的参数压缩到4k个;所述池化层用于当特征大小改变时,连接操作不再适用,然而卷积层常在下采样提取特征时改变特征大小的情况,可以解决使用密集连接模块(denseblock)后带来通道数剧增,使用过多密集连接模块(denseblock)后模型过于复杂的问题;池化层由于采用了denseconnectivity结构,直接在各个层之间加入池化层是不可行的,因此采用denseblock组合的方式在各个denseblock之间加入卷积层和池化层。
每两个密集连接模块(denseblock)之间连接一个过渡层(transitionlayer),总计四个密集连接模块(denseblock),三个过渡层(transitionlayer);在最后一个连续密集连接模块(denseblock)之后连接一个全局平均池化(globalaveragepool)和一个全连接层(fully-connected)。
如图2所示,密集连接模块(denseblock)中包含3×1和1×3两个卷积。将原有密集连接模块(denseblock)中所包含的3×3卷积分解成3×1和1×3两个卷积,从而简化网络结构模型,设计出更轻量高效的卷积神经网络。
密集连接模块的函数表达式为:
所述分类层(classificationlayer)中包含一个7×7全局平均池化(globalaveragepool)和一个softmax分类器(fully-connected,softmax)。全局平均池化(globalaveragepool)将特征图(featuremap)所有像素值相加求平均,得到一个数值,再进行全连接(softmax)就可以减少参数数量,从而减少计算量,降低过拟合。
在一个实施例中,基于改进的densenet121卷积神经网络的分心驾驶行为识别模型的具体网络结构参数如表1所示。
表1
如图1所示,本发明一种基于densenet121网络的驾驶行为识别方法,包括但不限于如下步骤:
s1、获取auc分心驾驶行为数据集,得到不同分心驾驶行为标签对应的图片,其中,图片按分心驾驶行为类别标签依次读入。
本方法采用auc驾驶行为数据集作为分心驾驶行为分类模型的数据输入,auc驾驶行为数据集包含来自7个不同国家的31名参与者在四种不同车辆环境下的驾驶图像,共10种驾驶行为:正常驾驶、左手发短信、左手打电话、右手发短信、右手打电话、调收音机、喝水、整理仪表、从后座接东西、和乘客说话。图像的原始尺寸为1920×1080(像素)。
s2、对图片进行预处理,所述预处理包括:
s21.数据标准化。读取auc分心驾驶行为数据集中的图像文件,然后将jpg文件解码为rgb像素网格,再将这些像素网格转换为浮点数张量,通过min-max标准化方法进行标准化,将像素值(0-255范围内)缩放到[0,1]区间。标准化公式包括:
f(x)=(x-min)/(max-min)
其中,max为样本数据的最大值,min为样本数据的最小值。
s22.将图片输入缩小为指定大小的图像和批次。通过python生成器循环生成224×224的rgb图像与批量大小为64个样本的批量。
s23.随机打乱数据集,按8:2的比例将打乱后的数据集划分为训练集和测试集。数据集划分过程为:将auc驾驶行为数据集中的分心驾驶行为按类别标记为0-9标签,每个数字对应一种分心驾驶行为,依次读入图片并进行随机的打乱,按训练集:测试集=8:2的比例对打乱后的数据集进行划分,得到训练集和测试集,即将auc驾驶行为数据集中的17308张图像分为13846训练集图像,3462张测试集图像。其中,训练集用来训练分心驾驶行为分类的模型,测试集用来测试模型的分类效果。
s24.对训练集进行数据增强,从现有的训练样本中生成更多的训练数据以增加训练样本的多样性。
由于auc驾驶行为数据集中的学习样本有限,可能会出现过拟合,所以使用数据增强从现有的训练样本中生成更多的训练数据以增加训练样本的多样性。数据增强的方法是:利用多种能够生成可信图像的随机变换来增加样本。数据增强的目标是:使得模型在进行训练时不会两次查看到完全相同的图像,因此模型能够观察到数据的更多内容,从而具有更好的泛化能力,提升神经网络的鲁棒性。本发明从训练数据中随机选取一些图片,基于这些图片进行数据增强操作。可以采用常见数据增强操作中的一种或多种的组合实现本发明的数据增强,常见的数据增强操作包括:图像旋转,将图像随机旋转一定的角度(在0-180范围内);图像平移,将图像沿水平或垂直方向平移一定距离(相对于总宽度或总高度的比例);图像随机错切,随机错切变换的角度;图像随机缩放,将图像随即缩放一定的范围;图像水平翻转,随机将一般图像水平翻转;图像像素填充,填充新创建像素的方法,这些像素可能来自于旋转或宽度/高度平移。
s3、使用改进的densenet121预训练网络进行迁移学习,将训练集数据输入网络进行特征提取,得到特征向量。
densenet的优势:1)一定程度上减轻在训练过程中梯度消散的问题。在执行反向传播算法时每一层都会接受其后所有层的梯度信号,所以不会随着网络深度的增加,靠近输入层的梯度会变得越来越小。2)由于大量的特征被复用,使得使用少量的卷积核就可以生成大量的特征,最终模型的尺寸也比较小。3)参数更小且计算更高效,由于densenet是通过concat特征来实现短路连接,实现了特征重用,并且采用较小的生长率(growthrate),每个层所独有的特征图是比较小的。
在一个实施例中,分心驾驶行为识别模型的网络结构如图3所示,将训练集数据输入分心驾驶行为识别模型后,依次经过依次连接的卷积层(convolution)、池化层(pooling)、第一密集连接模块(denseblock)、第一过渡层(transitionlayer)、第二密集连接模块、第二过渡层、第三密集连接模块、第三过渡层、第四密集连接模块、第四过渡层、分类层(classificationlayer),最终输出预测结果,该预测结果为分心驾驶行为的分类结果。分心驾驶行为识别模型中,各部分具体结构的处理过程包括如下:
s31、首先使用卷积层对训练集数据进行浅层特征提取,得到浅层特征;
s32、使用池化层对浅层特征进行最大池化,通过最大值的方式减少数据量,将输入的图像划分为若干个矩形区域,对每个子域输出最大值;
s33、池化层的输出经过密集连接模块,密集块(denseblock)中的每个卷积层的输出特征图数量与宽度都小。这种连接方式使得特征和梯度的传递更为有效,网络也更易训练。
s34、密集块与密集块之间使用过渡层(transitionlayer)连接,过渡层结构为bn-relu-conv,即批处理归一化(batchnormaliza-tion,bn),线性整流函数(rectifiedlinearunit,relu)、池化(pooling)及卷积(conv)等操作。bn算法可将训练数据集打乱,加快训练速度,提升模型准确度。relu作为神经元的激活函数,可有效克服梯度消失问题,加快网络训练速度。特征在依次经过四个密集连接模块(denseblock),三个过渡层(transitionlayer)后输出特征向量由softmax分类器进行处理。
s4、用softmax分类器对提取到的特征向量进行各个驾驶员行为类别的概率预测,得到预测的概率。
s5、根据训练集类别标签对预测的概率计算交叉熵损失函数,并通过反向传播算法进行迭代训练;训练过程中,前10个epoch迭代损失下降较快,迭代20个epoch后损失开始缓慢下降,到30个epoch时基本达到收敛,此时模型训练完成,得到训练好的分心驾驶行为分类模型并保存。
交叉熵损失函数及反向传播的过程为:输入的驾驶员行为图片经过改进的densenet121预训练网络进行特征提取得到特征向量后,用softmax分类器对特征向量进行分类,对照输入的驾驶员行为图片的驾驶行为类别标签,采用交叉熵计算损失函数;根据损失函数和随机梯度下降的优化器进行反向传播,进行迭代训练。
交叉熵损失函数的计算过程为:计算交叉熵首先要计算信息熵和kl散度(相对熵)。信息熵也被称为熵,用来表示所有信息量的期望,期望是试验中每次可能结果的概率乘以其结果的总和。信息熵的计算公式为:
kl散度用来衡量这两个概率分布之间的差异,计算公式为:
kl散度越小,表示p(x)与q(x)的分布更加接近,可以通过反复训练q(x)来使q(x)的分布逼近p(x)。
在机器学习训练网络时,输入数据与标签常常已经确定,那么真实概率分布p(x)也就确定下来了,所以信息熵在这里就是一个常量。由于kl散度的值表示真实概率分布p(x)与预测概率分布q(x)之间的差异,值越小表示预测的结果越好,所以需要最小化kl散度,而交叉熵等于kl散度加上一个常量(信息熵),且公式相比kl散度更加容易计算,所以在机器学习中常常使用交叉熵损失函数来计算loss。交叉熵公式表示为:
训练好分心驾驶行为分类模型后,将从auc驾驶行为数据集中分离出来的测试集中数据输入到训练好的分心驾驶行为分类模型,利用训练好的分心驾驶行为分类模型以及分类器直接得出驾驶员行为的类别标签,从而得出测试图片中分心驾驶行为类别预测结果。
本发明设计的分心驾驶员行为分类模型轻量高效、体积小、识别准确率高,适用于驾驶室车载设备等实际应用场景进行分心驾驶行为的识别分类。
当介绍本申请的各种实施例的元件时,冠词“一”、“一个”、“这个”和“所述”都意图表示有一个或多个元件。词语“包括”、“包含”和“具有”都是包括性的并意味着除了列出的元件之外,还可以有其它元件。
此外,术语“第一”、“第二”、“第三”、“第四”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量,由此,限定有“第一”、“第二”、“第三”、“第四”的特征可以明示或者隐含地包括至少一个该特征。
需要说明的是,本领域普通技术人员可以理解实现上述方法实施例中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法实施例的流程。其中,所述存储介质可为磁碟、光盘、只读存储记忆体(read-0nlymemory,rom)或随机存储记忆体(randomaccessmemory,ram)等。
以上所述仅是本申请的具体实施方式,应当指出,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同物限定。
1.一种基于densenet121网络的驾驶行为识别方法,其特征在于,包括以下步骤:输入测试图片到训练好的分心驾驶行为分类模型,对分心驾驶行为的类别进行预测,模型输出驾驶员行为的类别标签,从而得到测试图片中分心驾驶行为的分类结果;所述分心驾驶行为分类模型先训练后使用,训练过程包括以下步骤:
s1、获取auc分心驾驶行为数据集,得到不同分心驾驶行为标签对应的图片;
s2、对图片进行预处理,预处理过程包括:从数据集中获取驾驶员行为图片,先对图片进行线性归一化处理,然后将图片输入大小缩小为224×224(像素);随机打乱数据集,按8:2的比例将打乱后的数据集划分为训练集和测试集;并对训练集进行数据增强处理,从现有的训练样本中生成更多的训练数据以增加训练样本的多样性;
s3、使用改进的densenet121预训练网络进行迁移学习,将训练集数据输入网络进行特征提取,得到特征向量;
s4、用分类器对提取到的特征向量进行各个驾驶员行为类别的概率预测,得到预测的概率;
s5、根据训练集类别标签对预测的概率计算损失函数,通过反向传播算法进行迭代训练;训练过程中,前10个epoch迭代损失下降较快,迭代20个epoch后损失开始缓慢下降,到30个epoch时基本达到收敛,此时模型训练完成,得到训练好的分心驾驶行为分类模型并保存。
2.根据权利要求1所述的一种基于densenet121网络的驾驶行为识别方法,其特征在于,分心驾驶行为识别模型包括一个卷积层,一个池化层,四个密集连接模块,三个过渡层和一个分类层,densenet121的网络结构使用连结结构,将每一层的输出导入后面的所有层。
3.根据权利要求2所述的一种基于densenet121网络的驾驶行为识别方法,其特征在于,所述卷积层包括一个7×7卷积,步数为2。
4.根据权利要求2所述的一种基于densenet121网络的驾驶行为识别方法,其特征在于,所述池化层包括一个3×3最大池化,步数为2。
5.根据权利要求2所述的一种基于densenet121网络的驾驶行为识别方法,其特征在于,所述过渡层包括瓶颈层和池化层,所述瓶颈层为1×1卷积,用于压缩密集连接模块输出的参数;池化层包括2×2平均池化,池化层用于解决密集连接模块带来的通道数剧增、模型过于复杂的问题。
6.根据权利要求2所述的一种基于densenet121网络的驾驶行为识别方法,其特征在于,每两个密集连接模块之间连接一个过渡层,总计四个密集连接模块,三个过渡层;最后一个连续密集连接模块之后连接一个全局平均池化和一个全连接层。
7.根据权利要求6所述的一种基于densenet121网络的驾驶行为识别方法,其特征在于,密集连接模块中包含3×1和1×3的两个卷积。将原有密集连接模块中所包含的3×3卷积分解成3×1和1×3的两个卷积,从而简化网络结构模型设计出更轻量高效的卷积神经网络。
8.根据权利要求7所述的一种基于densenet121网络的驾驶行为识别方法,其特征在于,密集连接模块的函数表达式为:
9.根据权利要求2所述的一种基于densenet121网络的驾驶行为识别方法,其特征在于,所述分类层中包含一个7×7全局平均池化和一个softmax分类器。
技术总结