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