首页 > 其他分享 >论文理解【IL - BC】—— End to End Learning for Self-Driving Cars

论文理解【IL - BC】—— End to End Learning for Self-Driving Cars

时间:2022-11-22 10:35:09浏览次数:49  
标签:本文 End Driving BC 卷积 驾驶 使用 Alvinn 方法

文章目录

  • ​​1. 系统概览​​
  • ​​2. 数据收集 & 增广​​
  • ​​3. 网络结构​​
  • ​​4. 训练和测试框架​​
  • ​​5. 实验​​
  • ​​6. 总结​​
  • 前言:自动驾驶一直机器学习界的一个难题,这是由于其涉及到图像处理,输入维度很高。传统的做法是先用CV方法提取特征,然后再做自动驾驶,这是非常麻烦的(下图示例中,提取车道线作为特征)
  • 论文理解【IL - BC】—— End to End Learning for Self-Driving Cars_行为克隆

  • 我上次分享的文章 论文理解 —— An autonomous land vehicle in a neural network (Alvinn)首次尝试使用 End-to-End 方法做自动驾驶,这种方法借助神经网络自动提取特征,也就是从 image -> features -> action 变成了 image -> action。但由于其网络结构简单,特征提取能力不强,最终没有取得很好的效果
  • 随着深度学习的发展,出现了卷积神经网络CNN,特别适用于特征提取

卷积神经网络(CNNs)彻底改变了计算模式识别过程。在广泛使用CNNs之前,大多数模式识别任务是使用类似上文所说的人工编写的特征提取加分类器实现的。 CNNs的重大突破是可以从训练实例中可以自动学习特征。
当应用于图像识别任务时,CNNs方法特别强大,因为卷积运算能够捕获图像的2D特征。通过使用卷积内核扫描整个图像,相对于总操作数来说,只需要学习较少的参数。
虽然使用CNN学习已经商用了二十多年,但由于两个重要的发展,近年来才出现了爆炸式增长。首先,大容量储存变得廉价,诸如ImageNet大规模视觉识别挑战(ILSVRC)等大标签数据集现在可广泛用于训练和验证。第二,CNNs学习算法在大规模并行图形处理单元(GPU)上实现,高性能图形处理器也变得相对廉价,这两个领域的发展极大地加速了CNNs的学习和推理能力。

  • 2016年8月份,英伟达发表了本论文,提出一个新的 End-to-End 自动驾驶深度学习算法。这个方法其实和上面那篇Alvinn非常非常像,最大的区别就是换了网络结构(建议两篇对照读),得益于CNN强大的特征提取能力,其训练的模型不论是普通道路还是高速路,不论有道路标线还是没有道路标线都可以work,解决了上面文章泛化性能差的问题。本文方法的测试性能非常好,在16年自动驾驶研究火热时,是一篇影响很大的文章
  • 本文会从模仿学习的视角分析此文,不太关注端到端这一块

1. 系统概览

  • 给出本文自动驾驶系统的结构图,其和 Alvinn 基本没区别,就是一个摄像头变成三个摄像头了,然后加了一个SSD硬盘存数据,采集数据时和Alvinn一样,驾驶员一边开车一边采集,不过训练是离线进行的
  • 细节变化:
  1. 记录方向盘角度时不再记录方向盘转角,而是记录车辆转弯半径的倒数 论文理解【IL - BC】—— End to End Learning for Self-Driving Cars_自动驾驶_02 作为每个 imaged 的真实 action,使用车辆转向半径作为标记是为了使训练好的模型适用于各种尺寸的车辆,取倒数是为了避免车辆直行时转弯半径变成 论文理解【IL - BC】—— End to End Learning for Self-Driving Cars_深度学习_03
  2. 三个摄像头一个指向正前方,两个指向两边的斜前方,如下所示
  • 从模仿学习角度看,本文方法和 Alvinn 一样都是行为克隆方法。收集的数据被拆散成一堆 (image,action) 样本,然后用监督学习方法进行学习。区别在于 Alvinn 使用了一个浅层神经网络,而本文提出的 DAVE-2 方法使用了深度卷积神经网络

2. 数据收集 & 增广

  • 得益于深度卷积网络超强的特征提取能力,本系统收集的训练数据 “was collected by driving on a wide variety of roads and in a diverse set of lighting and weather conditions”,这样可以保证网络的泛化能力可以覆盖到各种驾驶环境
  • 和 Alvinn 一样,本文关注到行为克隆方法的级联错误问题,故需要收集大量从错误中恢复的样本。收集方法也和 Alvinn 一样,就是对摄像头图像做数据增广,先随机平移和旋转(DAVE-2 中这些扰动的大小是从正态分布中随机选取的。分布均值为零,标准差是人类驾驶员标准差的两倍),然后使用物理模型得出对应的方向盘转角。区别在于
  1. Alvinn 只对唯一的中心摄像头的图像进行旋转和平移;本文的 DAVE-2 方法使用两个偏置摄像头直接采集两个偏转角度图像,其他角度使用最接近的相机图像旋转得到
  2. Alvinn 使用一个二维物理模型,本文方法使用一个三维物理模型,并用空间坐标变换方法得到更精确的转向标签

3. 网络结构

  • 本文使用的深度卷积网络结构如下所示
  • 最下面的归一化层是硬编码的,在学习过程中不会变化。在网络模型中进行归一化可以使得归一化过程随网络架构调整,而且能用GPU加速处理
  • 卷积层被设计用来执行特征提取。通过总结一系列的实验得出的经验,卷积层的配置被调整为,前三层中采用2×2步长,5×5内核的卷积层,在后两层中采用以及3×3为内核大小的无步长卷积层,即strides=1,之后跟随五个卷积层与三个全链接层,最终输出转弯角
  • 作者试图将最后的三个全连接层用作方向盘控制器,但是实验表明端到端任务的深度网络中,各个层的功能很难严格地区分开来

4. 训练和测试框架

  • 使用三个摄像头收集数据进行训练

    损失用的是 MSE loss
  • 测试时仅适用中心摄像头(即正前方画面)预测动作

5. 实验

  • 作者首先使用模拟器进行实验,其结构如下所示
  • 论文理解【IL - BC】—— End to End Learning for Self-Driving Cars_行为克隆_04

  • 作者使用校准过车道中心的人类驾驶录像作为测试数据,视频的第一帧发送给 CNN 网络,网络给出的动作输入车辆动态模型计算出新位置,然后模拟器会修改测试录像的下一帧图像,使其看起来像是车辆在遵循 CNN 的转向命令而产生的位置,重复这个流程。
  • 模拟器记录偏离中心的距离(从汽车到车道中心的距离)、偏航和虚拟汽车行驶的距离。当偏离中心距离超过 1 米时,将触发虚拟人干预,这会重置虚拟车辆的位置和方向,以匹配原始测试视频对应帧的地面真实情况。作者假设每次人工干预需要 6 秒钟,使用下式计算自动驾驶比例
  • 论文理解【IL - BC】—— End to End Learning for Self-Driving Cars_模仿学习_05

  • 接下来作者进行了真实的道路试验,使用汽车自动转向的时间来衡量性能(此时间不包括从一条道路到另一条道路的车道变更和转弯)。作者选择了从他们在霍尔姆德尔的办公室到大西洋高地的一段典型驾驶路段进行实验,结论为自动驾驶时间达到了大约 98% 。他们还在花园州公园大道上行驶了 10 英里(一条有进出口匝道的多车道分车道高速公路)

6. 总结
  • 原文结论:我们通过经验证明,CNN能够学习车道和道路跟随的整个任务,而无需手动分解为路线或车道标记检测、语义抽象、路径规划和控制。从不到一百小时的少量训练数据就足以训练在各种条件下操控车辆,比如高速公路、普通公路和居民区道路,以及晴天、多云和雨天等天气状况。CNN模型可以从非常稀疏的训练信号(只有方向控制命令)中学到有意义的道路特征
  • 由于这篇文章讨论的是端到端自动驾驶任务,所以后面还有一些篇幅对神经网络内部进行了可视化分析,说明其确实能够有效地提取特征,本文主要关注 IL 角度,所以不再加以说明
  • 从 IL 角度看,本文的核心方法和1989年的Alvinn方法没有任何区别,其主要意义在于
    1. 本文说明了只要提供充足的数据,并且使用一些技巧限制学习者策略能够遇到的状态分布,是可以把行为克隆方法的准确度做得非常高的
    2. 限制学习者策略分布的技巧,就是在专家示范空间的边缘区域给出指向专家示范空间内部的动作,只要这个区域封闭地足够好,就能基本解决行为克隆的 mismatch 和 compounding error 问题




标签:本文,End,Driving,BC,卷积,驾驶,使用,Alvinn,方法
From: https://blog.51cto.com/u_15887260/5876709

相关文章

  • 论文理解【IL - BC】—— An autonomous land vehicle in a neural network
    标题:Anautonomouslandvehicleinaneuralnetwork发表:AdvancesinNeuralInformationProcessingSystems,1989(NIPS对应的期刊)文章链接:这篇文章1989年的,上古文章了属......
  • Entity Framework 6 Oracle DbConfiiguration
    EntityFramework6OracleDbConfiiguration不想配置EntityFramework6的App.Config文件时,要重写DbConfiguration,还要AppConfig当中的所有关于EntityFramework的所有配......
  • Failed to start end point associated with ProtocolHandler ["http-nio-8081"]
    FailedtostartendpointassociatedwithProtocolHandler[“http-nio-8081”]在运行springboot时出现了如上错误,在将application.yml-server-porter的数值从8081修......
  • 用JDBC操纵BLOB和CLOB数据
    在访问Oracle数据库,对Oracle的BLOB和CLOB进行操作的时候,当通过OracleJDBCDriver来调用的时,如下所例:DrivermyDriver=(Driver)Class.forName("oracle.jdbc.driv......
  • HTTP/2 stream 1 was not closed cleanly before end of the underlying stream
    报错日志leepandar@localhostant-design-vue-jeecg%yarninstallyarninstallv1.22.19[1/4]......
  • Databend 在 MinIO 环境使用copy 命令 | 新手篇(3)
    Copy命令是Databend批量加载|卸载数据的灵魂工具。目前copy可以做到单机内按CPUcore数并发,马上就支持按集群内并发。Copy可以结合bucket和内置的stage使用......
  • Unload data from Databend | 新手篇(4)
    上篇我们讲了怎么利用copy命令借助于Stage把数据加载到Databend中,Databend致力于构建一个完整的数据湖,也需要支持用户把数据从Databend中取走,这里Databend给三......
  • ABC262F
    ABC262F*2334卡手的构造题,不是很难想,主要是细节比较多。题意给定一个排列\(p\)。你可以最多执行\(k\)次操作。删除一个数。将\(p\)中末尾的数移到开头。找出......
  • centos7安装glibc_2.28
    centos7默认的gcc版本是4.8.5,无法编译高版本的glibc2.28,需要升级到gcc8.2版本注:gcc高版本和glibc2.28不兼容##查看自带默认的glibcstrings/lib64/lib.so.6|grep......
  • 用bc实现国密SM3WithSM2
    importorg.bouncycastle.asn1.ASN1EncodableVector;importorg.bouncycastle.asn1.ASN1Integer;importorg.bouncycastle.asn1.ASN1OctetString;importorg.bouncycas......