要解决这个问题,首先要了解我们需要面对最大的敌人是什么。从我个人角度来看,提升ADAS系统的识别精度面对的最核心的一个挑战——交通环境的不可控。
现在无人驾驶行业里落地比较早的是在限定环境下的无人驾驶或者自动驾驶。而对于在ADAS这个行业里边,我想我们不得不面对的一个需求——全天候下的驾驶辅助。
所以对于ADAS产品,我们不仅要能够在高速公路这种工况良好的情况下有良好的表现(实际上在这些相对简单的工况,现在的识别技术已经能够非常好地满足ADAS对感知的需求)还需要能够在相对复杂的工况下有良好表现,比如说在城市拥堵环境里边。这种情况下,我们不得不面对非常严重的遮挡,同时有很多交通目标,而它们也不是完全按照秩序去运动的,比如说它可能在非机动车道里,在机动车道里边会有逆行的非机动车等。国内交通基础设施建设更新换代很快,所以有些时候标志线、车道线或各种标志牌等存在一些迭代问题,比如说我这个图像里边那有红色的标识线,还有白色的标识线,那我到底要遵从哪个呢,对于人来讲都很难去判断,更不要说让电脑自动去判断。
我们还需要额外考虑特殊场景(corner case),特殊场景的可怕之处在于是你不可预期的。在你碰到了之前,你完全想象不到有可能会碰到什么样的场景。这张照片是我们上个月在新疆出差的时候,在一条省道上碰到的情况。我们在省道上突然间碰到了一大群羊,羊群把整个省道完全堵死,非常缓慢地在我的车子两边通过,前前后后花了差不多10分钟时间。完了之后我问了一下牧羊人,他说整个羊群有2600只羊。
所以我认为提升ADAS的识别精度最关键的一点就是如何能够在复杂的工况下保持高质量的达到前后装要求的识别精度。
深度学习和大数据对提升ADAS识别精度的帮助
从我们过去的经验来看,深度学习和大数据是帮助我们在复杂工况下提升ADAS识别精度的两个重要作用手段。接下来我将从这两方面跟大家展开来做个报告。
相信进到这个群,参与到我们今天这个活动的朋友对深度学习(Deep Learning)的概念不会陌生,因为深度学习在过去几年实在太火了。我觉得在这一波人工智能的浪潮里非常重要的一个推手就是深度学习技术的演进。
互联网上有这样一张非常有意思的图片。从不同角度来看,从事深度学习研究的研究生在大家心目中的一个定位形象。我们可以看出来从事人工智能,特别是从事深度学习的相关从业者,在大家眼里都有一个非常高大上的形象。对于深度学习,大家是一种不明觉厉的感觉。实际上,这个领域也确实汇聚了一批非常优秀的人才。这让我想到了上个世纪初在量子理论建立初期也有同样的盛况,在一个相对短的时间段里,有一系列非常漂亮的理论被提出来,当然也存在大量的争论,分成两个派系。正如此刻深度学习在快速发展一样,玩家众多,无论是软硬件的公司,还是创业公司或者研究机构。
这张图片是上个世纪一个非常著名的会议,叫第五届索尔维会议。这张照片也特别有名,这里边汇聚了一票大咖,像爱因斯坦、波尔、波恩、薛定谔、居里夫人、狄拉克、德弗洛伊、普朗克等这些大咖。所以有一种说法,这个照片里汇聚了当时世界上2/3的智慧,而回到我们现在深度学习的时代,同样的,在深度学习这个领域里边也聚集了一大帮非常聪明的脑袋,优秀的科学家、工程师都在从事着深度学习,无论是从事相关的理论,实验或者相关的研发工作。
在学术界有一个很出名的网站叫arxiv.org(收录科学文献预印本的在线数据库),在我读博士的时候它还没有那么的火。但现在我们可以看一下,9月14号这一天,计算机视觉领域就有18篇新的工作被抛出来,而这18篇里边有接近70%的工作都是和深度学习相关的,为什么大家现在迫不及待地要把工作在发表之前就挂到arxiv上呢?因为在每一个方向都有大量的人才在从事类似的研究,有可能你花了六个月时间做出来的模型,在投稿的前几天,你发现这个工作已经被别人提前挂到了aixiv上。在工业界也是类似的,有可能你花了三个月或者六个月做出来一个东西,在产品化的过程中,你发现同样一个技术已经被你的友商提前
6
推出了产品,这都是比较正常的事情。所以对于人工智能特别是深度学习这个领域的从业者来讲,现在的这个时代是最好的时代,也是最坏的时代。
深度学习历史回顾
接下来,我简要地和大家一起回顾一下深度学习的发展简史。深度学习最早可以追溯到上个世纪40年代,它是由一位心理学家和一位数理逻辑学家提出来的,他们最早把神经网络作为一个计算机模型的理论给提出来,这已经是很早的事情了。
到了1957年,康奈尔大学教授Frank Rosenblatt,提出了感知机(perception),他是受到了树突向轴突传导的启发,并且采用这种方式来进行数学建模。从现在的观点来看,感知机实际上是一个二分类的学习算法,作为一个线性分类器,这样一个单层感知机,确实可以看作一个最简单的神经网络。但感知器的学习算法,对于非线性的问题是没法解决的,它是没法收敛的,这里边比较有名的就是布尔代夫里的异或问题。
正因为这点它被人工智能开山祖师爷Marvin Minsky教授,Marvin Minsky是MIT著名的AI实验室奠基人,同时也是图灵奖得主。他在上个世纪60年代对神经网络宣判一个死刑,最主要的理论依据就是这个技术连最简单的异或问题都没法解决,因此它是没有价值的。也正是因为Marvin Minsky的这个表态,于是神经网络进入了第一次的寒冬。
7
到了1980年,日本人Fukushima提出一个新的感知机,紧接着我们深度学习领域的一个大神Hinton,他在Nature上发表了非常著名的反向传播算法。而Hinton的工作里,提供了一种适用于多层感知器的反向传播算法,并且采用了Sigma函数来进行非线性映射,他的贡献是有效解决了非线性分类的问题。
而紧跟着我们深度学习的另外一个大神Yann LeCun,他也出场了,他在1989年的时候提出了卷积神经网络的开山之作,其中用到了一个5×5的卷积盒,这样一个CNN的原型被用来做手写数字识别,并成功的被美国邮局应用于邮政编码的自动识别。
尽管早期的深度神经网络工作在一些具体应用上得到了不错的效果,但是它仍然存在一些硬伤。其中有两个是比较大的。第一个是非凸问题,既然是非凸,带来的一个问题是它会收敛在局部最优,但可能在全局里面是一个比较差的结果;第二点是DP算法的梯度消失问题,因为在梯度向后传递的过程中,由于Sigma函数的饱和特性,所以后传梯度本身就比较小,而往前传递的过程中误差就会几乎为零。因此它没法保障对全程的一些参数进行有效的学习,所以正是基于这两点,深度学习在2000年左右又是进入了第二次寒冬,一直到2006年。
8
很多人认为2006年是深度学习的元年,因为在这一年Hinton提出了一种方式能够比较有效地去解决梯度消失问题,采用无监督的训练加微调的方式来进行。到了2010年时,又有一种新的突破性技术被提出来,基于整流线性单元,它能够非常有效地抑制梯度消失问题。
2012年,深度学习进入了一个爆发期,它的拐点是Hinton在2012年为了证明深度学习的muscle,参加了ImageNet这个图像识别比赛,这个比赛数据集中的数据量是超过百万张图像的,那么Hinton他们基于卷积神经网络构建了Alexnet。不仅得到了第一名,而且在指标Error rate(错误率)上,是碾压性的优势。我们从表中可以看到2012年深度学习的Error rate指标值是0.15,而第二名是0.26,所以它领先了第二名10个点。所以从2012年之后,一直到2017年我们可以看到整个的ImageNet全部进入了深度学习的天下,Error rate指标也从0.15降到了0.02。我们可以看到右下角的图片,整个深度神经网络架构深度也越做越深,从最开始的8层、19层、22层到150多层。
深度学习与传统方法的比较
从架构上来看,深度学习和传统机器学习的方法相比还是有比较明显的区别的。对于传统的方式,在整个模型架构的过程中,对于前沿知识要求得更高,假如我有了一百万个这样
9
的数据,那之后我需要根据经验去对数据做一些预处理,然后我需要基于这个问题,通过对实际应用场景的理解以及结合实际的需求去设计一些特征。但一直到现在仍然没有一种万金油的Feature,对于各种不同的任务,对于目标检测也好,目标识别也好,或者对于人,对于车都能够通吃,没有这样一种Feature。那对于人脸、人体,我们需要使用不同的特征。而这些特征的设计需要工程师或者科学家根据经验和对问题的了解来进行的。以及接下来采用什么样的分类器,也需要去做一些人工的设计。
从这个角度可以看出来,传统的方法对于整个开发人员的要求会更高,它的门槛也更高一些。而深度学习把整个过程做了简化。这个时候开发人员可能更多的是去做网络结构的设计,有了数据和网络结构,对于特征的选择、抽取以及分类器的选择,整个过程都是有网络结构根据数据自动去完成的。所以从这个角度来讲,深度学习在一定程度上降低了做视觉感知和图像处理的门槛。
通过神经网络,我们可以从图像最底层的像素级别通过高频低频的特征进一步地往上抽象,抽象到一些feature,然后进一步再往上抽象,比如说对于车、对于人或对于标志牌这些目标的描述,同时它是一个自下而上逐步抽象的过程,而整个过程是不需要人工去参与的,当你设计好这样一个网络结构之后,整个的过程是自动化进行。所以学术界也有些声音是把Deep Learning(深度学习)认为是一种Feature Learning(特征学习)。
深度学习相对于传统方法还有一方面的优势是迁移学习和特征复用,当我们基于深度学习去实现一些具体应用的时候,我们可以基于主干网络,主干网络通常是基于ImageNet,因为它的数据量非常大,百万量级的数据量,得到一个主干网络后,我们可以基于这样一个主干网络以及应用本身的一些数据对网络做一些微调,一般我们的微调会增加5-10兆,而我们的主干网络则通常会有几百兆,甚至有一些是上千兆,所以可以看出来,很多东西是可以基于深度学习架构去复用的。
总结一下,传统的方法它的特征相对浅层,有很好的物理含义,因为它是基于直觉去设计的。不同任务之间有很强的独立性,比如说我针对汽车去设计的一套模型、算法,是没法直接搬过来做人脸或者人体识别的,那对于性能上来讲,它在有些实际任务中可以做得很好,但是对于一些难度较高比较复杂的任务,它可能比较饱和;但它的好处是整个算法的复杂度较低,在现有一些ARM架构平台上都可以跑得很快。
而深度学习,它整个的特征是深层次的,也是比较抽象的。因为它并不是人工设计,而是直接学出来的,它效果可能很好,但是你不知道它为什么好。而整个网络结构是我们工程师直接设计的,刚才也提到了它可以去做多任务的训练以及迁移学习,对于一些像ImageNet
10