我是靠谱客的博主 忧郁手机,最近开发中收集的这篇文章主要介绍CNN训练模型自动驾驶仿真1. 摘要2. 自动驾驶仿真原理3. 收集自动驾驶数据4. 训练模型5. 仿真运行参考,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1. 摘要

本文讲解如何根据开源项目[1]和Udacity的自动驾驶仿真工具[2],训练一个CNN自动驾驶模型,并在仿真器中看到自己模型的自动驾驶效果。

2. 自动驾驶仿真原理

自动驾驶仿真的“硬件”原理图如下:

在这里插入图片描述

从原理图中,我们需要知道,人在开车的时候,有检测系统采集了如下参数

  • 三个摄像机采集的图像:Left,Center,Right
  • 转向角,速度,油门,刹车

摄像机的图像,代表有监督学习的输入;转向角,速度,油门,刹车作为有监督学习的输出

下面讲解自动驾驶仿真的具体步骤,本文的系统为Win-10。

3. 收集自动驾驶数据

在[2]中下载最新的模拟器,下载beta-simulator-windows.zip,解压后,双击打开beta_simulator.exe,直接点play按钮,进入模拟器,如下。

在这里插入图片描述

选择训练模式“TRAINING MODE”,进入训练模式,如下图所示。

在这里插入图片描述

此时,可以用键盘的上下左右按键来控制小车的移动,相当于驾驶员在驾驶小车。

但是,我们控制小车,并不会记录数据。要记录我们驾驶小车的数据,需要按R键,选择数据存储目录,并按Select按钮结束,如下图所示。

在这里插入图片描述

接下来,我们用键盘的上下左右按键来控制小车的移动,就当玩游戏。从这时开始,模拟器就记录小车的移动。

在驾驶模拟小车时,务必好好操作,不要撞墙或驶出边界,因为最终模型学习的就是你的假设经验。

如果想停止驾驶,需要按两次R键,等待模拟器将记录的数据都dump到数据存储目录,最终我们得到模拟器输出的一个csv文件driving_log.csvIMG文件夹,文件夹中记录了三个摄像机采集的各个时刻的图像。

至此,数据获取完毕,接下来用这些数据训练模型。

4. 训练模型

用git clone [1]中的项目,并执行如下步骤:

(1) 在项目中创建文件夹data,并将模拟器输出的csv文件driving_log.csv复制到data目录下

(2) 安装Anaconda[4],并根据项目[1]中的yml文件创建虚拟环境,执行如下命令

conda env create -f environments.yml

打开environments.yml文件,可以看到创建的虚拟环境名为car-behavioral-cloning
这个步骤下载安装一些module会比较费时,若出现安装失败的情况,可能是网络环境的问题,需要把创建的虚拟环境car-behavioral-cloning删除,再重新执行conda env create -f environments.yml命令,笔者也是创建了好几次才创建成功的。

(3)训练模型

python model.py

打开model.py可以看到,项目中的模型是一个由5层CONV加4个隐层组成的简单CNN模型。我们可以修改这个文件,训练自己的模型。


model = Sequential()
model.add(Lambda(lambda x: x/127.5-1.0, input_shape=INPUT_SHAPE))
model.add(Conv2D(24, 5, 5, activation='elu', subsample=(2, 2)))
model.add(Conv2D(36, 5, 5, activation='elu', subsample=(2, 2)))
model.add(Conv2D(48, 5, 5, activation='elu', subsample=(2, 2)))
model.add(Conv2D(64, 3, 3, activation='elu'))
model.add(Conv2D(64, 3, 3, activation='elu'))
model.add(Dropout(args.keep_prob))
model.add(Flatten())
model.add(Dense(100, activation='elu'))
model.add(Dense(50, activation='elu'))
model.add(Dense(10, activation='elu'))
model.add(Dense(1))

5. 仿真运行

(1)在项目[1]中运行模型

python drive.py model.h5

drive.py中,其实是启动了一个socketio的server,与仿真器通信(仿真器是一个socketio的client)。

从这个py文件中,我们可以看到,要控制仿真器中小车的运动,需要向仿真器发送如下两个参数

  • steering_angle:转向角
  • throttle:油门
def send_control(steering_angle, throttle):
sio.emit(
"steer",
data={
'steering_angle': steering_angle.__str__(),
'throttle': throttle.__str__()
},
skip_sid=True)

在小车运动过程中,会通过’telemetry’ event发送小车当前的转向角、油门、车速,以及当前摄像机拍摄的照片到drive.py中如下代码

#registering event handler for the server
@sio.on('telemetry')
def telemetry(sid, data):
if data:
# The current steering angle of the car
steering_angle = float(data["steering_angle"])
# The current throttle of the car, how hard to push peddle
throttle = float(data["throttle"])
# The current speed of the car
speed = float(data["speed"])
# The current image from the center camera of the car
image = Image.open(BytesIO(base64.b64decode(data["image"])))

仿真器发送过来的数据中,只有小车处于中央位置摄像机拍摄的图像,如下所示

在这里插入图片描述

这就是模型的输入(当然作者还对图像做了简单的预处理,比如去掉顶部的蓝天和图像下方的车头)。

因为在真实仿真中,只能看到一张图像。而在数据收集步骤中,能看到三张图像,所以在训练模型的过程中,作者在代码中只随机取出三张图像中的一张作为训练集。

(2)打开仿真器,双击打开beta_simulator.exe,就能看到小车被算法运行起来了。

参考

  • [1] https://github.com/llSourcell/How_to_simulate_a_self_driving_car
  • [2] https://github.com/udacity/self-driving-car-sim
  • [3] https://www.youtube.com/watch?v=EaY5QiZwSP4&feature=youtu.be
  • [4] https://blog.csdn.net/ybdesire/article/details/50966139

最后

以上就是忧郁手机为你收集整理的CNN训练模型自动驾驶仿真1. 摘要2. 自动驾驶仿真原理3. 收集自动驾驶数据4. 训练模型5. 仿真运行参考的全部内容,希望文章能够帮你解决CNN训练模型自动驾驶仿真1. 摘要2. 自动驾驶仿真原理3. 收集自动驾驶数据4. 训练模型5. 仿真运行参考所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(89)

评论列表共有 0 条评论

立即
投稿
返回
顶部