基于深度学习的端到端自动驾驶车辆转向控制系统
技术领域
本发明涉及自动驾驶领域,具体涉及一种基于深度学习的端到端自动驾驶车辆转向控制系统。
背景技术
20世纪80年代,随着Apple Mac、Microsoft Windows以及Unix/Linux 等操作系统的出现,个人电脑的概念出现并逐渐普及,信息技术逐步发展; 21世纪初,在个人电脑逐步普及并被大规模应用的背景下,Yahoo和Google 的出现通过互联网将人与信息互联起来。而Facebook通过革新的社交网络将人类的交往互联方式从线下扩展到了线上;随着互联网人口规模的膨胀, Uber与滴滴等公司通过共享经济的思维直接连接不同用户的经济行为,取得了巨大的成功。信息技术的发展及其革新,都极大地改变了人类的生活方式。现在计算机开始作为服务的载体出现,其中一个应用就是自动驾驶。自动驾驶并不是一个单一的技术,而是一系列技术的整合,最终实现在无人驾车的情况下将乘客安全地送达目的地。这一切都要归功于机器学习和深度学习,在短短几年之间,就使得自动驾驶汽车技术从幻想成为现实。
自动驾驶能够有效减轻驾驶员的负担:利用自动泊车功能,驾驶员无需再为倒车入库担心;利用自适应巡航控制、紧急制动辅助和车道保持支持等功能,释放了驾驶员的双手,驾驶员可以坐在车上看书、听音乐甚至休息;或许在未来实现完全自动驾驶,我们只需要告诉汽车终点,汽车就会自动开往目的地。除了为人类个体带来的便利,自动驾驶还带来了更广泛的意义。
1、增强交通安全。全球每年有130万人死于交通事故,其中90%以上的交通事故是由人为因素造成,目前普遍认为自动驾驶可以将道路安全率提高10倍以上。自动驾驶有利于提升道路交通安全水平,降低人为因素导致的事故率,建立更高效的道路交通安全体系。这是因为在自动驾驶领域,通过各种创新,例如算法和数据集等实现汽车的可控性,从而获得更高的安全性。
2、缓解交通拥堵。2000至2009年的10年间,中国城镇化率由36.2%提高至46.6%,年均增长约1.2%;北上广杭深等一批城市的机动车保有量先后超过百万量级,全国民用汽车保有量从1609万辆增至6281万辆,净增4672 万辆,年均增长16.3%。一旦自动驾驶汽车投入使用,能够与智能交通系统联合工作,优化道路交叉口的车流量。传感器能够精确捕获环境信息,定位、识别、追踪功能能够精确感知,预测、规划和避障功能能够实现精确决策,协同提高通行效率,缓解交通拥堵。
3、减少空气污染。据统计,汽车发动机每燃烧1千克的汽油,就要消耗15千克的新鲜空气,并且排出150-200克的一氧化碳、4-8克的碳氢化合物、4-20克的氮氧化合物等污染物。自动驾驶技术有利于减少尾气排放,改善环境质量。一方面汽车由电能驱动,属于清洁能源,另一方面汽车通过自动化控制能够更顺畅地加速、减速,减少耗油量。
为了实现自动驾驶,其中最关键的技术之一是根据摄像头采集的道路图像自动实时计算车辆的转向角,现有技术中一般需要经过传感、感知和决策等步骤才能决定车辆的行驶,最终部署时,车辆可能需要同时运行几个甚至十几个深度学习网络,其中可能涉及几十上百个模块的计算,需要耗费大量计算资源,而且这些模块的实现极其困难,如何简化计算流程,节省计算资源是本发明的研究目标。
发明内容
本发明旨在提供一种基于深度学习的端到端自动驾驶车辆转向控制系统,以用于在实现自动驾驶时简化计算流程,节省计算资源。
本发明的技术方案如下:
一种基于深度学习的端到端自动驾驶车辆转向控制系统,包括:
数据收集模块,用于收集车辆的多个摄像头图像,以获取车辆前方的道路信息数据集;
数据处理模块,对所述道路信息数据集进行均衡、裁剪和放缩处理;
数据增强模块,对所述道路信息数据集进行增强处理;
网络训练模块,用于根据优化的自动驾驶神经网络PilotNet预测车辆的行驶参数,其中,所述行驶参数包括转向角度;
网络测试模块,用于根据优化的PilotNet在模拟器上进行测试;
网络可视化模块,用于对优化的PilotNet的测试结果进行可视化显示,以获取道路图像特征。
优选地,所述车辆的多个摄像头图像包括车辆的三个前置摄像头分别从左、中、右三个方向拍摄到的图像,其保存目录下生成有IMG文件夹和 driving_log.csv文件;
其中,IMG文件夹中保存了摄像头的左、中、右三个方向的图片;
driving_log.csv文件中保存了用户开车时的信息,包括:center、left、right 分别表示左、中、右摄像头的图片路径,steering、throttle、brake、speed分别表示转向角度、油门力度、刹车力度、车辆速度。
优选地,所述对所述道路信息数据集进行均衡、裁剪和放缩处理,包括:将转向角度为0的图像随机丢弃,比例为0.5,并且,将转向角度不为0的图像,全部进行翻转处理,转向角度乘以-1;
以及,裁剪原图顶部60px像素和底部20px像素,输出高为80px像素的图片;
以及,将裁剪后的图片等比例缩放为高66px像素、宽200px像素的图片。
优选地,所述对道路信息数据集进行增强处理,包括亮度增强、高斯滤波、锐化效果和雾层效果。
优选地,所述优化的自动驾驶神经网络PilotNet包括预处理模块、卷积模块和全连接模块。
优选地,所述根据优化的自动驾驶神经网络PilotNet预测车辆的行驶参数,包括:
预处理模块应用,包括:将输入的图像数据x限定在[-0.5,+0.5]的范围内,以获取标准化数据x’,其中,
卷积模块应用,其步骤包括:
(1)、输入像素(66,200,3),通过卷积核数量为24,大小为(5,5),步长为(2,2)的卷积,输出像素(31,98,24),再通过ReLU激活函数,Dropout 层;
(2)、输入像素(31,98,24),通过卷积核数量为36,大小为(5,5),步长为(2,2)的卷积,输出像素(14,47,36),再通过ReLU激活函数,Dropout 层;
(3)、输入像素(14,47,36),通过卷积核数量为48,大小为(5,5),步长为(2,2)的卷积,输出像素(5,22,48),再通过ReLU激活函数,Dropout层;
(4)、输入像素(5,22,48),通过卷积核数量为64,大小为(5,5),步长为(1,1)的卷积,输出像素(3,20,64),再通过ReLU激活函数,Dropout层;
(5)、输入像素(3,20,64),通过卷积核数量为64,大小为(5,5),步长为(1,1)的卷积,输出像素(1,18,64),再通过ReLU激活函数,Dropout层。
卷积模块应用,其步骤包括:
(11)、将所述卷积模块输出的像素(1,18,64)压平为1152维向量;
(12)、将所述1152维向量通过全连接降维到100维向量,再通过ReLU 激活函数,Dropout层;
(13)、将所述100维向量通过全连接降维到50维向量,再通过ReLU 激活函数,Dropout层;
(14)、将所述50维向量通过全连接降维到10维向量,再通过ReLU 激活函数,Dropout层;
(15)、将所述10维向量通过全连接降维到1维向量,最终的输出值为车辆转向角度。
优选地,所述卷积模块应用的步骤还包括通过分解卷积核以实现模型压缩,包括:
将5×5的卷积核分解成两个3×3卷积核;
以及,将3×3的卷积核分解成1×3卷积核和3×1卷积核。
优选地,激活函数为线性整流函数ReLU,当输入值小于0时,输出为0,当输入值大于0时,输出该值:
ReLU(x)=max(0,x)
损失函数为均方误差MSE函数:
优选地,模拟器的型号包括CARLA、AirSim、Apollo和Udacity-Sim;
优选地,Udacity-Sim模拟器有两种模式:训练/数据收集模式和验证/ 自动驾驶模式。
优选地,利用keras-vis库实现PilotNet的可视化。
通过上述技术方案,基于深度学习的端到端自动驾驶车辆转向控制系统,只需要输入道路图像就可以直接输出参数,简化了计算流程,而且不需要高精地图,传感器更是只需要几个摄像机即可,该系统只需要经过一个神经网络就可以直接输出结果,对计算能力的要求很低,同时改进后的PilotNet算法可以明显看出道路的细节,提取的特征比较清晰,表达能力更强。
附图说明
附图是用来提供对本发明实施例的进一步理解,并且构成说明书的一部分,与下面的具体实施方式一起用与解释本发明实施例,但并不构成对本发明实施例的限制。在附图中:
图1是基于规则的自动驾驶系统的示意图;
图2是基于端到端的自动驾驶系统的示意图;
图3是基于深度学习的端到端自动驾驶车辆转向控制系统的示意图;
图4是模拟器界面;
图5是处理前的数据集统计;
图6是处理后的数据集统计;
图7是裁剪前后的效果图;
图8是放缩前后的效果图;
图9是数据增强前后的效果图;
图10是模拟器训练损失与验证损失的对比图;
图11是验证集预测分布图;
图12是实际角度与预测角度的偏差直方图;
图13是模拟器道路特征可视化分析图;
图14是实验室训练损失与验证损失的对比图;
图15是实验室道路特征可视化分析图;
图16是预处理模块的结构示意图;
图17是卷积模块的结构示意图;
图18是全连接模块的结构示意图;
图19是卷积核分解示意图;
图20是高电平脉冲的变化示意图。
具体实施方式
以下结合附图对本发明实施例的具体实施方式进行详细说明。应当理解的是,此处所描述的具体实施方式仅用与说明和解释本发明实施例,并不用与限制本发明实施例。
自动驾驶是一个庞大而且复杂的工程,涉及众多技术。其中最关键的技术之一是根据摄像头采集的道路图像自动实时计算车辆的转向角。根据转向角的计算方式,可分为基于规则的系统和基于端到端的系统。基于规则的自动驾驶系统是目前的主流方案。基于规则的自动驾驶系统是目前主流的解决方案,如图1所示,基于规则的自动驾驶系统主要由传感、感知、决策组成。
其中,传感步骤是从传感器原始数据中提取有意义的信息。不同的传感器具有不同的优缺点,可以将不同传感器的数据进行融合,以达到更好的效果。现在自动驾驶中普遍使用的传感器包括:GPS/IMU,用于全球定位导航和惯性更新数据;激光雷达,用于绘制高精度地图等场景;摄像机,用于识别和追踪等场景;毫米波雷达,用于获取车辆与障碍物之间的距离、速度、角度和运动方向等信息。感知步骤是用于定位车辆所在位置,感知车辆所处环境。在获得传感信息之后,数据输入到感知系统,子系统主要包括:定位、识别和追踪。决策步骤是为了安全可靠地抵达目的地。在决策阶段,结合行为预测、路径规划和避障机制,实时完成自动驾驶动作决策。
Apollo 3.0系统真正落地的时候可能要几百上千个模块,每一个模块都有相应的计算工作。最终部署时,车辆可能需要同时运行几个甚至十几个深度学习网络,更需要耗费大量计算资源。这些模块实现极其困难,仅仅通过一家公司的能力难以实现自动驾驶,只有通过合作的方式形成自动驾驶生态圈,才能促进技术成熟。
而很多时候人类驾驶是靠意识完成的,特点是不需要知道路面的精确信息。例如不需要精确到厘米来判断前方车辆到自己的距离,也不需要精确到毫秒来判断红绿灯的状态改变,更不需要做出多么精准的路径规划。人类对车辆的转向控制,可以用端对端的深度神经网络来模拟实现。而神经网络本质上就是一种应用类似于大脑神经突触联接的结构进行信息处理的数学模型。如图2所示,从输入端(传感器的原始数据,如拍摄图像)直接映射到输出端(车辆的控制信号,如转向角度0.1),整个过程无需人工设计的复杂规则,通常使用神经网络来完成这种映射。传统的端到端网络将问题抽象成一个分类问题,用方向来描述运动,粒度较为粗糙。自动驾驶所采用的端到端网络将其视为回归问题,用转向角度来描述运动,使得对运动描述更为精确,适应能力更强。
万能逼近定理(Universal Approximation Theorem,UAT)为这种方法提供了一些理论基础。如果一个神经网络具有至少一个非线性函数,那么只要给予神经网络足够数量的隐藏单元,就可以以任意精度来拟合任何一个有限维空间到另一个有限维空间的函数。如果认定人的驾驶行为是一个的连续函数,那么必定存在一个神经网络,能以任意精度逼近世界上最好的驾驶员。
表1基于规则与端到端自动驾驶对比
如表1所示,基于规则的自动驾驶系统和基于端到端的自动驾驶系统表现两极化:
(1)系统复杂度:基于规则的系统从传感、感知到决策,每个步骤都有具体的流程;而端到端系统只需要输入图片就可以直接输出参数,简化流程。
(2)可解释性:基于规则的系统每个步骤都有对应的算法可以解释;而端到端系统是个“黑箱子”,不容易解释。
(3)广铺成本:基于规则的系统面临的问题是高精度地图和昂贵的传感器;而端到端系统不需要高精地图,传感器更是只需要几个摄像机即可。
(4)计算能力:基于规则的系统步骤复杂,并且每个步骤都需要经过大量运算,对计算能力要求很高;而端到端系统只需要经过一个神经网络就可以输出结果,对计算能力要求很低。
这样一对比,两个系统看似是对立的关系,其实是互补的关系。对于普通的道路,可能只需要端到端系统就可以应付;而对于复杂的道路,涉及行人、红绿灯和路口等,可能就需要基于规则的系统才能解决。因此,一个很有价值的研究方向应该就是基于规则和端到端系统结合。虽然自动驾驶领域出现的端到端风潮,但是根据没有免费午餐定理(NoFree Lunch,简称NFL),没有普遍优越的机器学习算法。神经网络能够拟合任意函数,却不存在万能的函数既能够验证训练集上的样本,又能够扩展训练集上没有的样本。脱离实际应用场景,谈论算法优劣毫无意义。此外,端到端自动驾驶车辆转向控制处在研究阶段,还有以下几个难点:
(1)端到端网络难以调试。神经网络存在“黑盒”特点,因此网络在某种情况下失败时,我们几乎无法定位应该为这次失败负责的“子模块”,也就没有办法针对性地调试。
(2)端到端网络难以引入先验知识。端到端网络更多地是在模仿人类驾驶员动作,但是并不了解人类动作背后的规则。想要通过纯粹数据驱动的方式让网络学习诸如文明驾驶等问题比较困难。
(3)端到端网络难以处理陌生场景。对于常见场景,我们可以通过数据驱动的方式训练端到端网络。但是我们无法采集到所有真实场景的数据,对于陌生场景,网络性能往往令人担忧。如何提高网络的泛化能力是一个亟待解决的问题。
最后,即使端到端网络能够在数据集上能带来99.9%的准确度,然而自动驾驶容不得半点误差,在数以百万的行车里程之下,0.1%的错误率也意味着沉重的生命代价。也就是说,如果没有办法解决好最后0.1%的错误率,端到端自动驾驶车辆转向控制注定只能是实验室里的宠儿,而非大规模自动驾驶应用的革命者。
基于此,本发明旨在提供一种基于深度学习的端到端自动驾驶车辆转向控制系统。如图3所示,所述基于深度学习的端到端自动驾驶车辆转向控制系统包括:
数据收集模块,用于收集车辆的多个摄像头图像,以获取车辆前方的道路信息数据集。
数据处理模块,对所述道路信息数据集进行均衡、裁剪和放缩处理。
数据增强模块,对所述道路信息数据集进行增强处理。
网络训练模块,用于根据优化的自动驾驶神经网络PilotNet预测车辆的行驶参数,其中,所述行驶参数包括转向角度。
网络测试模块,用于根据优化的PilotNet在模拟器上进行测试。
网络可视化模块,用于对优化的PilotNet的测试结果进行可视化显示,以获取道路图像特征。
本发明主要研究了端到端自动驾驶车辆转向控制网络设计及其改进,首先介绍NVIDIA的PilotNet自动驾驶神经网络,然后对PilotNet进行改进。
实施例一端到端自动驾驶车辆转向控制网络设计及其改进
1、PilotNet
NVIDIA的PilotNet一共由预处理模块、卷积模块、全连接模块三部分组成。
1.1、PilotNet的预处理模块的结构如图16所示。
预处理模块包括输入层和标准化层。首先通过输入层,输入高160、宽 320的RGB三通道图片。然后通过标准化层,使得预处理数据被限定在[-0.5,+0.5]范围内,从而消除奇异样本导致的不良影响。如公式3-1所示,所有像素除以127.5,再减去1.0:
1.2、卷积模块被设计用于进行特征提取,其步骤包括:
(1)输入(66,200,3),通过卷积核数量为24,大小为(5,5),步长为(2,2) 的卷积,输出(31,98,24)。再通过ReLU激活函数,Dropout层;
(2)输入(31,98,24),通过卷积核数量为36,大小为(5,5),步长为(2,2) 的卷积,输出(14,47,36)。再通过ReLU激活函数,Dropout层;
(3)输入(14,47,36),通过卷积核数量为48,大小为(5,5),步长为(2,2) 的卷积,输出(5,22,48)。再通过ReLU激活函数,Dropout层;
(4)输入(5,22,48),通过卷积核数量为64,大小为(5,5),步长为(1,1) 的卷积,输出(3,20,64)。再通过ReLU激活函数,Dropout层;
(5)输入(3,20,64),通过卷积核数量为64,大小为(5,5),步长为(1,1) 的卷积,输出(1,18,64)。再通过ReLU激活函数,Dropout层。
卷积模块的结构如图17所示。
1.3、全连接模块的结构如图18所示。
全连接模块被设计用于转向控制,其步骤包括:
(11)将卷积模块的输出(1,18,64)压平为1152维向量;
(12)1152维向量,通过全连接降维到100维向量。再通过ReLU激活函数,Dropout层;
(13)100维向量,通过全连接降维到50维向量。再通过ReLU激活函数,Dropout层;
(14)50维向量,通过全连接降维到10维向量。再通过ReLU激活函数,Dropout层;
(15)10维向量,通过全连接降维到1维向量。最终得到一个输出控制值,也就是转向角度。
2、PilotNet改进网络
PilotNet一共有252219个参数,训练完后的模型大约为3M,可以在嵌入式设备中进行深度学习推理。如何在不增加过多计算量的同时,提高网络的表达能力就成为我们的研究方向。
虽然大尺寸的卷积核可以带来更大的感受野,但是也意味着会产生更多的参数,例如5×5卷积核的参数有25个,3×3卷积核的参数有9个,前者是后者的25/9=2.8倍。Inception V2[23]的研究表明,可以通过分解卷积实现模型压缩,同时使得网络深度进一步增加,增加了模型的非线性,提高模型的表达能力。
如图19所示,步骤(a)所示,InceptionV2将5×5的卷积核,分解成两个3×3卷积核;步骤(b)Inception V2将3×3的卷积核,分解成1×3卷积核和3×1卷积核。
我们的改进算法除了采用分解卷积,还采用了平均池化层,该方法灵感依然来自Inception V2,有利于防止过拟合。(1,18,64)的特征图经过一个大小为1×6的平均池化核后,输出(1,3,64)的特征图。
表2网络部分模块参数对比
改进后的网络一共只有113543个参数,约为PilotNet的一半,网络大小约为1.5M。表2为网络部分模块参数对比。
3、其他条件
如公式3-2所示,激活函数选择线性整流函数(Rectified Linear Unit, ReLU)。当输入x<0时,输出为0,当x>0时,输出为x。ReLU能使网络更加速收敛,可以对抗梯度爆炸和梯度消失问题。由于没有其他复杂激活函数中诸如指数函数的影响,因此ReLU的计算效率很高。
ReLU(x)=max(0,x) (式3-2)
如公式3-3所示,损失函数选择均方误差(MeanSquaredError,MSE)。经过平方计算,与真实值偏离较多的预测值会比偏离较少的预测值受到更严重的惩罚。
优化函数选择Adam,这是一种计算每个参数自适应学习率的算法,在实际应用中效果良好。与其他自适应学习率算法相比,其收敛速度更快,学习效果更有效,而且可以纠正其他优化函数中存在的问题,如学习率消失、收敛过慢或是损失函数波动较大等问题。
实施例二模拟器测试实验与分析
本发明实施例主要复现NVIDIA的PilotNet自动驾驶神经网络,并实现 PilotNet的改进网络。通过数据收集、数据处理、数据增强等步骤后,对两个网络进行训练与测试,并对实验结果进行了可视化显示和分析,验证了端到端自动驾驶车辆转向控制的可行性。
1、模拟器介绍与使用
自动驾驶研发的主要问题是预测车辆转向角度并且依据角度控制车辆行驶,如果完全使用真车研发,过程中容易导致事故,因此一般会在模拟器上先进行测试,再移植到真车。目前流行的模拟器有CARLA、AirSim、Apollo 等,本文采用优达学城提供的一款模拟器Udacity-Sim。
Udacity-Sim模拟器一共有两种模式:训练/数据收集模式(Training Mode) 和验证/自动驾驶模式(Autonomous Mode)。如图4所示,在训练模式下,上箭头使小车加速,下箭头使小车减速,R键可开启记录模式,在记录模式下,模拟器会记录小车摄像头拍摄到的图像,以及当前转向角度;在验证模式下,启动driver.py脚本,即可在模拟器中测试模型。
2、数据收集
车辆有三个前置摄像头,分别放置在左、中、右三个方向,对周围的环境进行拍摄录制,结果以图片形式保存到电脑上。收集完毕,在保存目录下会生成IMG文件夹和driving_log.csv文件。
IMG文件夹中保存了摄像头的左、中、右三个方向的图片。 driving_log.csv文件中保存了用户开车时的信息,driving_log.csv基本结构包括:center、left、right分别表示在当时左、中、右摄像头的图片路径;steering、 throttle、brake、speed分别表示转向角度、油门力度、刹车力度、车辆速度。为了简化实验,本文只采用这个参数,即利用摄像头图片预测转向角度。
数据集一共有24108张图片(每个摄像头8036张图片)。如图5所示的数据集统计,横坐标为转向角度,纵坐标为数量(下同),转向角度一共 180度,被映射到[0,1]。数据集分布中间多,两端少,即大多数记录的转向角度为零,说明大部分时间车辆是直线行驶。
3、数据处理
由于数据极度不均衡,容易导致过拟合。一种解决的方法是:除了转向角度为0的图像,全部进行翻转处理,转向角度乘以-1。同时,将转向角度为0的图像随机丢弃,比例为0.5。如图6所示的处理后的数据集统计,处理后的数据集大致呈现正态分布,两端逐渐均匀下降。
由于摄像头捕获的图片存在大量细节,这些细节对网络的提升没有作用,因此需要对图片中无关像素进行舍弃。如图7所示的裁剪前后的效果图,横轴坐标分别表示图片的宽高像素(下同),裁剪原图顶部60px像素和底部 20px像素,输出高为80的图片。
由于网络的输入固定为高66、宽200,因此需要进行放缩处理,统一数据集的尺寸。如图8所示的放缩前后的效果图,将裁剪后的图片等比例放缩为高66、宽200的图片。
4、数据增强
神经网络一般需要大量的数据集才能获得比较理想的结果。在数据集有限的情况下,可以通过数据增强的方式来增加样本多样性,提高模型鲁棒性,避免过拟合。数据增强使用iaa库。
如图9所示的数据增强的效果图,本文一共采用了四种数据增强方式:亮度增强、高斯滤波、锐化效果、雾层效果。
5、训练与测试
深度学习训练与测试依赖于GPU等硬件以及NVIDIA驱动、CUDA和 CuDNN等软件。
设置训练迭代次数(epoch)为100,批大小(batch_size)为1024,数据集分为训练集和验证集,分别占80%和20%。由于原始曲线图存在“毛刺”现象,为了美观,仿照TensorBoard的平滑曲线。如公式4-1所示,last为上一个点,weight为平滑因子,可取0.8。
smooth_val=last*weight+(1-weight)*val (式4-1)
处理后的结果如图10所示,训练损失与验证损失的对比图,横坐标为迭代轮数,纵坐标为损失值,可以看出在(a)在训练阶段两个网络表现一致,均在第20轮的时候基本达到收敛效果。(b)在验证阶段存在轻微波动,但是最终都能够保持在0.3-0.4的水平。整体损失随迭代次数的增加而降低,经过20轮左右,开始收敛,并稳定在0.03。改进后的算法比PilotNet更快开始收敛,也更快达到收敛。同时在验证集上,表现最终的损失更少。
图11为验证集预测分布图,可以看到PilotNet和改进网络与原始图的数据分布基本一致,均向中间靠拢,两端逐渐下降,符合预期。
经简单计算得出,0.05为9度,0.10为18度,0.15为27度,0.20为36 度,0.25为45度。只要车辆偏差稳定在实际角度的[-45,+45]范围内,可以说明车辆预测角度和实际角度变化趋势一致。
表3实际角度与预测角度的偏差表
偏差 |
PilotNet |
改进网络 |
提升 |
0.05(9°) |
0.438900 |
0.453335 |
+1.4% |
0.10(18°) |
0.723121 |
0.739796 |
+1.6% |
0.15(27°) |
0.854654 |
0.859756 |
+0.51% |
0.20(36°) |
0.926705 |
0.929194 |
+0.24% |
0.25(45°) |
0.969761 |
0.973370 |
+0.36% |
表3为实际角度与预测角度的偏差表。PilotNet和改进网络对比得出,改进网络更优,其中9度偏差接近45%,45度偏差接近98%,基本能够拟合原始路线,在模拟器中的现象为更稳定地行驶。图12为表3的直方图,横坐标为转向偏差,纵坐标为准确率。绿色代表PilotNet,红色代表改进网络。
6、模拟器测试
在模拟器测试中PilotNet和改进网络都能够顺利自动驾驶,并且不需要人为干预。同时改进网络行驶比PilotNet更稳定,说明改进算法表达能力更强。
7、可视化分析
如何从数学原理上对深度学习的“黑盒”模型进行解释十分困难,尤其是端到端的卷积神经网络。但是通过分析在端到端深度学习过程中,模型重点提取的道路特征,对其进行可视化却比较简单。
对于深度学习端到端模型来说,如何理解模型训练过程,避免“黑箱子”显得格外重要,特别是在交通、医疗和军事等高风险行业中。如果不能合理解释模型的工作过程,用户是不敢轻易相信模型的输出结果。
利用keras-vis库,我们实现了卷积网络的可视化。图13表明PilotNet 和改进网络都已经学会检测道路特征,其中叠加图为原图与特征图的合成。改进算法可以明显看出道路的细节,提取的特征比较清晰,说明表达能力更强。
实施例三实验室模拟道路测试实验与分析
为了进一步探究端到端自动驾驶车辆转向控制可行性,本文发明还进行了小车在实验室模拟道路上的测试实验与分析。主要工作在小车组装与控制部分,其他步骤与上一节模拟器部分基本一致。
1、小车组装与控制
实验必要零件包括:舵机转向小车、电机驱动、树莓派2代开发板、Xbox 手柄、原厂摄像头、7.4V电池组(两节18650充电电池)、5V充电宝等。
1.1、树莓派开发板
树莓派是只有信用卡大小的微型Linux电脑,优势是精简且功能完备。问世以来,受到众多计算机发烧友和创客的追捧,可以开发各种功能例如:视频监控、智能音箱、游戏掌机等。
本实验的代码和模型将部署到树莓派开发板上,并由树莓派提供计算能力,结果通过GPIO口的方式,控制舵机的占空比,从而改变小车的转向。
1.2、舵机转向
脉冲宽度调制(Pulse Width Modulation,PWM)是一种矩形波,通过高电平时间所占周期的比例,即占空比来表示不同信号。占空比可以从0%到 100%。不过舵机往往不是360°都可以旋转的,所以在控制舵机的时候,占空比并不是从0%到100%都可以的。
本实验的舵机周期为20ms,最小角度是-90°、最大角度是90°,总共可用角度为180°。高电平脉冲宽度0.5ms对应的角度为-90°,占空比为 2.5%;高电平脉冲宽度2.5ms对应的角度为90°,占空比为12.5%;中间部分为线性变化。如图20所示。
通过公式5-1和5-2计算转向占空比,可以实现小车的前轮转向。其中 x为手柄的x轴偏移量,MAX_NUM为偏移量最大值(65535),MAX_ANGLE 为最大角度,MAX_ANGLE为最小角度。
1.3、电机驱动
控制原理与舵机相同,均通过PWM占空比方式。
通过公式5-3计算驱动占空比,可以实现校车的后轮驱动。其中y为手柄的y轴偏移量,MAX_NUM为偏移量最大值(65535),MAX_SPEED为最大速度,MAX_SPEED为最小速度。
1.4、手柄控制
手柄连接上USB后,使用手柄测试命令:jstest/dev/input/js0,可以读取 Axes和Button的变化。Linux内核文档[]提到手柄事件定义:
(1)__u32无符号32位整数time,事件时间戳,以毫秒为单位;
(2)__s16无符号16位整数value,值;
(3)__u8无符号8位整数type,事件类型;
(4)__u8无符号8位整数number,轴/按钮标号。
表4手柄映射表
编码 |
解释 |
编码 |
解释 |
BUTTON_A=0 |
按键A |
AXIS_LX=0 |
左摇杆X轴 |
BUTTON_B=1 |
按键B |
AXIS_LY=1 |
左摇杆Y轴 |
BUTTON_X=3 |
按键X |
AXIS_RX=2 |
右摇杆X轴 |
BUTTON_Y=4 |
按键Y |
AXIS_RY=3 |
右摇杆Y轴 |
BUTTON_LB=6 |
按键L1 |
AXIS_LT=5 |
L2按键 |
BUTTON_RB=7 |
R1按键 |
AXIS_RT=4 |
R2按键 |
BUTTON_MENU=11 |
菜单按键 |
AXIS_XX=6 |
方向键X轴 |
BUTTON_LO=13 |
左摇杆按键 |
AXIS_YY=7 |
方向键Y轴 |
BUTTON_RO=14 |
右摇杆按键 |
|
|
根据手柄事件定义和映射表4,可以利用python实现jstest命令的功能,即读取/dev/input/js0的数据。
1.5、拍照录像
拍照的时候,由于树莓派摄像头存在镜像问题,因此需要将图像旋转180 度。同理,录像的时候,需要将视频中每一帧图像旋转180度。同时注意,请勿在树莓派开机时拔插摄像头,容易导致摄像头烧坏。
2、数据处理
利用黑色胶布围成一圈赛道,宽度大约是车身的1.5倍,长度大约10 米。树莓派摄像头以每秒10帧的速率获取图像,收集10圈数据,一共获得1860张图片。在实验室模拟道路实验中,由于设备限制,本文只采用单个摄像头。
处理步骤基本与模拟器实验相同,包括裁剪、放缩、数据增强。
3、训练与测试
训练设置迭代次数(epoch)为20,批大小(batch_size)为64,数据集分为训练集和验证集,分别占80%和20%。
如图14所示,以横坐标为迭代轮数,纵坐标为损失值,可以看到,训练损失和验证损失的曲线均平滑下降,训练集和验证集的损失分别在第15 轮、第10轮的时候开始趋于稳定,最终损失均为0.05。表明模型训练良好,达到收敛效果。
将训练好的模型文件.h5拷贝到树莓派,然后通过树莓派调用载入模型。在每一帧图像中,预测出的数字,表示小车的转向角度,通过树莓派控制舵机转向即可。
4、可视化分析
从图15可以看到,热力图注意力集中在道路的轮廓,表明模型学会检测道路特征。实验室模拟道路测试相比于模拟器测试的可视化结果更清晰,一种可能的原因是数据集比较干净,铺设道路没有多余的细节。
本发明基于NVIDIA的PilotNet,研究了端到端自动驾驶车辆转向控制,同时对PilotNet的卷积进行分解,改进网络性能,实现更快收敛。通过复现 NVIDIA的PilotNet自动驾驶神经网络,并实现PilotNet的改进网络,经数据收集、数据处理、数据增强等步骤后,对两个网络进行训练与测试,并对实验结果进行了可视化显示和分析,验证了端到端自动驾驶车辆转向控制的可行性。实验表明,卷积神经网络能够在没有感知和决策阶段的情况下,仅仅通过当前摄像头的图片,预测接下来的动作。通过卷积层可视化,发现模型能够从数据集中检测道路的轮廓,这是在没有给数据集标签的情况下自动学习到的。实验在模拟器和实验室模拟道路上均得以实现。
以上仅为本申请的实施例而已,并不用与限制本申请。对与本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。