无人车是怎样一步步学会开车的?

2017 年 12 月 26 日 MOOC
| 全文共2106字,建议阅读时3分钟 |

转载自公众号:量子位
微信号:QbitAI
原作:Marty Jacobs
编译:安妮 


无人车到底是怎样一步一步学会开车的?


与人类用双眼去观察路面、用手去操控方向盘类似,无人车用一排摄像机去感知环境,用深度学习模型指导驾驶。大体来说,这个过程分为五步:

  • 记录环境数据

  • 分析并处理数据

  • 构建理解环境的模型

  • 训练模型

  • 精炼出可以随时间改进的模型

如果你想了解无人车的原理,那这篇文章不容错过。


记录环境数据


一辆无人车首先需要具备记录环境数据的能力。


具体来说,我们的目标是得到左右转向角度的均匀分布。这倒也不难操作,可以以顺时针和逆时针方向在测试场地内绕圈的方式实现。这种训练有助于减少转向偏差,避免长时间驾驶后汽车从道路一边慢慢漂移到道路另一边的尴尬情境。


此外,以慢速(例如每小时10英里)行驶也有助于在转弯时记录平滑的转向角,在这里驾驶行为被分类为:

  • 直线行驶:0<=X<0.2

  • 小转弯:0.2<=X<0.4

  • 急转:X>=0.4

  • 恢复到中心

其中,X为转向角,r为旋转半径(单位为米),计算转向角的公式为X=1/r。上面提到的“恢复到中心”在数据记录过程中很重要,它帮助车辆学会在即将撞上,马路崖子时回到车道中心。这些记录数据保存在driving_log.csv中,其中每一行都包含:

  • 文件路径到镜头前中央相机图像

  • 文件路径到前左相机图像

  • 文件路径到前右相机图像

  • 转向角

在记录环境数据的过程中,我们需要记录约100000个转向角的图像,以便提供足够的数据训练模型,避免因样本数据不足导致的过拟合。通过在数据记录过程中定期绘制转向角直方图,可以检查转向角是否为对称分布。



分析处理数据


第二步是为构建模型分析和准备刚刚记录的数据,此时的目标是为模型生成更多的训练样本。


下面这张图片由前中央相机拍摄,分辨率为320*160像素,包含红色、绿色和蓝色的channel。在Python中,可以将其表示为一个三维数组,其中每个像素值的范围在0到255之间。



司机视线以下的区域和两边的车道标志一直是自动驾驶技术中研究的重点。这两部分可以使用Keras中的Cropping2D裁剪图像,减少输入到模型中的噪声。


我们可以用开源的计算机视觉库OpenCV从文件中读取图像,然后沿垂直轴翻转,生成一个新的样本。OpenCV非常适合自动驾驶汽车用例,因为它是用C++语言编写的。像倾斜和旋转这样的其他图像增强技术,也有助于产生更多的训练样本。


此外,还需要通过乘以-1.0翻转其转向角。

之后,可以用Numpy开源库将图像重新塑造成一个三维数组,方便下一步的建模。


构建理解环境的模型


图像数据搞定后,我们需要为无人车构建理解环境信息的深度学习模型,从记录的图像中提取特征。


具体来说,我们的目标是将包含153600像素的输入图像映射到包含单个浮点值的输出。英伟达之前提出的模型的每一层都提供了特定的功能,作为基础架构效果应该不错。


英伟达模型相关论文地址:

https://arxiv.org/pdf/1604.07316v1.pdf


之后,我们需要将三维数组规范化为单位长度,防止模型中较大的值偏差。注意我们将其除以255.0,因为这是一个像素的最大可能值。


还要适当减少人类视野以下的车前场景和车前上方图像的像素,以减少噪音。

之后,我们需要将车道标记等三维数组进行卷积,提取关键特征,这些信息对于预测转向角至关重要。

我们想让开发的模型能够驾驭任何道路类型,因此需要用dropout减少过拟合。

最后,我们需要将转向角输出为float。


训练模型


构建了模型后,我们需要训练模型自己学习开车了。


从技术角度上讲,现阶段的目标是尽量准确地预测转向角。在此,我们将损失定义为预测和实际转向角之间的均方误差。


从driving_log.csv中随机抽取样例减少顺序偏差。


可以将样本的80%设为训练集,20%设为验证集,这样我们就能看到模型在预测转向角时的精确程度。

之后,需要用Adam(自适应矩估计)将平均平方误差最小化。与梯度下降相比,Adam的一大优势是借用了物理中的动量概念收敛到全局最优值。

最后,我们用生成器来适应模型。由于图像数量庞大,我们无法一次性将整个训练集输入到内训中。因此,需要用生成器批量生产图像以进行训练。


随时间精炼模型


完善模型是我们的最后一步,需要让模型的准确性和稳健性随着时间的推移而提高。我们的实验采用不同的体系结构和超参数,观察其对减少均方误差的影响。什么样的模型最好?不好意思,这个问题没有一个统一的答案,因为大部分改进都需要牺牲其他的一些东西,比如:

  • 用更好的图形处理单元(GPU)减少训练时间,需要注意这样会增加成本

  • 通过降低训练时间来降低学习速度,增加最佳值收敛的概率

  • 通过使用灰度图像减少训练时间,需要注意这样会损失红色、绿色和蓝色通道提供的颜色信息

  • 通过较大的batch size提高梯度估计的准确性,这会以牺牲使用的内存为代价

  • 每个阶段都选用大量样例来减少损失的波动

概览全文,其实可以发现,自动驾驶汽车开发的过程,也是我们了解计算机视觉和深度学习的优势和局限性的过程。


我坚信,未来是属于自动驾驶的。


喜欢我们就多一次点赞多一次分享吧~


有缘的人终会相聚,慕客君想了想,要是不分享出来,怕我们会擦肩而过~

《预约、体验——新维空间站》

《【会员招募】“新维空间站”1年100场活动等你来加入》

有缘的人总会相聚——MOOC公号招募长期合作者

《【调查问卷】“屏幕时代,视觉面积与学习效率的关系“——你看对了吗?》


产权及免责声明 本文系“MOOC”公号转载、编辑的文章,编辑后增加的插图均来自于互联网,对文中观点保持中立,对所包含内容的准确性、可靠性或者完整性不提供任何明示或暗示的保证,不对文章观点负责,仅作分享之用,文章版权及插图属于原作者。如果分享内容侵犯您的版权或者非授权发布,请及时与我们联系,我们会及时内审核处理。


了解在线教育,
把握MOOC国际发展前沿,请关注:
微信公号:openonline
公号昵称:MOOC

 

登录查看更多
0

相关内容

【实用书】学习用Python编写代码进行数据分析,103页pdf
专知会员服务
190+阅读 · 2020年6月29日
一份简明有趣的Python学习教程,42页pdf
专知会员服务
76+阅读 · 2020年6月22日
【牛津大学&DeepMind】自监督学习教程,141页ppt
专知会员服务
177+阅读 · 2020年5月29日
【干货书】R语言书: 编程和统计的第一课程,
专知会员服务
107+阅读 · 2020年5月9日
听说你还没读过 Bert 源码?
AINLP
7+阅读 · 2019年8月7日
OpenCV 4 系统化学习路线图与教程
计算机视觉life
20+阅读 · 2019年3月24日
从零开始一起学习SLAM | SLAM有什么用?
计算机视觉life
18+阅读 · 2018年9月17日
什么是深度学习的卷积?
论智
18+阅读 · 2018年8月14日
零基础搞懂强化学习?这份视频攻略不算迟
AI研习社
6+阅读 · 2018年4月25日
学员笔记||Python数据分析之:numpy入门(一)
七月在线实验室
7+阅读 · 2017年9月28日
图像识别 | 道路识别的自动驾驶算法基本原理
沈浩老师
6+阅读 · 2017年5月12日
Meta-Learning with Implicit Gradients
Arxiv
13+阅读 · 2019年9月10日
Conditional BERT Contextual Augmentation
Arxiv
8+阅读 · 2018年12月17日
SlowFast Networks for Video Recognition
Arxiv
19+阅读 · 2018年12月10日
Arxiv
22+阅读 · 2018年8月30日
VIP会员
相关资讯
听说你还没读过 Bert 源码?
AINLP
7+阅读 · 2019年8月7日
OpenCV 4 系统化学习路线图与教程
计算机视觉life
20+阅读 · 2019年3月24日
从零开始一起学习SLAM | SLAM有什么用?
计算机视觉life
18+阅读 · 2018年9月17日
什么是深度学习的卷积?
论智
18+阅读 · 2018年8月14日
零基础搞懂强化学习?这份视频攻略不算迟
AI研习社
6+阅读 · 2018年4月25日
学员笔记||Python数据分析之:numpy入门(一)
七月在线实验室
7+阅读 · 2017年9月28日
图像识别 | 道路识别的自动驾驶算法基本原理
沈浩老师
6+阅读 · 2017年5月12日
Top
微信扫码咨询专知VIP会员