作者/周彦武(业内资深专家)
编辑/极客之心
以特斯拉为代表的单目和三目系统,对深度学习高度依赖。
在深度学习视觉感知中,目标分类与探测(detection)是一体的,无法分割。
这就意味着,如果自动驾驶系统无法将目标进行分类,也就无法进行探测识别。这带来的结果是,车辆在行驶过程中,遇到前方有障碍物时候,会识别为无障碍物,进而不减速直接撞上去。
训练数据集无法完全覆盖真实世界的全部目标,能覆盖10%都已经十分了不起了,更何况真实世界每时每刻都在产生着新的不规则目标。
特斯拉多次事故都是如此,比如在中国两次在高速公路上追尾扫地车(第一次致人死亡),在美国多次追尾消防车。还有无法识别车辆侧面(大部分数据集都只采集车辆尾部图像没有车辆侧面图像)以及无法识别比较小的目标。
毫米波雷达容易误判,特别是静止目标,如金属井盖,金属天桥,金属护栏,因此毫米波雷达会自动过滤到静止目标。
此时,自动驾驶系统需要双目或激光雷达,这两类传感器都无需分类即可探测。
那么特斯拉为何不用激光雷达?真的如马斯克所言「激光雷达价格昂贵,丑陋且不必要」吗?背后的真正原因是什么?
01、从激光雷达算法说开去
目前,主流的激光雷达算法也是基于深度学习,深度学习视觉遇到的问题,激光雷达也可能会遇到。
盘点一下,主流的激光雷达算法经历了三个阶段:
第一阶段是PointNet
第二阶段是Voxel
第三阶段是PointPillar
PointNet是斯垣福大学在年提出的一种点云分类/分割深度学习框架,是开天辟地的点云深度学习框架。
众所周知,点云在分类或分割时存在空间关系不规则的特点,因此不能直接将已有的图像分类分割框架套用到点云上,也因此在点云领域产生了许多基于将点云体素化(格网化)的深度学习框架,取得了很好的效果。
但是,将点云体素化势必会改变点云数据的原始特征,造成不必要的数据损失,并且额外增加了工作量,而PointNet采用了原始点云的输入方式,最大限度地保留了点云的空间特征,并在最终的测试中取得了很好的效果。
有多好呢?
在KITTI三维目标检测中,F-PointNet排名第一,这比激光雷达与摄像头融合的MV3D还要好。
PointNet架构
年,斯坦福大学对此做了改进,提出PointNet++架构。
首先,PointNet是逐点point-wiseMLP,仅仅是对每个点表征,对局部结构信息整合能力太弱--PointNet++的改进:采样(sampling)和分组整合(grouping)局部邻域。
其次,全局特征(GlobalFeature)直接由最大池化(MaxPooling)获得,无论是对分类还是对分割任务,都会造成巨大的信息损失--PointNet++的改进:
分级特征学习框架(hierarchicalfeaturelearningframework),通过多个抽样化(setabstraction)逐级降采样,获得不同规模不同层次的局部到全局的特征。
最后,分割任务的全局特征是直接复制与本地特征拼接,生成discriminativefeature能力有限--PointNet++的改进:
分割任务设计了编解码encoder-decoder结构,先降采样再上采样,使用跳过连接skipconnection将对应层的local-globalfeature拼接。
PointNet++结构
但是PointNet的缺点是不是端到端的处理方式,处理点云需要大量手工作业,于是VoxelNet出现了。
年,苹果推出基于点云的3D物体检测论文《VoxelNet:End-to-EndLearningforPointCloudBased3DObjectDetection》:
将三维点云划分为一定数量的Voxel,经过点的随机采样以及归一化后,对每一个非空Voxel使用若干个VFE(VoxelFeatureEncoding)层进行局部特征提取,得到Voxel-wiseFeature,然后经过3DConvolutionalMiddleLayers进一步抽象特征(增大感受野并学习几何空间表示),最后使用RPN(RegionProposalNetwork)对物体进行分类检测与位置回归。
Voxel架构
Voxel的缺点是对GPU要求太高,太慢,用这样的GPU帧率不到5Hz。
于是终极算法登场,这就是PointPillar,帧率达到Hz。
在VoxelNet当中,会将所有的点云切割成一个一个Grid,我们称之称为Voxel。
PointPillar也是这样的操作原理,但是在z轴上它不进行切割,相当于精简版本的Voxel,也可以看成z轴上的Voxel合成一个Pillar。
这是由知名的零部件供应商安波福提出的算法,是国内车厂用的最多的算法,也是最贴近实战的算法,而不是试验室产品。
PointPillar少了Z轴切割,而是使用2D骨干,这导致其精度下降,性能相较于纯2D的视觉,提升并不明显,特斯拉不用激光雷达很正常,而不依赖深度学习的具备可解释性的激光雷达算法目前还未见到。
博世、奔驰和丰田目前正在研究,这会是一个漫长的过程。
02、自动驾驶的关键问题:过于依赖深度神经网络
深度学习有多好用呢?
不到半年,一个普通大学生就可以熟练调参了,几乎没有人研究激光雷达的传统算法。
目前自动驾驶最关键的问题是,过于依赖不具备解释性的深度学习或者说深度神经网络,这点可能导致自动驾驶永远无法实现。
在没有高浮点算力的GPU出现之前,神经网络或者说深度学习可以说完全被否定,英伟达凭一己之力撑起了半边天。
如今AI是最热门的话题,最热门的学习方向和就业岗位,如今神经网络已经是AI的全部。
实际上,当年加州大学伯克利分校计算机科学家,人类兼容人工智能中心(CHAI)主任斯图尔特·罗素(StuartRussell)所著作的《人工智能:一种现代的方法》(ArtificialIntelligence:AModernApproach)一书,也只有4页左右的内容提到神经网络。
然而对于自动驾驶系统而言,需要一个可解释性。
可解释性,是指人(包括机器学习中的非专家)能够理解模型在其决策过程中所做出的选择(怎么决策,为什么决策和决策了什么)。
因为它和安全强关联,只有具备可解释性才能保证安全性不断提高,如果出了事故找不到人类思维可以理解的原因,那自然就无法解决事故,类似的事故还会发生。
而神经网络或者说现在的人工智能最缺的就是可解释性。
深度神经网络缺乏归纳偏置(Inductivebias),它对未知情况的预测很不确定也不好解释,这导致了使用深度模型时的「黑盒」困扰。
如果是线性回归做拟合,我们可以观测其Y值与以X向量为参数的线性函数。
如果是Logistic回归,我们可以观察其超平面对正负样本的切分情况。
这些归纳偏置都可以证实(justify)模型的预测。
而深度神经网络只能表明Y是X向量的某种非线性函数,该函数与数据增强、网络结构、激活函数、归一化等各种在训练过程中加入的约束条件有关,这导致在实际使用中无法证实预测结果的有效性。
简单地说,就是特斯拉搞了个算法,它无法预测在某个环境下识别目标的准确度,完全是听天由命,为什么在某个场景下能识别,换了一个场景就无法识别,无法解释。
康奈尔大学发布的这篇论文:《PracticalBlack-BoxAttacksagainstMachineLearning》(