Data preprocessing and balancing to enhance end to end learning in self-driving vehicle 论文笔记
摘要:驾驶车辆一直是一项艰巨的任务,无论是任何车辆,因为机器人和人工智能在过去十年中已经发展了多倍,这给了我们自动化包括驾驶在内的许多过程的技术基础。开发自动驾驶汽车是许多公司目前的研究领域,如谷歌、特斯拉、英伟达和优步。他们提出的几种方法是英伟达的行为克隆、CommaAI的OPENPILOT、特斯拉的自动驾驶仪,所有这些都使用摄像机来处理车辆的周围环境。在本文中,我们讨论了英伟达最近的工作(行为克隆),并将他们的工作与我们自己的一些技术相结合,如过滤重复数据和增加输入数据以减少所需的数据收集量。
行为克隆涉及神经网络的训练,方法是提供一个图像和控制日志数据集,该数据集是在人类驾驶员操作车辆时生成的。这种深度学习方法通过在卷积神经网络(CNN)中处理数据集来进行示例学习,因此被称为行为克隆。这种方法的目的是使用收集的数据训练模拟行为的模型。这降低了模型培训和测试的复杂性,并且模型能够更有效地应对新的驾驶情况
二 、方法
训练代理的过程包括由人类驾驶员生成数据,然后通过过滤(数据增加)处理收集的原始数据,仅从静止数据中提取重要数据,也可能有生成类似数据的情况(数据输入非常大),因此为了避免处理重复数据,我们实现了数据平衡,通常将数据划分为多个容器,并使用来自每个容器的固定数量的帧,这为我们提供了更平衡的数据。
现在把数据输入神经卷积网络网,产生一个训练有素的模型,然后由这个模型来操纵车辆。上述过程可分为三个阶段
1 数据生成
在模拟器中控制汽车在车道上航行,并且
2 训练
2.1 左右摄像机数据
对左右摄像机的图像进行矫正
views = ['left', 'center', 'right']
steering_correction = [.25, 0., -.25]
camera = np.random.randint(len(views))
image =mpimg.imread(data[views[camera]].values[i])
angle = data.steering.values[i] + steering_correction[camera]
2.2水平翻转
flip= random.sample(range(x.shape[0]), int(x.shape[0] /2))
x[flip] = x[flip, :, ::-1, :]
y[flip] =-y[flip]
2.3 垂直移动
tp =int(random.uniform(.325, .425) * image.shape[0])
bm =int(random.uniform(.075, .175) * image.shape[0])
image = image[tp:-bm, :]
2.4 随机阴影
r, j= image.shape[0], image.shape[1]
[x1, x2] = np.random.choice(j, 2, replace=False)
k = r/ (x2 - x1)
b =- k * x1
for i inrange(r):
c =int((i - b) / k)
image[i, :c, :] = (image[i, :c, :] *.5).astype(np.int32)
3 测试
用几种图像处理手段进行数据增强,再输入到网络中进行训练生成转向预测模型,然后将小车放在未训练过的场景下行驶。
三 结论
车能在未训练过的场景下正常行驶,经过数据增强后,模型的泛化性能得到了提升。