基于神经网络深度学习的无人驾驶小车设计与制作

2021-12-17 09:08徐中林范俊宇高畅
电子制作 2021年22期
关键词:小车卷积神经网络

徐中林,范俊宇,高畅

(沧州师范学院,河北沧州,061001)

1 系统硬件方案

系统硬件由主控板、PWM转换板、电机、舵机、电池、轮胎。从上到下依次为控制层、电机驱动层。控制层以树莓派微处理器为主控电路,PWM芯片选型PCA9685,电机驱动层主要以电机驱动电路、电源组成,为四轮车提供动力,在小车主控板的选择上,可以选择arduino,STM32,树莓派以及英伟达的jepson 系列,树莓派与嵌入式微控制器(STM32)和arduino相比,除了相同的IO引脚控制之外,还可以运行相应的操作系统,完成更复杂的任务管理与调度,能够支持更上层应用的开发,开发语言可选用Python、C语言,对于视觉处理、复杂数据处理有很大的优势。

如果有条件可以选用Jetson Xavier NX,相比树莓派4B 系列采用的VideoCore VI是经典的双重Shader架构(性能只有数+G Flops而英伟达的基于Volta架构,Jepson Xavier NX有48个Tensor内核,提供了6.8T Flops的FP16算力。内包含 两 个 DLA(Deep Learning Accelerator),支 持FP16和INT8,总计有21T Flops,性能相差数百倍,但是价格也很昂贵。

本文采用的是市场成熟廉价的树莓派4B。文中提及两套方案,可依据不同的处理器选用不同的算法。

小车在行驶过程中,需要大量视觉信息,故采用广角视觉传感器。拍摄角度为130°。

马达以及舵机控制模块,采用16路PWM控制模块PAC9685模块,该模块可以通过I2C通信模式,实现对多路电机舵机控制,能耗低,调节方便。

由于下位机采用树莓派微处理器进行设计,对于PAC9685多路PWM控制模块拥有集成库,开发较为容易,且能耗低,在使用时仅需要读取I2C地址,即可调用库实现对电机驱动模块,舵机的控制。

2 端到端控制系统及算法设计

本章内容是全文的核心,先介绍小车系统的设计,再介绍端到端控制系统算法的设计与实现过程,并从理论上阐述设计算法设计要素。神经网络采用RNN对转向角预测,以及网络结构、提升网络训练能力和过拟合方法。

■2.1 小车系统设计

设计实现小车属于微缩模型小车,便于携带、数据采集、调试方便,主要用于数据采集和模型测试,受于DAVE智能车启发,小车保持有左转、右转、直行功能[12]。

小车为四轮驱动方式,装有一台直流电机和一台舵机,前轮具有转向功能,后轮负责速度,无人小车运动坐标系如图1所示。其中,xoy是世界坐标系,XOY是智能车坐标系,θ是无人小车坐标系和世界坐标系之间的夹角,φ为驱动轮之间的夹角,为φ=90°,L为无人小车中心到车轮的水平距离。

图1 智能车坐标系和世界坐标系

■2.2 神经网络选择

方案一:采用3DCNN[13]网络,卷积核设置为3D卷积核,处理数据通常为(3,d,h,w)样式,一般用于3D图像数据,在无人驾驶项目中通常结合高性能GPU使用。

方案二:采用RNN-LSTM,卷积核为2D卷积核,处理数据通常为(1,h,w)样式,常用于计算机视觉、图像处理领域。在无人驾驶项目中应用时对高性能GPU要求较低。

考虑到树莓派微处理器算力较低,使用视觉传感器,搭载3DCNN网络时性能较弱,而RNN-LSTM网络对处理器算力要求较低,故采用方案二,故神经网络采用RNNLSTM网络。

■2.3 图像处理技术选择

方案一:使用图像处理库PIL,在深度学习技术中通常用于PC机中,它可以存储、显示和批量处理所有图片格式。

方案二:使用图像处理库OpenCV[14],它可以跨平台开发,主要用于图像处理、计算机视觉、物体识别、运动跟踪等方面。

总结:考虑到任务设计的系统分为上位机与下位机部分,而OpenCV图像处理技术主要与传感器结合使用,故将方案一与方案二结合使用,上位机图像处理时,采用图像处理库PIL,下位机使用图像处理库OpenCV。

■2.4 算法概述

本文设计的算法采用深度学习的方式,将系统当作整体进行研究的。学习系统利用循环神经网络进行设计的,下位机网络输入利用视觉传感器获取信息,输出为一浮点数,代表行驶决策。算法整体流程图如图所示。端到端控制算法结构图如图2所示。

图2 端到端控制算法结构图

■2.5 神经网络具体设计与实现

神经网络输入为无人小车前方视觉传感器获取的,输出为预测行驶路线和转向角度。主要设计要素为网络结构、卷积层、LSTM层、激活函数等元素。神经网络是深度学习技术中最为至关重要的技术,本节将分别进行阐述。

2.5.1 循环神经网络介绍与设计

循环神经网(RNN)[2]是专门用于处理序列数据的神经网络,在设计时掌握过去发生的事情对现在事情的影响,即网络将前t时刻状态保存下来,并作为t-1时刻状态反馈给隐藏层,最终将数据用于当前输出的计算中。因为RNN存在梯度消失和梯度爆炸的问题,导致无法长期训练问题。本文通过引入LSTM网络,即RNN-LSTM网络,解决了传统循环神经网络梯度消失和梯度爆炸的问题。即输入为无人小车前方广角摄像头拍摄的图像,输出为一近似实数,代表预测行驶路线及行驶角度。RNN训练完成后,通过模型部署,无人小车在前进行驶过程中,利用广角相机拍摄获得第一时间图像,经过RNN会映射为预测行驶路线。网络共有13层,包含4个时间分布卷积层、2个LSTM层、1个池化层、1个Flatten层和5个Dense层,输入图片大小为160×120,通过4个3×3大小的卷积核,对特征提取,通过两个3×3大小的卷积核,对特征提取,经过池化、对特征信息降维,再通过LSTM层,解决训练的依赖问题,最终在全链接层输出为一点,代表行驶策略与角度。RNN-LSTM算法表如表1所示。

表1 RNN-LSTM算法表

2.5.2 损失函数

损失函数是指网络生成模型的真实值和预测值之间的误差[12],本文中神经网络输出的行驶角度为连续值,故在计算网络损失时,采用平方差来估算损失。记a为部分训练数据集,b为特征的个数,d为类的个数,损失为L。故部分训练数据集a构成的特征矩阵 X ∈ (a, b),权重矩阵 W ∈ (b, d),样本标签 y ∈ (a, d),损失函数表达式如式(1)所示。

2.5.3 网络结构

RNN网络结构,包含输入层、卷积层、全连接层、输出层。输入处理数据经卷积层卷积后,对特征进一步提取,再后进入Dense层,最终输出为一个节点。但RNN存在梯度消失和梯度爆炸状况,故在RNN网络中添加遗忘门,其LSTM结构示意图如图3所示。

图3 LSTM网络结构示意图

2.5.4 激活函数

激活函数采用RELU[15]函数。可以使网络训练速度加快,拥有非线性,回归训练中使网络具有稀疏性,防止梯度消失。通过给神经元引入非线性元素,实现逼近任何非线性函数,提高网络建立非线性模型能力,从而应用到更多的非线性模型中。RELU函数表达式如式2所示,RELU函数图像如图4所示。

图4 激活函数图像

2.5.5 防止过拟合

在深度学习中,过拟合是指如果训练模型过于针局部特征训练错过了整体要点。本文中无人小车的数据模型是从数据集中通过特征提取获得的,数据集中样本的特征又分为两部分,即局部特征和全局特征。如果数据模型过于专注局部数据训练,会造成全局特征丢失,反之数据模型过于专注全局训练,则会丢失局部特征。在数据模型中,有些与特征数据无关的,对最终模型生成造成影响,可视为噪声数据。如本文中无人驾驶场景为限定场景,全局特征分为:直行标识线和转弯标识线,若小车行驶过快发生冲出跑道现象,则会丢失转弯标识线,在数据模型训练时会造成局部特征丢失,导致学习驾驶场景中局部特征过高,发生过拟合现象。

一般过拟合缘由通常有三种:(1)训练样本数据差距过大。(2)模型容量小,训练数据不足。(3)训练模型较大,模型复杂。在合理的数据采集中,一般情况下,可以避免第一种和第二种情况发生。而实际训练数据集时,通常由于数据集过大,即局部特征学习数据较大,对局部特征学习较多,从而造成全局特征丢失,故过拟合现象通常由第三种情况触发。本文设计的无人驾驶小车,由于采用限定场景,采集数据集局部特征数据含有量较高,故过发生过拟合情况可能性较大。

2.5.5 .1利用更多数据训练

利用更多数据集训练是一种最为直接的办法,通过比对过去采集数据集,人工比对数据集具体内容,即针对丢失全局特征进行增添。

2.5.5 .2正则化和随机失活

正则化在深度学习技术中,通常用于降低模型复杂程度的。本文采用随机失活(Dropout)[16]方法,在训练数据集中,经过随机删除神经网络单元,训练一个模型,即可完成多个模型集成的成果。

由于本文数据集采集存在大量局部特征数据,故算法经过随机删除网络中神经元,在输入时添加概率为p=0.3的Dropout。从而实现限制数据模型容量,减少过拟合的现象发生。

图5 普通神经网络连接示意图

图6 添加Dropout神经元连接示意图

2.5.5 .3提前结束数据集训练

任务设计的无人驾驶场景,由于采用限定场景设计的,无人小车行驶时的角度记为r。根据实际经验,小车行驶时,记录数据集大多数处于直线行驶状态,即r=0°,在转弯与非直线行驶时,记r≠0°。数据集在上位机中训练时,由于r=0°的样本较多,r≠0°的样本较少,即数据集样本分布不均匀,随着模型训练次数增加,致使损失函数降低十分缓慢。

设计算法采用回调函数中EarlyStopping,在模型训练时,训练数据集每通过一次迭代,损失率下降,若5次迭代之后,模型损失率相差保持在0.005以内,则提前停止训练或训练损失率下降到0.005时自动停止训练。

3 预先训练

从收集数据集中本筛选1000张照片,图片语义明确。例如,选择光线充足或特征清晰图片。手动选择的图像用于网络预训练,通过训练生成一个容量大、网络的损失值极低的模型。通过加载预先训练好模型,并经过对训练集的训练模型调整权值,从而加快网络收敛速度。

经过测试,预训练可以成功的解决由于初始化的不当造成的梯度爆炸与梯度消失,致使模型训练速度缓慢等问题,同时使用一些经过处理后的数据图片输入至网络进行预训练,可以加快网络训练速度。

本文从理论角度阐述了整个系统神经网络设计与实现方法,设计网络结构、卷积层、LSTM层、激活函数等元素,通过采用网络预训练的方法,解决了训练速度缓慢的问题。针对过拟合采用了增加更多数据、正则化和随机失活、提前截止训练的方法增加了模型可信任程度。在输入网络数据时,通过将人为干预控制采集的数据传输于上位机中,利用离线深度学习生成跑道模型,经过下位机部署,无人小车使用广角相机采集数据信息,进行行驶路线预测,即可实现限定场景中的无人驾驶。

猜你喜欢
小车卷积神经网络
基于全卷积神经网络的猪背膘厚快速准确测定
基于神经网络的船舶电力系统故障诊断方法
基于人工智能LSTM循环神经网络的学习成绩预测
基于图像处理与卷积神经网络的零件识别
MIV-PSO-BP神经网络用户热负荷预测
一种基于卷积神经网络的地磁基准图构建方法
基于3D-Winograd的快速卷积算法设计及FPGA实现
积木小车
刘老师想开小车
三次样条和二次删除相辅助的WASD神经网络与日本人口预测