2022 年CVPR上,特斯拉宣布将在其自动驾驶车辆中发布一种全新的算法。这个算法被命名为Occupancy Networks,它用来改进特斯拉的AI 模型HydraNets。
HydraNets
自动驾驶汽车行业在技术上分为两类:一种是基于视觉的自动驾驶系统,另外一种是基于LiDAR 的自动驾驶系统。后者使用激光雷达传感器来检测物体,但视觉系统完全基于相机,就类似于人类的眼睛。而这就是特斯拉使用他们的 Tesla Vision 软件系统所做的计算机视觉系统。之所以为什么马斯克一直坚持使用计算机视觉系统,有可能就是马斯克一直坚持的第一原理思维吧,按照人类的的第一原理思维,把自动驾驶看成一个机器人来驾驶汽车,然而人类驾驶汽车也是纯计算机视觉系统。马斯克坚持使用计算机视觉系统,这个就需要时间的考证了。
但是基于视觉的系统有很多缺陷,并且仍然面临着由于物体检测失败或其他问题导致的大量事故。
问题1:若检测到的物料不是数据集中的对象怎么办,毕竟路面上会出现什么东西,没有人会知道
问题2:在基LiDAR的系统中,可以根据检测到的物理粒子确定对象的存在,但在计算机视觉系统中,必须首先使用神经网络检测对象。
而神经网络模型不一定会检测出物体的存在,若系统判断失误,必然导致汽车事故。
在新闻报道中,层出不穷地出现自动驾驶汽车出现事故的新闻,前段时间林志颖的特斯拉汽车失控的新闻,也是一度上了热搜,但是无论怎么样,计算机视觉系统在自动驾驶上面还有一定的时间去探索。
在 CVPR 2022 上,特斯拉自动驾驶负责人 Ashok Elluswamy 介绍了一种名为:
Occupancy Networks神经网络模型,并且这些神经网络模型在对象检测方面比通常的对象检测系统要好得多。
虽然计算机视觉很强大,但是依然存在或多或少的问题
1、地平线的深度极其不一致,只有2个或多于2个的像素决定了一个大区域底面的深度。
2、无法看到遮挡物前面的物体与开过去的车辆。
3、计算机视觉系统提供的是 2D影像,但世界是 3D 的,自动驾驶汽车需要3D的影像。
4、对于路面上放置的障碍物,计算机视觉系统里一般设置成固定的矩形。
而很多物体的形状都不是完整的矩形,其异性部分很难得以体现。
5、不属于数据集的对象,毕竟路面上面出现的物体千奇百怪,数据集很难涵盖到所有的对象。
右边为未在数据库中的物体,以前的模型无法识别
在计算机视觉任务中,以上以及很多问题,目前无法来有效地解决,但是若采用雷达系统,很多问题是可以解决的,但特斯拉团队依然坚持纯计算机视觉来解决以上问题。因此,特斯拉团队设计了Occupancy Networks模型。
Occupancy Networks 是特斯拉开发的新算法,基于名为 occupancy grid mapping 的机器人思想;包括将3维世界划分为一个网格单元,然后定义哪个单元被占用,哪个单元是空闲的。Occupancy Network 的想法是获得体积占用率。它使用“占用”而不是检测来实时显示道路信息。可以从下图可以看出,此网络模型可以超过 100 FPS 的速度运行,这就大大提高了其模型的检测速度,基于Occupancy Network网络模型,其特斯拉也在相应的问题上进行了改善。
第一个改善的问题便是特斯拉一直提到的Bird Eye View(鸟瞰图),在 2020 年特斯拉 AI 日上,Andrej Karpathy 介绍了特斯拉的鸟瞰网络。该网络展示了如何将检测到的物体、可驾驶空间和其他物体放入 2D 鸟瞰视图中。但是很多时候我们需要一个3D的界面来呈现到自动驾驶系统,毕竟我们的世界是3维的。2D图像在道路上或多或少的会出现相应的问题,更别说要应用到自动驾驶项目上来。
另外一个问题是,在计算机视觉领域,我们输出的检测模型都是使用一个标准的方方正正的矩形来表示,无论是汽车,人物,信号灯等,当计算机视觉系统检测完成后,总是按照一个矩形框来实时显示画面。但是当汽车顶上有杂物,或者卡车旁边有挂钩等,计算机视觉系统一般会屏蔽掉此部分的特性,但是在道路上面,这样的物体确实存在,若被忽略,肯定会出现车祸等问题。
但是Occupancy Networks网络就解决了以上的问题,他不仅可以检测出对象,也同样检测出了异性对象。而Occupancy Networks网络的解决方案便是把世界分成很多个小方格立方体,来判断小的立方体中是否有对象,或者说是是否有对象被占用。
CVPR会议上,每年都会有几十篇论文发布,来讲解新的对象检测算法,YOLO,Resnet等等,以及基于已有的算法的改进版本,但是所有的计算机视觉对象检测算法都是在已有的数据中进行训练与检测,若道路上面出现了数据集中未收录的数据样本,想想计算机视觉系统会检测出来什么,或者什么都不会提示,这在自动驾驶系统中是天大的bug。
在特斯拉以前的数据库中,图片展示的物体并没有经过训练,那么特斯拉的自动驾驶系统便不会检测到此物体,若此时特斯拉汽车突然加速,想想这是多么可怕的事情,而通过Occupancy Networks便可以成功的检测出此物体。
在左侧,可以看到特斯拉的8个摄像头拍摄到的8个画面。首先,8个画面图片会被发送到由Regnet和BiFPN组成的主干网络;
然后,注意力模块采用位置图像编码并使用QKV矩阵来计算注意力机制,当然这里的Q是固定的数据(比如汽车,人物,交通灯,路标等等)。
经过注意力机制后,会产生一个占用体积特征,然后模型会将其之前时间的的体积特征(t-1、t-2 等)融合,以获得4D 占用特征网络。
最后,我们获得两个输出:Occupancy Volume, Occupancy Flow。特斯拉在这里实际上做的是预测光流。在计算机视觉中,光流是像素从一帧到另一帧的移动量,在自动驾驶系统中,我们除了要进行对象检测外,还需要时间方面的信息,不仅其他汽车在移动中,自动驾驶汽车也在实时移动中。这对于自动驾驶的预测与规划等任务都有很好的帮助作用。
生成 3D 体积后,使用 NeRF将输出与经过训练的 3D 重建场景进行比较。
而这一切强大的软件执行,都是在特斯拉特定的电脑上面运行的,不仅感叹特斯拉不仅是一家硬件公司,还是一家软件公司,更是一家造车公司,我们需要加油了。