参与:杨旋、吴攀 Udacity 无人驾驶车工程师纳米学位(Nanodegree)系列计划第三个项目 项目地址:https://github.com/upul/behavioral_cloning 概述 本项目的目标是使用一个深度神经网络来模拟人类的驾驶行为。为了达成这个目标,我们会使用一个简单的汽车模拟器。在训练阶段,我们使用键盘在模拟器内对我们的车进行导航。当我们驾驶汽车时,模拟器会记录训练图像和相应的转向角度。然后我们使用这些记录的数据来训练我们的神经网络。训练模型会在两个轨道上进行测试,即训练轨道和验证轨道。 依赖包 此项目需要安装 Python 3.5 和以下 Python 库: Keras:https://keras.io/ NumPy: SciPy:https://www.scipy.org/ TensorFlow: Pandas: OpenCV: Matplotlib (可选): Jupyter (可选): 在终端提示符处运行此命令安装 OpenCV。适用于图像处理: conda install -c https://conda.anaconda.org/menpo opencv3 如何运行模型 此资源库包含了已经进行训练好的模型,你可以使用以下命令直接测试。 python drive.py model.json 实现 获取数据 在训练期间,模拟器以 10Hz 的频率来获取数据。此外,在给定的时间间隔内,它将依次记录左、中和右部的摄像机拍摄的三个图像。下图显示了我在训练期间收集的示例。
收集到的数据在传送给深度神经网络之前会被预处理,相应的预处理步骤将在本文的后半部分描述。 数据集统计 该数据集包含 24108 张图像(每个方向的摄像机拍摄了 8036 张图像)。训练轨道包含许多缓弯和直线路段。因此,记录中的大多数转向角都是零。所以,对图像和相应的转向角度进行预处理非常必要的,以便将此训练模型推广到那些未经训练的路线(例如我们的验证轨道)。 接下来,我们将解释我们的数据处理流程(data processing pipeline)。 数据处理流程 下图显示了我们的数据预处理流程。
当处于流程中的第一个阶段时,我们会应用随机剪切操作。然而,我们只选择了 90% 的图像来进行随机剪切过程,保留了 10% 的原始图像和转向角,以帮助汽车在训练轨道中导航。下图显示了样本图像剪切操作的结果。
模拟器捕获的图像有很多细节,它们对于模型构建过程没有直接的帮助。这些细节除了会占用的额外空间还需要额外的处理资源。因此,我们从保留的那 10% 的图像的起始处开始删除了 35% 的原始图像。这个过程在修剪阶段(crop stage)完成。下图显示了图像的裁剪操作的结果。
数据处理流程的下一阶段被称为随机反转阶段(random flip stage)。在这个阶段,我们会随机(概率设定为 0.5)翻转图像。这样做的原因是因为是训练轨道中的左弯曲比右弯曲更普遍。因此,为了增加我们的模型的泛化性,我们采取了翻转图像和相应的转向角的方案。下图显示图像的翻转操作的结果。
在流程的最后阶段,为了减少训练的时间,我们将图像大小调整为 64×64。样本调整大小的图像如下图所示。进行调整过后的图像传送给神经网络。下图显示了图像的调整大小操作的结果。
接下来我们将讨论我们的神经网络架构。 网络架构 (责任编辑:本港台直播) |