一种基于轻量级神经网络的自动驾驶方向预测方法

文档序号:25735028发布日期:2021-07-06 18:43阅读:67来源:国知局
一种基于轻量级神经网络的自动驾驶方向预测方法
本发明属于自动驾驶方向预测
技术领域
,具体涉及一种基于轻量级神经网络的自动驾驶方向预测方法。
背景技术
:自动驾驶汽车技术是主要依赖于人工智能,辅助以各类其他技术,如毫米波雷达测距,激光雷达测距,gps等。有效的环境感知和对象检测是安全驾驶的前提,文献“policy-gradientandactor-criticbasedstaterepresentationlearningforsafedrivingofautonomousvehicles”提出利用状态表示学习(srl)进行自主驾驶的环境感知框架,文献[2]提出了自动驾驶中避障路径规划的引力搜索算法,提升做出反应的速度,能够减少事故的发生。文献“基于引力搜索算法的自动驾驶车辆避障路径规划研究”提出了基于双级多维高斯隐藏马尔科夫过程(mghmp)的网上驾驶风格识别,在人与车混合的交通道路上实现个性化自动驾驶。文献“learningpersonalizedautonomousdrivingbehaviorwithprogressivelyoptimizedrewardfunction”提出人与环的drl算法,以渐进式学习方式学习个性化自动驾驶行为,该学习方法有在线学习能力和环境适应性,使得驾驶体验变好。光线对于自动驾驶影响巨大,文献“adeeplearningbasedimageenhancementapproachforautonomousdrivingatnight”提出了一个将日间图像转换为低光图像的生成管道方法,经过实际测试,光线增强效果不错,在本文中利用hsv空间亮度调整算法来改变光线强度,增加训练数据集。随着深度学习的发展及广泛应用,marius.b等人提出一种端到端的深度学习自动驾驶技术“endtoendlearningforself-drivingcar”,加快了计算速度,但是对于硬件配置要求较高。利用传统的卷积神经网络预测方向盘转动角度,由于硬盘配置较低,运算速度较慢,可能会导致车辆驶出车道。希望在生活中自动驾驶的汽车有毫秒甚至微妙级别的反应,尤其是在车速很快或者危机情况下,希望车辆能够迅速做出反应。技术实现要素:针对上述存在的问题,本发明旨在提供一种基于轻量级神经网络的自动驾驶方向预测方法,有效减少了消耗的计算时间、计算延迟内存和计算需求,并且能够显著降低计算成本,使运行速度得到很大提高。为了实现上述目的,本发明所采用的技术方案如下:一种基于轻量级神经网络的自动驾驶方向预测方法,包括以下步骤:步骤1:训练神经网络模型;步骤1:训练神经网络模型;101:获取图像数据;102:图像预处理;103:将预处理的图像传入effnet网络中,effnet网络会根据输入图像产生一个期望转动的角度;104:在手动模式下记录转动方向盘的角度,对其捕获的图像进行预处理,产生一个实际方向盘转动的角度;105:计算期望转动的角度与实际方向盘转动的角度的差值;106:将差值通过bp神经网络传播算法传给effnet网络,不断进行权重更新,以使期望转动的角度与实际方向盘转动的角度的差值达到最小,此时,保存最优训练神经网络模型;步骤2:测试神经网络模型201:利用unity模拟器中汽车的中央摄像头捕捉当前画面,将当前画面通过网络socketio传给effnet网络,作为effnet网络的输入;202:effnet网络根据当前画面来预测汽车方向盘转动的方向和角度,把预测出来的角度传送给模拟器,让模拟器根据传回的角度控制汽车运行,汽车继续前行,将前方弧面实时传送effnet网络,以此反复。优选的,在步骤101中,通过unity模拟器获取图像数据,该unity模拟器有左中右三个摄像头用以捕捉画面,按下手动模式,用来获取训练数据集,可以分别获取当前时刻驾驶汽车的角度、油门、速度以及刹车数据,生成24108图片,每张图片像素为320*160,保存到img文件夹下,并生成.csv文件进行保存。优选的,在步骤102中,图像预处理包括以下步骤:(1)图像切割;(2)图像亮度调整;(3)图像角度调整。优选的,在上述步骤(2)中,首先将图像从rgb色彩空间转换为hsv色彩空间,其中v代表亮度,hs代表色度和饱和度;然后保持hs的值不变,将v的值乘以一个系数alpha,系数alpha取值范围为[0.1,1];最后再将hsv图像转化为rgb图像。优选的,在上述步骤(3)中,对图像进行水平翻转。优选的,在上述步骤1和2中,effnet网络中,采用leakyrelu激活函数,采用自适应矩阵估计优化器,epoch为25次;批处理图像数量batch_size设置为32,损失函数为均方误差损失函数。优选的,在上述步骤106中,利用bp反向传播算法来改变权重,反向传播的算法,采用δ学习算法调整各层间的权值;输出层与隐藏层的连接权值学习算法为:其中δ为学习效率,δ∈[0,1];k+1时刻网络的权值为:wjo(k+1)=wjo(k)+δwjo(2)隐藏层与输入层连接权值wij学习算法k+1时刻网络的权值为wij(k+1)=wij(k)+δwij(5)为避免权值的学习过程发生振荡、收敛速度慢,即加入动量因子α使得,动量因子α∈[0,1]:wjo(k+1)=wjo(k)+δwjo+α*(wjo(k)-wjo*(k-1)(6)wij(k+1)=wij(k)+δwij+α*(wij(k)-wij*(k-1))(7)。本发明的有益效果是:本发明提出的基于轻量级神经网络的自动驾驶方向预测方法,对获取的图像进行预处理,经过对数据进行水平翻转,亮度调整,角度调整以及数据筛除操作,丰富了数据集,增加了训练样本,使得训练网络模型更好。且将effnet网络与bp神经网络传播算法结合,来调整预测方向盘转动的角度与实际方向盘转动的角度的误差,减少了网络预算需求,具有实际参考价值,有很大的市场前景。附图说明图1所示为训练神经网络流程图;图2所示为自动驾驶测试流程图;图3所示为图像样例;(a)左摄像头捕捉画面;(b)中摄像头捕捉画面;(c)右摄像头捕捉画面;图4所示为输出角度y的分布情况;图5所示为左侧摄像头捕捉画面;图6所示为普通卷积神经网络与深度可分离卷积网络的对比图;(a)为普通卷积网络,(b)为深度可分离网络;图7所示为leakyrelu激活函数;图8所示为effnet网络模型损失函数图;图9所示为卷积神经网络损失函数图。具体实施方式为了使本领域的普通技术人员能更好的理解本发明的技术方案,下面结合附图和实施例对本发明的技术方案做进一步的描述。系统框架对于传动道路检测,是采用手工进行图像特征提取,记录道路边界的位置和角度,然后根据几何方法判断转动方向盘角度和位置。本发明使用轻量级卷积神经网络,使得输入是图像,输出为角度,设计分为两部分,第一部分为训练神经网络,第二部分为测试网络模型。本发明提出的一种基于轻量级神经网络的自动驾驶方向预测方法,如图1和2所示,具体步骤如下:步骤1:训练神经网络模型;步骤1:训练神经网络模型;101:获取图像数据;102:图像预处理;103:将预处理的图像传入effnet网络中,effnet网络会根据输入图像产生一个期望转动的角度;104:在手动模式下记录转动方向盘的角度,对其捕获的图像进行预处理,产生一个实际方向盘转动的角度;105:计算期望转动的角度与实际方向盘转动的角度的差值;106:将差值通过bp神经网络传播算法传给effnet网络,不断进行权重更新,以使期望转动的角度与实际方向盘转动的角度的差值达到最小,此时,保存最优训练神经网络模型;步骤2:测试神经网络模型201:利用unity模拟器中汽车的中央摄像头捕捉当前画面,将当前画面通过网络socketio传给effnet网络,作为effnet网络的输入;202:effnet网络根据当前画面来预测汽车方向盘转动的方向和角度,把预测出来的角度传送给模拟器,让模拟器根据传回的角度控制汽车运行,汽车继续前行,将前方弧面实时传送effnet网络,以此反复。在步骤101中,通过unity模拟器获取图像数据,该unity模拟器有左中右三个摄像头用以捕捉画面,按下手动模式,用来获取训练数据集,可以分别获取当前时刻驾驶汽车的角度、油门、速度以及刹车数据,生成24108图片,每张图片像素为320*160,保存到img文件夹下,并生成.csv文件进行保存。图3为左中右三个摄像头捕捉到的画面,此时方向盘转动的弧度为0.06176。而自动驾驶模式是由python通过socketio与unity模拟器进行交互,调用模拟器的4567端口用来测试训练模型,实现自动驾驶。在步骤102中,图像预处理包括以下步骤:(1)图像切割并不是所有的图像都会用到,需要画出自己感兴趣的区域(roi)。因此设置从下往上切除20像素,即把车头部分去掉,从上往下切除20像素,即把天空部分去掉,切割后的图像为(20:140,0:320)。(2)图像亮度调整希望自动驾驶汽车无论在光线强度强或者弱的情况下,使神经网络都能学习到方向盘应转动的角度,能够正常驾驶,亮度变化会严重影响神经网络判断方向,调整图像亮度可以提高网络应对不同环境的鲁棒性。由于没有收集到如此多的数据集,捕获到不同亮度的图像,因此需要做光线亮度调整。在此设计中是基于hsv空间亮度调整算法的。图像亮度调整如下:首先将图像从rgb色彩空间转换为hsv色彩空间,其中v代表亮度,hs代表色度和饱和度;然后保持hs的值不变,将v的值乘以一个系数alpha,系数alpha取值范围为[0.1,1];最后再将hsv图像转化为rgb图像。(3)图像角度调整经过统计得出角度为0出现的频率最高,大约是左转右转数量的20倍,角度为正的情况(1900)比角度为负的情况(1775)多。图4为输出角度y的分布情况。由此可以看出需要随机去除95%的角度为0的数据集,以此来平衡数据。同样的由于右转角度比左转角度多,为平衡左右转向次数,对图像进行水平翻转。在用模拟器进行自动驾驶测试时,是中央摄像头捕获的图像通过socketio传送给python文件,之后将输出的角度回传给模拟器,因此需要关注的是中央摄像头捕捉的画面。但是每一次捕捉的画面是有左摄像头和右摄像头共同捕捉的。需要用左右摄像头捕捉的画面来丰富测试数据集。图5为左侧摄像头捕捉画面的场景。黑色的线为道路边界线,黑色矩形为小车,0点为道路中央的点,c表示中央摄像头所在的位置点,l为左边摄像头所在的位置点,从o点引出一条与小车平行的线到h点,c点与h点相连,ch段是希望汽车将要行进的位置,l点与h点相连,lh是根据左边摄像头捕捉到的画面希望汽车将要行进的路段。同理,右摄像头捕捉的画面网络结构介绍1、bp神经网络算法bp神经网络由输入层,输出层,若干层隐藏层组成,每一层有若干个节点,层与层之间节点的连接状态通过权重体现,其基本思想是梯度下降法。bp神经网络中每个节点作为一个感知器,由输入值,权重,偏置,激活函数,输出组成。本发明设计过程中利用bp反向传播算法来改变权重,反向传播的算法,采用δ学习算法调整各层间的权值。根据梯度下降法,权值的学习算法如下:输出层与隐层的连接权值wjo学习算法为:其中δ为学习效率,δ∈[0,1];k+1时刻网络的权值为:wjo(k+1)=wjo(k)+δwjo(2)隐藏层与输入层连接权值wij学习算法k+1时刻网络的权值为wij(k+1)=wij(k)+δwij(5)为避免权值的学习过程发生振荡、收敛速度慢,即加入动量因子α使得,动量因子a∈[0,1]:wjo(k+1)=wjo(k)+δwjo+α*(wjo(k)-wjo*(k-1)(6)wij(k+1)=wij(k)+δwij+α*(wij(k)-wij*(k-1))(7)在本项目中采用sigmoid激活函数。bp神经网络可以实现对函数的任意逼近,有强的非线性映射能力。2、轻量级神经网络effneteffnet网络模型中运用到了两个技术点:1)深度可分离卷积(depthwiseseparableconvolution);2)空间可分离卷积(spatialseparableconvolution)。1)深度可分离卷积(depthwiseseparableconvolution)图6普通卷积神经网络与深度可分离卷积网络的对比图,其中,图a)为普通卷积网络,图b)为深度可分离网络。假设普通卷积神经网络中输入10*10*3的图片格式,与卷积核为5*5*3做卷积运算,最后输出一个6*6*1的特征图,需要的计算量为10*10*3*5*5*3=22500。在深度可分离卷积网络中,输入图像大小仍然是10*10*3的卷积网络,与三个5*5*1的卷积核做卷积,产生6*6*3的输出,之后用6*6*3卷积层与1个1*1*3的卷积核做卷积,得到一个6*6*1的卷积,需要的计算量为10*10*1*5*5*1*3+6*6*3*1*1*3=7608,计算量减少为原来的66.2%。传统的relu激活函数中,在x<0的情况下,y为0,因此下降梯度为0,所以无论怎样训练这个网络,卷积核的权值,连接深度网络节点的权值,都不会发生变化。由于leakyreluy在x<0的情况下,是有一定的斜率的,所以y值仍然会随着x的变化而变化。对于leakyrelu激活函数,即使某个阶段中间阶段输入的值小于0,由于有一定的倾斜度,使得下降梯度不为0,因此在继续输入负值的情况下,依然能够得到梯度,缓慢的改变网络,由此来优化网络。图7为leakyrelu激活函数示意图。2)空间可分离卷积(spatialseparableconvolution)空间可分离卷积将卷集核拆分为两个更小的卷积核,分别和两个小的卷积核做卷积.最常用的情况是将1个3*3的卷积核拆分为3*1和1*3的卷积核。普通卷积计算量为32*m2*c,其中m为输入图像的长/宽,c为输入图像的通道数。使用空间可分离卷积,用3*1的卷积核做卷积,计算量为3*m2*c,之后再用1*3的卷积核做卷积,计算量为3*m2*c,总的计算量为6*m2*c。由此得出,使用卷积分解计算量是普通卷积计算量的2/3。与end-to-end卷积神经网络比较表1网络结构effnet网络结构end-to-end神经网络结构conv2d(1*1*8)conv2d(5*5*8)dw1*3+1dmpmaxpool(2*2)dw3*1conv2d(5*5*8)2*1*8+1dstridemaxpool(2*2)conv2d(1*1*16)conv2d(4*4*16)dw1*3+1dmpmaxpool(2*2)dw3*1conv2d(5*5*16)2*1*16+1dstridedense(128)conv2d(1*1*32)dense(50)dw1*3+1dmpdense(10)dw3*1dense(1)2*1*32+1dstridefullyconnected在end-to-end卷积神经网络中,采用relu激活函数,采用随机梯度下降法(sgd)优化器,epoch为50次。而在effnet网络中,采用leakyrelu激活函数,采用自适应矩阵估计(adam)优化器,epoch为25次。批处理图像数量batch_size设置为32,损失函数为均方误差损失函数(mean_squared_error)。为了防止网络出现过拟合现象,在网络设计过程中,利用dropout层,随机失活神经元,提高了神经网络泛化能力。利用正则化(regularization),批归一化(batchnormalization)以及提前停止函数(earlystopping),利用以上方式,很好的解决了过拟合现象。在训练网络模型的过程中,除了进行数据增强操作外,为高效读取数据,解决图像占用内存问题,调用python自带的批生成器(batchgenerator),生成器不是一次性将全部图像内存读到硬盘中,而是根据需求一次调用设置的图像数量。批生成器无需预生成所有图像增强的图像,不会占用太多的硬盘空间,增加读取硬盘文件所需的时间。优化器比较随机梯度下降算法(sgd)梯度下降算法是一阶最优算法,也称为最速下降法,目的是找到一个函数的局部极小值。梯度下降方法基于以下的观察:如果实值函数f(x)在a点处可微且有定义,那么函数f(x)在点a沿着梯度相反的方向下降最快。μ为学习率,θ为网络参数,j(θ)为代表损失函数的值。在本设计中损失函数为均方误差损失函数,因此:本设计采用的迷你批处理梯度下降,结合了批处理和随机梯度下降法的优点,减弱了目标函数震荡,更加稳定,易于硬件加速实现。缺点是传统迷你批处理不能保证能够收敛,当学习率太小,收敛会很慢,学习率太高容易震荡,甚至无法收敛,所有的参数使用同样的学习率并不合适,本设计的学习率为0.01。自适应矩阵优化器(adam)adam优化器是目前应用最为广泛的额优化器,它是记录过去一段时间的梯度平方和。更新一阶矩阵:β1*mt-1+(1-β1)*gt=mt更新二阶矩阵:修正一阶矩阵偏差:修正二阶矩阵偏差:更新权值:其中,mt代表梯度,mt-1代表前一时刻的梯度,gt为当前时刻的梯度,β1、β2代表指数衰减率,分别设为0.9,0.999。adam优化器只是累积过去的一段时间的梯度平方值,完全无需设置步长,为了便于实现,采用类使用动量的策略,本设计的学习率为0.001。性能测试利用keras作为深度学习框架,python版本3.7,effnet网络与卷积神经网络为训练网络模型,bp神经网络作为权值调整算法,unity模拟器产生图像数据。在24108张图片中,选择20%的图像作为测试数据,即4821张图片作为测试数据,输入图片的大小为128*128*3。神经网络结构的好坏可以由以下两种方式进行测试:1)模拟器测试2)通过损失函数判断。通过在模拟器中进行测试,可以看出effnet网络训练的模型与传统的卷积神经网络模型分别对车进行自动驾驶测试时,effnet网络表现出运行速度更快,驾驶效果更加平滑,弯道的反应速度更灵敏的特性。通过损失函数进行判断,其中图8为effnet网络模型损失函数图,图9为普通卷积神经网络损失函数图。通过损失函数图可以看出,effnet网络迭代25次使得损失值减小到0.1165,测试损失值减小到0.0753,end-to-end卷积神经网络迭代50次后使损失值减少到0.1031,测试损失值减少到0.0615。effnet与卷积神经网络对比,损失值增加0.0134,测试损失值增加0.0138。将网络模型进行对比,end-to-end的卷积神经网络产生的参数量为50563,网络大小为453kb,effnet网络产生的参数量为12777个,网络大小为335kb,effnet与卷积神经网络对比,参数量减少了74.73%,网络大小减少了26%。综上,effnet网络提高了计算效率,提升模型运行速度,有强的泛化能力及鲁棒性,准确度与end-to-end的卷积神经网络大致相当,训练效果更好,降低计算成本,并且effnet网络模型可以在嵌入式移动硬件上高效运行。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1