Nvidia GTC上Nvidia 老大黄仁勋介绍了他们自家的无人驾驶汽车,这个汽车的无人驾驶技术和以往的方法不一样,完全采用神经网络。
次周,Nvidia发表了他们的文章来介绍这个工作。和以往需要分感知、检测、决策控制等分开的无人驾驶不同,Nvidia试图仅通过摄像头看到的图像来完成这件事情(当然看完论文其实Nvidia这次只学习控制方向盘,而不考虑速度和路径等等因此简单不少)。
在GPU撑起深度学习之后,NVIDIA这次的动作自然引起高度关注,这里给大家细致的介绍下NVIDIA的无人驾驶是如何完成的。
一、干货摘要
模型:CNN
Input:raw pixels from a single front-facing camera
Label: human steering angle
训练工具:NVIDIA DevBox + Torch 7
预测:NVIDIA DRIVE PX + Torch 7
性能:30 FPS(Frames per second)
数据规模:72小时的人类驾驶数据
结果:实际路测,可以达到98%的自动驾驶程度,10公里内无需人工介入
特点:
1、end2end,对马路标线和路面条件无要求
2、中间产出:仅依靠human steering angle作为训练信号,就可以自动学习detecting路面形状特征
二、相关介绍
DAVE:小时级别的人类在相似道路上的驾驶数据,包括左右两个cameras以及对应的steering commands from a human operator
DAVE-2: 1989,受启发于Autonomous Land Vehicle in a Neural Network(ALVINN),end2end NN can indeed steer a car on public roads. NN采用的全连接的网络(NVIDIA这次用的是CNN)
DAVE-2的问题是稳定性不够,尤其是在复杂环境中平均只能走20米
三、NVIDIA系统
steering command signal的表示:1/r ,r代表转弯半径,好处是忽略掉汽车自身的几何形状
图像数据:从视频中采样得到
这里有个trick,人类只输入的是正确的样本,那么怎么让计算机面对错误的环境来做调整呢?很简单的trick,在车上面再安装两个摄像头,不过这两个摄像头的位置不在正中间,那么这两个摄像头看到的样本就是错误的。其他的偏移中间及旋转则可以根据3d变化来模拟出来。那么对应的偏移及旋转的控制量也可以计算出来。这样就有了一一对应的样本了。
那么这里我们也应该看到,输出是很简单的,就是汽车驾驶的轮子的角度。并没有速度控制。这一定程度上大大简化了训练的要求。
预测的时候仅需要中间的camera采样的图像数据。
数据规模:72小时的人类驾驶数据(100小时以内的数据足够训练汽车在不同的路况环境下行驶);steering signal数据十分稀疏。
Loss = MSE
网络结构:
1layer:硬编码的图像norm层,不需要学习
2-6layer: CNN卷积层。前3层带stride,2*2和5*5的kernel;后2层无stride,3*3的kernel
7-9layer: 3个FC层
训练数据选择的细节:
1、针对性的选择训练数据。为了让CNN学习巡线,只选择按线驾驶的视频,丢弃其他的。对图像进行10 FPS的采样。数据里对弯曲的路段保留了比较高的比例。
2、附加的偏移和旋转部分——为了教会网络学习如何从错误的位置恢复回来。从正态分布中随机,0均值,方差是人类驾驶员的方差两倍
四、评估
指标:系统自动驾驶时间占行驶总时间的比例。当系统驾驶的汽车偏离中心线大于1m时,人工介入干预驾驶6s来完成接管和行驶回中心。自动化指标autonomy公式:
结果:实际路测,可以达到98%的自动驾驶程度,10公里内无需人工介入。
五、TODO
1、鲁棒性和如何衡量鲁棒性的方法
2、可视化展示网络中间层feature map
论文地址:
https://images.nvidia.com/content/tegra/automotive/images/2016/solutions/pdf/end-to-end-dl-using-px.pdf