自动驾驶无疑是目前汽车圈儿里最常见的讨论话题了,特斯拉刚刚推出的全自动驾驶硬件更是把这个话题炒得火热,这次全自动驾驶梦想似乎离我们更近了一步。
硅谷出来的公司总喜欢搞“硬件先行,软件升级”,苹果如此,强制更新的微软也不例外,特斯拉也一样。在推出V7.0 OTA空中升级包固件后,特斯拉将获得前所未有科技功能——自动驾驶,必须强调的事:特斯拉的自动驾驶技术≠无人驾驶,并且如同苹果手机升级新系统一样,升级这个功能是有前提条件的。
说起特斯拉,大家可能立马会想到16年5 月份发生在特斯拉 Model S 自动驾驶上的一宗夺命车祸。初步的调查表明,在强烈的日照条件下,驾驶员和自动驾驶系统都未能注意到牵引式挂车的白色车身,因此未能及时启动刹车系统。而由于牵引式挂车正在横穿公路,且车身较高,这一特殊情况导致 Model S 从挂车底部通过时,其前挡风玻璃与挂车底部发生撞击,导致驾驶员不幸遇难。
无独有偶,同年8月国密苏里州的一名男子、特斯拉 Model X 车主约书亚•尼利(Joshua Neally)在上班途中突发肺栓塞。在 Model X 的 Autopilot 自动驾驶功能的帮助下,他安全抵达了医院。这「一抑一扬」着实让人回味无穷,略有些「败也萧何,成也萧何」之意。
今天,我们就来谈谈自动驾驶系统中的一项重要核心技术——图像语义分割(semantic image segmentation)。图像语义分割作为计算机视觉(computer vision)中图像理解(image understanding)的重要一环,不仅在工业界的需求日益凸显,同时语义分割也是当下学术界的研究热点之一。
什么是图像语义分割?
图像语义分割可以说是图像理解的基石性技术,在自动驾驶系统(具体为街景识别与理解)、无人机应用(着陆点判断)以及穿戴式设备应用中举足轻重。
我们都知道,图像是由许多像素(pixel)组成,而「语义分割」顾名思义就是将像素按照图像中表达语义含义的不同进行分组(grouping)/分割(segmentation)。下图取自图像分割领域的标准数据集之一 PASCAL VOC。其中,左图为原始图像,右图为分割任务的真实标记(ground truth):红色区域表示语义为「person」的图像像素区域,蓝绿色代表「motorbike」语义区域,黑色表示「background」,白色(边)则表示未标记区域。
显然,在图像语义分割任务中,其输入为一张 H×W×3 的三通道彩色图像,输出则是对应的一个 H × W 矩阵,矩阵的每一个元素表明了原图中对应位置像素所表示的语义类别(semantic label)。因此,图像语义分割也称为「图像语义标注」(image semantic labeling)、「像素语义标注」(semantic pixel labeling)或「像素语义分组」(semantic pixel grouping)。
从上图和题图中,大家可以明显看出图像语义分割任务的难点便在于这「语义」二字。在真实图像中,表达某一语义的同一物体常由不同部件组成(如,building,motorbike,person 等),同时这些部分往往有着不同的颜色、纹理甚至亮度(如building),这给图像语义的精确分割带来了困难和挑战。
前 DL 时代的语义分割
从最简单的像素级别「阈值法」(thresholding methods)、基于像素聚类的分割方法(clustering-based segmentation methods)到「图划分」的分割方法(graph partitioning segmentation methods),在深度学习(deep learning, DL)「一统江湖」之前,图像语义分割方面的工作可谓「百花齐放」。在此,我们仅以「normalized cut」[1]和「grab cut」 [2]这两个基于图划分的经典分割方法为例,介绍一下前 DL 时代语义分割方面的研究。
Normalized cut (N-cut)方法是基于图划分(graph partitioning)的语义分割方法中最著名的方法之一,于 2000 年 Jianbo Shi 和 Jitendra Malik 发表于相关领域顶级期刊 TPAMI。通常,传统基于图划分的语义分割方法都是将图像抽象为图(graph)的形式 G=(V,E) (V 为图节点,E 为图的边),然后借助图理论(graph theory)中的理论和算法进行图像的语义分割。
常用的方法为经典的最小割算法(min-cut algorithm)。不过,在边的权重计算时,经典 min-cut 算法只考虑了局部信息。如下图所示,以二分图为例(将 G 分为不相交的 , 两部分),若只考虑局部信息,那么分离出一个点显然是一个 min-cut,因此图划分的结果便是类似 或 这样离群点,而从全局来看,实际想分成的组却是左右两大部分。
针对这一情形,N-cut 则提出了一种考虑全局信息的方法来进行图划分(graph partitioning),即,将两个分割部分 A,B , 与全图节点的连接权重(assoc(A,V) 和 assoc(B,V))考虑进去:
如此一来,在离群点划分中,中的某一项会接近 1,而这样的图划分显然不能使得是一个较小的值,故达到考虑全局信息而摒弃划分离群点的目的。这样的操作类似于机器学习中特征的规范化(normalization)操作,故称为normalized cut。N-cut不仅可以处理二类语义分割,而且将二分图扩展为 K 路( -way)图划分即可完成多语义的图像语义分割,如下图例。
Grab cut 是微软剑桥研究院于 2004 年提出的著名交互式图像语义分割方法。与 N-cut 一样,grab cut 同样也是基于图划分,不过 grab cut 是其改进版本,可以看作迭代式的语义分割算法。Grab cut 利用了图像中的纹理(颜色)信息和边界(反差)信息,只要少量的用户交互操作即可得到比较好的前后背景分割结果。
在 grab cut 中,RGB 图像的前景和背景分别用一个高斯混合模型(gaussian mixture model, GMM)来建模。两个 GMM 分别用以刻画某像素属于前景或背景的概率,每个 GMM 高斯部件(gaussian component)个数一般设为 。
接下来,利用吉布斯能量方程(gibbs energy function)对整张图像进行全局刻画,而后迭代求取使得能量方程达到最优值的参数作为两个 GMM 的最优参数。GMM 确定后,某像素属于前景或背景的概率就随之确定下来。
在与用户交互的过程中,grab cut 提供两种交互方式:一种以包围框(bounding box)为辅助信息;另一种以涂写的线条(scribbled line)作为辅助信息。以下图为例,用户在开始时提供一个包围框,grab cut 默认的认为框中像素中包含主要物体/前景,此后经过迭代图划分求解,即可返回扣出的前景结果,可以发现即使是对于背景稍微复杂一些的图像,grab cut 仍有不俗表现。
不过,在处理下图时,grab cut 的分割效果则不能令人满意。此时,需要额外人为的提供更强的辅助信息:用红色线条/点标明背景区域,同时用白色线条标明前景区域。在此基础上,再次运行 grab cut 算法求取最优解即可得到较为满意的语义分割结果。grab cut 虽效果优良,但缺点也非常明显,一是仅能处理二类语义分割问题,二是需要人为干预而不能做到完全自动化。
其实大家不难看出,前 DL 时代的语义分割工作多是根据图像像素自身的低阶视觉信息(low-level visual cues)来进行图像分割。由于这样的方法没有算法训练阶段,因此往往计算复杂度不高,但是在较困难的分割任务上(如果不提供人为的辅助信息),其分割效果并不能令人满意。
在计算机视觉步入深度学习时代之后,语义分割同样也进入了全新的发展阶段,以全卷积神经网络(fully convolutional networks,FCN)为代表的一系列基于卷积神经网络「训练」的语义分割方法相继提出,屡屡刷新图像语义分割精度。下面就介绍三种在 DL时代语义分割领域的代表性做法。
全卷积神经网络 [3]
全卷积神经网络 FCN 可以说是深度学习在图像语义分割任务上的开创性工作,出自 UC Berkeley 的 Trevor Darrell 组,发表于计算机视觉领域顶级会议 CVPR 2015,并荣获best paper honorable mention。
FCN 的思想很直观,即直接进行像素级别端到端(end-to-end)的语义分割,它可以基于主流的深度卷积神经网络模型(CNN)来实现。正所谓「全卷积神经网络」,在FCN中,传统的全连接层 fc6 和 fc7 均是由卷积层实现,而最后的 fc8 层则被替代为一个 21 通道(channel)的 1x1 卷积层,作为网络的最终输出。之所以有 21 个通道是因为 PASCAL VOC 的数据中包含 21 个类别(20个object类别和一个「background」类别)。
下图为 FCN 的网络结构,若原图为 H×W×3,在经过若干堆叠的卷积和池化层操作后可以得到原图对应的响应张量(activation tensor) ,其中, 为第i层的通道数。可以发现,由于池化层的下采样作用,使得响应张量的长和宽远小于原图的长和宽,这便给像素级别的直接训练带来问题。
为了解决下采样带来的问题,FCN 利用双线性插值将响应张亮的长宽上采样到原图大小,另外为了更好的预测图像中的细节部分,FCN 还将网络中浅层的响应也考虑进来。具体来说,就是将 Pool4 和 Pool3 的响应也拿来,分别作为模型 FCN-16s 和 FCN-8s 的输出,与原来 FCN-32s 的输出结合在一起做最终的语义分割预测(如下图所示)。
下图是不同层作为输出的语义分割结果,可以明显看出,由于池化层的下采样倍数的不同导致不同的语义分割精细程度。如 FCN-32s,由于是 FCN 的最后一层卷积和池化的输出,该模型的下采样倍数最高,其对应的语义分割结果最为粗略;而 FCN-8s 则因下采样倍数较小可以取得较为精细的分割结果。
Dilated Convolutions [4]
FCN 的一个不足之处在于,由于池化层的存在,响应张量的大小(长和宽)越来越小,但是FCN的设计初衷则需要和输入大小一致的输出,因此 FCN 做了上采样。但是上采样并不能将丢失的信息全部无损地找回来。
对此,dilated convolution 是一种很好的解决方案——既然池化的下采样操作会带来信息损失,那么就把池化层去掉。但是池化层去掉随之带来的是网络各层的感受野(receptive field)变小,这样会降低整个模型的预测精度。Dilated convolution 的主要贡献就是,如何在去掉池化下采样操作的同时,而不降低网络的感受野。
以 3×3 的卷积核为例,传统卷积核在做卷积操作时,是将卷积核与输入张量中「连续」的 3×3 的 patch 逐点相乘再求和(如下图a,红色圆点为卷积核对应的输入「像素」,绿色为其在原输入中的感知野)。而 dilated convolution 中的卷积核则是将输入张量的 3×3 patch 隔一定的像素进行卷积运算。
如下图 b 所示,在去掉一层池化层后,需要在去掉的池化层后将传统卷积层换做一个「dilation=2」的 dilated convolution 层,此时卷积核将输入张量每隔一个「像素」的位置作为输入 patch 进行卷积计算,可以发现这时对应到原输入的感知野已经扩大(dilate)为 ;同理,如果再去掉一个池化层,就要将其之后的卷积层换成「dilation=4」的 dilated convolution 层,如图 c 所示。这样一来,即使去掉池化层也能保证网络的感受野,从而确保图像语义分割的精度。
从下面的几个图像语义分割效果图可以看出,在使用了 dilated convolution 这一技术后可以大幅提高语义类别的辨识度以及分割细节的精细度。
以条件随机场为代表的后处理操作
当下许多以深度学习为框架的图像语义分割工作都是用了条件随机场(conditional random field,CRF)作为最后的后处理操作来对语义预测结果进行优化。
一般来讲,CRF 将图像中每个像素点所属的类别都看作一个变量 ,然后考虑任意两个变量之间的关系,建立一个完全图(如下图所示)。
其中是一元项,表示像素对应的语义类别,其类别可以由 FCN 或者其他语义分割模型的预测结果得到;而第二项为二元项,二元项可将像素之间的语义联系/关系考虑进去。例如,「天空」和「鸟」这样的像素在物理空间是相邻的概率,应该要比「天空」和「鱼」这样像素的相邻概率大。最后通过对 CRF 能量函数的优化求解,得到对 FCN 的图像语义预测结果进行优化,得到最终的语义分割结果。
值得一提的是,已经有工作[5]将原本与深度模型训练割裂开的 CRF 过程嵌入到神经网络内部,即,将 FCN+CRF 的过程整合到一个端到端的系统中,这样做的好处是 CRF 最后预测结果的能量函数可以直接用来指导 FCN 模型参数的训练,而取得更好的图像语义分割结果。
展望
俗话说,「没有免费的午餐」(no free lunch)。基于深度学习的图像语义分割技术虽然可以取得相比传统方法突飞猛进的分割效果,但是其对数据标注的要求过高:不仅需要海量图像数据,同时这些图像还需提供精确到像素级别的标记信息(semantic labels)。因此,越来越多的研究者开始将注意力转移到弱监督(weakly-supervised)条件下的图像语义分割问题上。在这类问题中,图像仅需提供图像级别标注(如,有「人」,有「车」,无「电视」)而不需要昂贵的像素级别信息即可取得与现有方法可比的语义分割精度。
另外,示例级别(instance level)的图像语义分割问题也同样热门。该类问题不仅需要对不同语义物体进行图像分割,同时还要求对同一语义的不同个体进行分割(例如需要对图中出现的九把椅子的像素用不同颜色分别标示出来)。
最后,基于视频的前景/物体分割(video segmentation)也是今后计算机视觉语义分割领域的新热点之一,这一设定其实更加贴合自动驾驶系统的真实应用环境。
普特斯拉自动驾驶技术的传感器系统
所有的特斯拉(Tesla)新车将装配“具有完全自动驾驶功能”的硬件系统——Autopilot 2.0。
其中的传感器系统包括8个摄像头,12个超声波传感器,1个毫米波雷达。另外还有1个主要用于倒车的倒车摄像头。
一、超声波和雷达的区别
1、机械波和电磁波
机械波是机械振动引起的振动在介质中的传播。这种传播必须有介质。它的传播速度与介质有关。例如机械振动的频率达到一定范围内就是声音,在空气中的传播速度为340m/s, 电磁波的产生是电磁振荡产生的变化电磁场向空间的传播。电磁波的传播不需要介质,它的传播速度是光速。在真空中的传播速度是3*10^8m/s.
2、超声波和雷达
超声波是一种机械波,在空气中传播时,大气成分的构成会引起声速的变化,受存在的气体或蒸汽的类型、温度、压力的影响,因此恶劣天气适应性差。
雷达发射的是电磁波,不受大气影响,能够克服高温、高压、真空、挥发性气体、蒸汽、粉尘等不利因素,因此恶劣天气适应性强。
二、三种车用测距传感器性能对比
三、各传感器大致位置
结合上面两张图,我们就不难知道各传感器的大致位置:
1、车头6个、车尾6个,共12个超声波传感器;
2、前挡风玻璃下内后视镜上端长焦、标准、短焦各一,共3个前视摄像头;
3、外后视镜前端翼子板后端两侧各一个,共2个后测视摄像头;
4、前后门中柱靠上端两侧各一个,共2个侧视摄像头;
5、后窗上部中间1个后视摄像头;
6、除上述8个摄像头外,还有一个在后车牌位置上部专门负责倒车的倒车摄像头1个;
7、前保险杠中部的毫米波雷达1个。
四、各传感器的测量范围及最大测量距离
各传感器的测量范围角度大致如图所示,最大测量距离可列表如下:
五、完全自动驾驶的实现
依靠以上传感器,未来特斯拉将实现以下完全自动驾驶:
1、实现自动变道,系统识别到相邻车道没有车时,可以自动并过去。到达高速路口出口时,车辆会自动减速驶出,并提示驾驶员接管;
2、蜿蜒的复杂道路也不是问题,传感器能够保证特斯拉始终行驶在车道内。
3、召唤模式也将加入。车辆将可以自动从停车场驶出,开到你的身边。
4、在复杂的城市路况下,特斯拉也能够应付自如。
5、自动泊车将会更加的智能。到了停车场门口,你就可以下车了,车辆将会自动寻找车位并停进去。
相比硬件来说,在软件和实际测试上需要花费的时间恐怕还要多得多。所以特斯拉让我们离自动驾驶近了一步,但是还有很多路要走。
在V8.0版本更新公告中,特斯拉官方部分承认了视频传感器存在的瑕疵,并表示会加大自动驾驶技术中雷达采集信息的比重以及进一步优化系统判断逻辑。此外,特斯拉悄然将技术名称由自动驾驶系统改为了自动辅助驾驶系统。由于V8.0版本发布的时间处于自动驾驶事故发生之后,外界均猜测这是特斯拉对此前漏洞的弥补,这也是特斯拉对自动驾驶技术路线的第一次更改。为了实现自动驾驶功能,采集信息由主摄像头为主、雷达为辅变为了雷达为主、摄像头为辅。可40天后公布匆匆公布的第二代自动辅助驾驶功能中提到的更新细则里,摄像头再次重回主角地位。也就是说,特斯拉实现自动辅助驾驶技术的路线回归了一切的原点。
评论