Nvidia端到端深度学习应用自动驾驶

转载自 http://blog.csdn.net/c602273091/article/details/53946217

转载请注明出处:http://blog.csdn.net/c602273091/article/details/53946217

intro

Nvidia在做自动驾驶的时候,思路和传统思路果然有些差异。比如Google使用的是激光雷达+摄像头+IMU+惯导系统+GPS等等。Nvidia做法是采取end2end的方法,就是直接从摄像头的像素->汽车的控制。就是把采集的图片作为输入,汽车的轮子的角度作为输出。没有了特征提取,语义分析等等过程,直接指向最终要的输出。这个思路很简单,效果从视频Nvidia自动驾驶视频 上来看在雨天,雪天,无车道线环境下行驶还算是流畅。但是可以发现这里的环境都是相对静态环境,变数很小。如果是在城市中行驶,有红绿灯、人群等等情况的时候,效果就不能保证了。

我觉得这个思路是比较新颖的,但是我觉得从安全性来看,以及面对更加复杂的状况,以及更多的语义信息需要加入其中,Nvidia做的显然还有很远的路要走。当然,Nvidia做这个对推广其自家的Nvidia DevBox,Nvidia DRIVE PX有不小的推动作用。

我觉得在自动驾驶这个方面,使用深度增强学习可以有不错的效果。然后再加上一些额外的硬件保障系统,加入地图,IMU等等,那么其效果或许可以媲美激光雷达吧。我感觉Nvidia的做法把自动驾驶弄得一下子不如以前那么高大上了,看CMU和Standford在DARPA上的自动驾驶的车的论文就知道自动驾驶的坑很深。

其实Nvidia是使用CNN做的是车在路上走不撞车,之前为了实现这个,可能会进行车道线检测、图片分割、路径规划和控制。具体要往某个目的地走,它没有涉及。

Implementation

这里写图片描述
以上这个系统叫做DAVE-2,DAVE其实是(DARPA Autonomous Vehicle的缩写,无人车比赛最早就是DARPA搞出来的)。

整个系统采用的是三个摄像头:
这里写图片描述

图片被送入CNN,然后计算可能的驾驶指令。然后把这个可能的指令和标记进行对比来更新CNN的权值(就是BP)。Nvidia使用的是Torch 7进行训练。

那么这里有个trick,就是我们人类只输入的是正确的样本,那么怎么让计算机面对错误的环境来做调整呢?很简单的trick,在车上面再安装两个摄像头,不过这两个摄像头的位置不在正中间,那么这两个摄像头看到的样本就是错误的。其他的偏移中间及旋转则可以根据3d变化来模拟出来。那么对应的偏移及旋转的控制量也可以计算出来。这样就有了一一对应的样本了。那么这里我们也应该看到,输出是很简单的,就是汽车驾驶的轮子的角度。并没有速度控制。这一定程度上大大简化了训练的要求。

当网络训练好了以后,就是用中间的摄像头的结果输入到CNN进行计算输出给汽车的命令。
这里写图片描述

Data for Training

训练数据一共有72个小时,每小时30f。包含了各种天气和各种路况。这个数据集看来收集得还不错。想要的同学点击这里下载:数据下载

Network

训练的网络的loss function是使用MSE。一共有9层,归一化层+5层卷积+3层全连接。输入的数据是YUV。
这里写图片描述

在选取训练数据的时候,会把有车道线的部分选上。然后每秒选择10f,因为选太多会有很多重复。

对于车处于比较差的位置的时候,会人为地给它加入一些旋转和偏移作为矫正。再做训练。

Simulation

在真车上路之前需要进行软件模拟。
整个模拟的框架如下:
这里写图片描述

Test

测试方面,既有仿真器的测试和真车的测试两部分。

Resource

Nvidia的博客: https://devblogs.nvidia.com/parallelforall/deep-learning-self-driving-cars/
论文: 论文下载
代码: 代码实现
别人的总结: http://blog.csdn.net/songrotek/article/details/51302515

猜你喜欢

转载自blog.csdn.net/qq_43222384/article/details/89542758