导读:深度学习技术经过近几年井喷式的发展,在很多领域都得到了广泛的应用。在自动驾驶系统中,深度学习技术也起到了至关重要的作用,同时也面临着非常多的挑战。我们一直在探索,在一个安全、稳定的自动驾驶产品中,深度学习技术应该有着怎样的作用边界,又如何能最好地发挥其优势。本次分享的主题为深度学习技术在自动驾驶中的应用与挑战,主要包括:
深度学习技术
端到端:从感知到控制
深度学习的特点
应用策略
01 深度学习技术
深度学习技术在2012年开始爆发,由AlexNet在ImageNet数据集上达到了一个很高的分类准确率,横扫各种CV、NLP任务,在强化学习领域也大展身手,尤其擅长玩游戏,比如deepmind最近在研究打星际争霸。右边是各种网络图,大家可以参考文末的链接。
02 端到端:从感知到控制
16年的时候,英伟达研究了end to end神经网络,左侧输入左中右三个Camera的image,直接通过CNN输出转向的指令。如demo截图中,测试人员把手伸出了天窗,表示他没有操控车辆,然后车辆自动实现转向。不过这种方式存在2个隐患:
① 因为是end to end 如果出现问题,完全不知道是哪里出了问题,很难去校正模型。
② 对于转向这个指令,需要考虑的因素非常多,一些微小的场景变化就会引发不同的转向指令(如路上多了一个石块),因此,必须覆盖到所有的情况,才可以把这个模型训练的非常好,这需要海量的数据。
03 深度学习的特点
优势:
自主挖掘数据中存在的特征和模式,大幅降低人工特征工程的需求
对于定义清晰的问题,有较强的可扩展性(加数据或数据增强)
局限性:
可解释性差,可能会“放飞自我”,不太可控
算力要求较高
04 应用策略
在要求很高稳定性和安全性的自动驾驶应用中,如何发挥深度学习的优势,以及规避深度学习的弱点,我们总结了几点应用策略,这里和大家分享下:
1. 尽量应用于定义清晰的基本任务
基本任务,是指只需要回答“是什么”或者“在哪”的任务。定义清晰,是指有明确的目标或者监督信息,在强化学习语境中,就是有明确的reward function。如CV中的目标检测、图像分割等。下面分享下应用实例:
① 图像中的车道检测
Demo点击原文查看
Demo是我们用分割模型做的Ego lane drivable area segmentation;上图右侧是我们做的instance level lane marker segmentation,网络结构如图所示,它是一个encoder decoder based,然后做一个segmentation branch和一个embedding branch,最后将2个结果合起来。
② 图像中的障碍物检测
上图是一些比较有挑战的场景:拥挤的路况、远处的障碍物、雨天、穿过高架桥等。障碍物检测比较成熟,这里不再细讲,常用的算法有:
Anchor based:YOLO v1,v2,v3/SSD/Faster RCNN
Anchor free:Centernet/FoveaBox
2. 多方法融合,弥补单一模型错误,覆盖长尾场景
在实际应用中,目标检测模型难免会产生误检和漏检,如左图中的皮卡和卡车很明显就被漏掉了。另外,对于训练集少见或没见过的特殊场景,深度神经网络往往无能为力,一旦出现这种情况,往往非常危险。对应的,我们的思路是:
① 结合其他任务模型,辅助降低漏检率
比如,有另外的一个模型可以识别出可行驶区域(也就是路,除了路以外的都是障碍物),再加上我们的目标检测,就可以对之前的案例进行弥补,如上图所示。
② 结合其他传感器,多传感器融合
另一种更常用,更安全的方法就是激光雷达,进行多传感器融合,如将激光雷达投影到image,可以很轻松的建模出可行驶的道路和障碍物。
3. 拆分任务,增加模型的可解释性和可控性
将end2end模型任务拆分成更加基本定义、更加清晰的多阶段子任务,增加整体任务的可解释性,减轻模型的学习负担。同时也更加方便地利用其他算法和规则对深度学习模型的输出结果做限制,防止其“放飞自我”。
① 自车行驶路径参考线:
我们在做Planning时,我们需要做一个自己车本身轨迹的参考线,以其为参考生成最终的轨迹,并且做一些速度的规划。如果我们没有高精地图,我们可能会采用E2E approach的方法,感知到一张图片之后利用deep CNN直接生成参考轨迹(如上图最右侧),这样单独的参考线通常是不能用的。所以我们需要把任务进行拆解。
拆解:
- 车道识别+车辆跟踪:先识别车道再识别车
- 利用车道与车辆信息拟合路径:把车道和车放入场景中,再利用车的朝向、轨迹、速度分布以及车道线的几何形状拟合出最终的路径参考线。
这是一个更可控的方案。
② 其他车辆轨迹预测
在学术界有一些E2E approach的方法,利用深度学习模型直接预测车辆轨迹,从过去的轨迹直接预测出未来的轨迹。
我们认为更好的方式,还是进行拆分:
- 意图预测(横向、纵向),利用RNN、CNN先做一些意图预测(左转、右转或者直行),纵向就是匀速、加速或者减速,做这种简单的意图分类,将这个问题的维度缩小。
- 然后,利用车辆(如动力学)模型、车道信息生成平滑预测轨迹。
最后,我们还在和机器一起学习成长。今天的分享就到这里,谢谢大家。
05 参考资料
- https://deepmind.com/blog/article/alphastar-mastering-real-time-strategy-game-starcraft-ii
- https://en.wikipedia.org/wiki/Deep_learning
- http://ml.world/2016/09/neural-network-zoo/
- End to End Learning for Self-Driving Cars
- Towards End-to-End Lane Detection: an Instance Segmentation Approach
- An Empirical Evaluation of Generic Convolutional and Recurrent Networks for Sequence Modeling
转载自公众号: DataFunTalk
阿里巴巴开源大数据技术团队成立Apache Spark中国技术社区,定期推送精彩案例,技术专家直播,问答区近万人Spark技术同学在线提问答疑,只为营造纯粹的Spark氛围,欢迎钉钉扫码加入!
对开源大数据和感兴趣的同学可以加小编微信(下图二维码,备注“进群”)进入技术交流微信群。