作者 | PerceptionX
来源 | 计算机视觉life(直接);知乎@PerceptionX
原文 | https://zhuanlan.zhihu.com/p/466426243
Tesla对自动标注的技术和要求:
● 核心技术方面:三维重建与视觉SLAM等算法。
下面我们就来为这三点慢慢展开。
首先我们recall一下
数据采集 → 搭建数据集 → 自动+人工标注 → 送入模型训练 → 量化部署到车端上。
在整个特斯拉自动驾驶里面,Data labelling可能比网络部分还要重要,因为数据这一块容易用一些技巧去提升效果。
一开始tesla选择和第三方公司合作,但很快就发现标注效率很低,并且沟通的成本很高,后来他们选择自己建立标注团队,也实现了比较好的产出。
我们可以从图片的下方看到数据标注量在后面时间段产出都比较稳定。
我们猜测其中有两点起到了作用:
NO.1
早期的2D平面标注
回到最初,Tesla是在2D的平面上对数进行精细的标注, 例如上图,不仅对车道线+朝向,红绿灯,行人做标注,连对锥形雪糕筒,左边路面的拖拉机,大卡车也会去做标注(估计归类为construction)。
但是对于这种方法, Tesla就发现这么一张一张去标注不太work, 并且一直这么标也不知道什么时到终点。
2D 标注demo
NO.2
4D Space + Time Labelling
接下来Tesla马上转变到一个4D Space + Time Labelling 的标注模式,在我们看来其实像一个vector space 下 3D 标注 + 时间序列,加入时间序列主要作用是知道前面发生了什么,把前面的东西保留,可以将信息投到后面,例如3D版的CVAT。
整个思想是,在3D空间下标注,然后再投到8个摄像机里面,简单来说,可以理解为 amount of the labels in 3D space (vector space) = ⅛ amount of labels in 8 camera views (image space)。这里可能会涉及到2D标注与3D标注之前的成本问题,很明显我们都知道标注一张2D的图像会比标注一张3D的图像成本低,但如果是 8张2D的图像对比1张3D的图像,从Tesla 的做法来看,是标注1张3D图像的成本效果要比较好。
但其实即使你标注获得了8倍的数据,对自动驾驶而言也还是不够用的。我们在之前的图片也看到,在CVPR2021 WAD的时候, Tesla 有60亿个标注,和1.5 Pentabytes (PB) 的数据,如果单单利用人工劳动力去标注,是不大可能做到如此庞大的数据量的。
这是Tesla Auto-Labelling 的整个pipeline, 它会有视频片段,大概就是10s到60s的视频,这些视频来源可以是他们车队采集,或者是shadow mode 上传的,这些视频片段包括了图像,IMU,GPS,Odometry(里程计)的数据,压缩成一个个packages,传到服务器上面。
然后服务器上面会有Offline Neural Networks, 离线神经网络,这里相当于一个大规模模型,是他们针对图像上的物体做的。
检测识别精度会比较准,会对不同的camera输出的图像做预处理,可以输出semantic segmentation, depth estimation,还可以多帧之间点matching的结果;
接着通过一个机器人行业流行的AI 算法,在我们看来就是利用nerf,SLAM等算法,把整个三维场景重建出来,然后构建出不同的label, 有道路的重建,动态/静态物体的重建,这样就可以打包成不同的labels,其实label这一模块是依托于大模型的输出的,所以tesla 在整个autolabelling 和网络训练的过程,其实是让车端运行的neural network去蒸馏大网络的输出,是这样的一个过程。
接着我们会有一个问题:tesla是怎么重建道路的呢?或者会有疑问,检测网络是有了(HydraNet),然后数据是怎么获得的呢?
首先会用一个隐式MLP(multilayer perceptron)表示道路,然后给每一个道路(x,y)的request,然后可以收获 Ground Height, Lane Line, Crub, Asphalt(沥青), crosswalk 等信息,可以视为BEV视角下的一个栅格化表示。
获得这些信息之后,我们可以把他们投影到8个camera上,如上图右上的地方,相当于对每一个点作分类处理,如车道线。右下的图片是大模型对右上图做的一个Segmentation的结果,当3D投影结果跟2D 重合的时候,我们就认为我们道路重建准确。
为了让大家更加理解这个过程,其实这个过程是基于一篇 paper,ECCV 2020 NeRF的 paper, (Mildenhall, Ben, et al. "Nerf: Representing scenes as neural radiance fields for view synthesis." ECCV, 2020.)
Nerf 所解决的是一个什么问题呢?可以看到图片中下放nearest input 这一部分,有一些离散的,不同视角下的一些输入,然后我们的目的是输出一个三维重建的图,作为物体的重建。
然后nerf对物体的重建的过程也比较有意思,一般我们表示一个物体,例如会用match去表示,或者用各种显式去表示,但这篇文章并没有用一种显式的方式去表示,而是用一个多层神经网络,即MLP,去表示物体的本身。
如上图左边,当我们有(x,y,z,θ,ϕ),即三维空间点x,y,z,以及视角θ,ϕ;如图(a),在每条射线上的每个点,都带着(x,y,z),以及(θ,ϕ)信息,通过MLP后输出RGB信息,如果我们采集的点越来越多,我们得到更多不同的RGB,这样我们就可以把整个物体重建出来,也就是说我们要让这个网络过拟合某一个特殊的场景,其实这个MLP表示的就是这个场景本身。
在图(b)中,我们在不同视角下会有一ground truth(真值),即不同视角下的图片。然后当图(b) output 中 2D 的投影与我们的真值吻合的时候,我们就可以认为这3D的modelling 建立得比较好。然后从input隐式3D,通过MLP,到2D的过程,这一流程其实也就是一个渲染的过程。用到了Volume Rendering, 并且整个pipeline是可导的,保证了rendering loss function 可以把梯度反向传播回到MLP,不断地去优化我们的模型,模型就会逐渐贴近我们的这个三维物体。
这个过程里面,有一点很重要,就是MLP这个模型,可以理解为物体本身,如果对应到Tesla 方案上,MLP就是道路本身(一个隐式表示)。
可能说的有点散了,我们现在来梳理一下,具体来说:
为什么要这么做呢?因为我们需要一ground truth 来给Tesla vision去训练, 然而我们又怎么去建立这个ground truth 呢?
1. 在场景重建的时候,我们需要获得每一个摄像头的位置信息,比如说我们需要知道每个摄像头的外参,这里TESLA可能是通过SLAM(camera+IMU)来获得相机在帧与帧之间的转移矩阵;
2. 第二个挑战是要保证渲染的过程是一个可微渲染,这样才能对道路模型进行梯度优化。
Restructuring the Road 结果:重建的结果还是挺好的。
整个静态物体的构建过程,其实就是一个SLAM,然后把地图重建出来。建完图后,我们可以把地图当作psudo lidar了,可以用lidar算法去做目标检测等任务。当然,也可以人工去标注,但tesla 大概率是大模型做auto labeling, 然后人工去做refine。
关于车辆标注,我们也找了一些自动化标注的资料:Zakharov, Sergey, et al. "Autolabeling 3d objects with differentiable rendering of sdf shape priors." CVPR 2020
详情请看:
https://www.youtube.com/watch?v=VQcDcYsWk00
TRI的这篇工作中,首先使用车辆的三维模型训练一个SDF模型(类似Nerf,也是三维场景的一种表示),该SDF模型含有latent code(上图中的SDF vector)。通过修改latent code,可以控制车辆的形状,以生成不同的车型。
当获取到输入图像后,首先进行segmentation,并预估一个车辆的初始位置。根据车辆的初始位置及SDF模型,可以渲染出车辆在图像上的投影。结合车辆的segmentation,车辆位姿及其二维投影,可以构建出2D、3D两个loss。对loss做梯度下降,优化SDF vector及车辆位姿。
当车辆投影在二维上跟分割结果重合、三维上和lidar点重合时,车辆的形状及位姿较为准确,从而获取车辆的三维标注信息。作者使用该方法在KITTI数据集上生成的数据,在BEV指标下达到了人工标注的性能。
我们可以看到整个clip相当于对整个场景做三维重建了,然后最近有一趋势,即把车身信号,image,lidar point cloud, prediction, 等数据都整合到一起,形成一段video clip,这我比较方便我们去train multi-task model。
特斯拉的数据集包含了车的位置,行人的位置,以及周围场景信息,算是比较丰富的数据集。目前学术界所开源的自动驾驶数据集并没有这么丰富,例如waymo open datasets 普遍是一段一段的,perception and prediction模块之间的标注也没有集合到一起。Nuscene虽然有给到各种数据,但也不是那么让人满意。
这里我们PerceptionX 先宣传一波我们自建的数据集OpenLane,集合了当前自动驾驶数据集未涉及到的标注任务,是 community 首次推出真实场景 3D 车道线标注;同时也是规模最大的、同时包含了车道线和物体检测等内容,方便后续感知任务的扩展。
OpenLanes数据集下载链接:
https://opendatalab.com/OpenLane
(点击阅读原文查看)
这里仍然不得不提到特斯拉利用autolabeling pipeline在自动驾驶上去雷达的举措,相信有很多文章也提到过,radar跟camera在一些场景下会产生矛盾,例如在高速通过拱桥的时候,桥是静态物体,但路面的车是动态物体,radar检测到的桥容易mismatch并错误认为车也是静态物体,然后tesla自动驾驶在高速上减速了。
但这不是重点,重点是右边的部分,要去掉radar,就需要camera做得比radar要好,但在右边这种一系列的大雾场景,传统的相机做的检测、深度估计任务确实没有radar好,这种问题可以怎么解决呢?
Tesla 派了一庞大的车队,采集了1万+恶劣天气场景的video clips, 然后通过auto-labeling pipeline,一周内就标注完了,然后送到网络里面去训练,最后得到的效果如下所示: