新智驾按:作者Kevin Zhong,博世辅助驾驶研发工程师。原文载于知乎,雷锋网获授权转载。
深度学习在无人驾驶领域主要用于图像处理,也就是在摄像头上。当然也可以用于雷达的数据处理,但是基于图像极大丰富的信息以及难以手工建模的特性,深度学习能最大限度的发挥其优势。
现在介绍一下全球摄像头领域的巨擘,以色列的Mobileye是怎么在他们的产品中运用深度学习的。
深度学习可以用于感知,识别周围环境,各种对车辆有用的信息;也可以用于决策,比如AlphaGo的走子网络(Policy Network),就是直接用DNN训练, 如何基于当前状态作出决策。
环境识别方面,Mobileye把他们识别工作主要分为三部分:
物体识别;
可行驶区域(Free Space)检测;
行驶路径识别。
物体识别
一般的物体识别是这样的:
有一个长方形框能识别出来车在哪里,但是Mobileye识别出来是这样的:
以及这样的:
很明显的区别就是Mobileye可以实现非常准确的车辆正面及侧面的检测,以及完全正确的区分左边侧面以及右边侧面(黄色和蓝色)。
上图两种检测结果的信息量是完全不同的:
这样出众的结果,对于较近距离的车,用其他基于几何的方法,多跟踪几帧,可能可以做到接近的效果,但是留意远处很小的车,结果也完全正确,这就只可能是深度学习的威力了。
虽然Mobileye创始人兼CTO常发论文共享一些技术,但在车辆识别怎么建模,神经网络可以输出这么精确带方向的包围框(Bounding box),他只是微微一笑,说这里面有很多“tricks”。
可行驶区域检测
深度学习以前的可行驶区域检测,有两种方法:
结果是这样的:
绿色部分是可行驶区域检测,看着还不错对不对? 但是注意左边的绿色部分涵盖了马路“倒鸭子”(注:路边石)以及人行道部分,因为“倒鸭子”也就比路面高十厘米左右, 靠立体视觉是很难跟马路区分开来的。
而传统的图像分割也很困难,因为局部特征上,“倒鸭子”上和路面的颜色极其接近。区分二者需要对环境的综合理解。
自从有了深度学习可以做场景理解( Scene Understanding )之后,这个问题终于被攻克了:
绿色部分还是可行驶区域,马路右边的路肩跟路面的高度相差无几,颜色也是一模一样,用立体视觉的方法不可能区分开来。
不仅仅可行驶区域的边界准确检测出来,连为什么是边界的原因也可以检测出来:
红色表示是物体跟道路的边界,鼠标位置表示的是Guard rail(护栏),而上一张图应该是Flat。
这样在正常情况下知道哪些区域是可以行驶的,而在紧急情况下,也可以知道哪里是可以冲过去的。当然,相较于第一部分,这一部分的原理是比较清楚的,就是基于深度学习的场景理解。
学术界也有蛮不错的结果,如下图(Cambridge的工作),路面跟“倒鸭子”就分的很好(蓝色跟紫色):
行驶路径检测
这一部分工作要解决的问题主要是在没有车辆线或者车辆线状况很差的情况下,汽车怎么驾驶的问题。如果所有的路况都如下图所示,那当然很完美,但是由于路况或者天气,有些时候车辆线是很难检测到的。
深度学习为此提供了一个解决办法。我们可以用人在没有车道线的路况下驾驶的数据来训练神经网络,训练好之后,神经网络在没有车道线的时候也能大概判断未来车可以怎么驾驶。
这一部分原理也是比较清楚的,找一个人驾驶,把整个驾驶的过程摄像头的录像保存下来,把人驾驶的策略车辆的行驶路径也保存下来。用每一帧图片作为输入,车辆未来一段时间(很短的时间)的路径作为输出训练神经网络。
结果如下,可以看到神经网络提供的行驶路径基本上符合人类的判断:
更极端的情况:
绿色是预测的行驶路径。没有深度学习,这种场景也是完全不可能的。
当然,不能完全依靠神经网络来做路径规划,Mobileye是综合传统的车道线检测、上述提到的场景分割检测到的护栏等、这一部分的神经网络输出等等,做信息融合最后得到一个稳定、完美的行驶路径。