
7月4日,地平线「你好,开发者」自动驾驶技术专场在智东西公开课顺利完结直播。专场由地平线4D标注技术负责人隋伟主讲,主题为《面向BEV感知的4D标注方案》。
今天我要分享的是《面向BEV感知的4D标注方案》。首先会简单的介绍一些4D标注的技术,以及依赖的硬件基础;之后主要介绍两种标注方案:一种是面向采集场景的,主要是在研发阶段,使用的车辆传感器会按照自己的需求进行改装。一个简单的例子就是可以用一些非量产的传感器;另一种是面向量产场景的,例如针对量产数据badcase迭代阶段,这种场景下只能够利用量产车上的传感器,会有一些限制;最后,我会介绍一下地平线4D-Label的云端运营平台,以及4D-Label技术的未来发展趋势。


4D-Label整体的技术路线,无论是面向采集场景的多模方案还是面向量产数据的纯视觉方案,都是一致的。整体的思想就是:首先是采集数据,之后进行点云或者Object级别的4D重建。在得到4D重建空间的基础之上,采用人工的方式通过3D 标注工具进行标注和质检,之后完成真值数据的发版。随着人工标注数据越来越多,可以在云端训练一些大模型,用于辅助标注,提升标注效率,降低标注成本。当云上的数据规模累积到一定的程度,云上模型的性能会大幅度提升。此时,大部分的标注任务都可以实现自动化标注。
在得到改装的车辆之后,还要进行传感器之间的外参标定和时间同步,用来实现不同传感器之间数据的时空一致性。涉及到的外参标定主要有Lidar和camera之间的标定,以及GPS、IMU和Vcs坐标系之间的标定。标定的方式可以分为两种,一种是工厂标定,一种是在线标定。工厂标定,是在出厂时进行的一次比较全面和系统的标定,通过特定的标注工具,得到高精度的标定结果,但是无法频繁地进行标定。在线标定,是利用一些端上的感知结果,进行外参标定,在线标定可以高频次进行,能够有效地保证传感器精度的下限,例如当传感器因为抖动而发生位置变化的时候,在线标定可以获取最新的标定结果。在实际过程中,这两种方式我们都会使用,工厂标定得到传感器的外参之后,通过在线标定做实时或者定时更新。
在得到外参标定之后,还需要进行多传感器之间的时间同步,用于保证不同传感器之间准确的数据的关联关系。在我们方案里,采用的是11V图像同步曝光,时间偏差小于5ms。
另外,介绍一下我们的方案里面涉及到的一些数据格式的定义,这里涉及到两个基本的数据概念。
第二个数据概念是Site。Site是一个空间的物理坐标点,可以理解成是一个空间的GPS点。这个空间位置中具有唯一的特性,一个Site可以包含多个经过它的Clip。举个简单的例子,把路口中心点定义成一个Site,就可以通过GPS范围来筛选出所有经过该路口的Clip数据。
上面是一些4D-Label的简单的技术简介。接下来,我会介绍两种方案:一种是面向采集场景的多模标注方案,另一种是面向量产的纯视觉方案。多模标注方案在量产感知传感器基础之上增加了Pandar128雷达。面向量产的标注方案主要是采用量产传感器采集的数据进行标注,我们的方案是纯视觉感知,因此只用图像信息(结合惯导、轮速计等)进行标注。对于一些有Lidar的量产方案,可以将Lidar利用起来,以减少动态标注的难度。
首先是多模的方案。我们按照这几种任务,分别来介绍一下标注的过程:
我们按照静态、动态和通用障碍物三种任务分别介绍一下多模标注方案。
首先是路面静态要素的标注。路面静态要素的标注,本质上是对路面进行建模,也就是局部的建图。在我们的方案里面,采用了单趟重建和多趟聚合的方式。这种方式,一方面可以提升建图效率,平摊标注成本;另一方面也能保证建图的完整性,提升召回以及远距离的真值。
针对这些问题,我们对聚合做了一些优化:首先和单趟重建一样,引入了一些语义信息,能够得到一些路面和标识牌这些显著的特征,利用语义信息引导进行匹配;另外,也采用了一些learning的方法,得到的一些关键点,能够在一些极端环境下,提供更鲁棒的匹配结果。通过这两种策略,可以使多趟重建的成功率达到90%以上。下面这个demo就是一个全局聚合之后的局部地图的效果,可以看到,由于建图的精度足够高,lidar intensity图上路面的元素结构特别清晰。
在标注的时候,我们将三种不同模态的数据投影到一个平面上得到一幅BEV空间的大图,通过人工标注的方式得到真值数据。由于投影的过程保留了高度信息,因此标注的结果可以利用这些高程信息得到3D空间的数据。
当积累一定的量的数据之后,我们利用这些数据训练一个云端大模型用于辅助标注。模型采用了我们自己的一篇工作MapTR,输入是三种模态的大图的信息,输出的直接是实例级别数据。每一条车道线都会表示成有序的点列,这样就节省了很多的后处理。这些标注的结果通过简单的处理就可以得到训练样本。后续我们也会尝试采用MapTR直接标注逻辑层。
此外,通过聚合的方式,也可以平摊clip的标注成本。因为聚合之后,一张BEV大图,只需要标注一次,就可以生成所有clip的真值。我们采用将标注的真值投影到图像空间,计算重投影误差的方式对多模的真值进行评测。我们的方案可以做到重投影误差小于3个像素。
这是第一个不同点,第二点不同的是图商的地图,受鲜度的影响,地图更新比较慢。这样会导致在生成真值的时候,需要投入大量的人力资源,去识别地图和实际场景不一致的问题。而4D-Label大部分情况都是即建即用,不需要考虑鲜度的问题。
此外,定位精度也会存在差别。现在基于视觉感知的的高精地图定位方法,横向误差大概是在10-20cm左右,纵向误差可能会到30-40cm以上。这样的精度,偏差已经大于一根车道线,没有办法满足真值精度的需求。而4D-Label这种方法,不需要考虑全局的定位精度,只需要保证局部的里程计精度,所以它的精度会比较高。横纵向误差都能够到10cm以下。这就是图商HD Map和4D-Label的一些对比。总而言之,4D标注的首要目标是满足感知的真值需求,所有的方案设计都应该从围绕满足真值数据的数量、质量和多样性。
以上介绍的是路面的静态要素的标注,接下来介绍动态物体的标注。动态物体的标注,采用的Lidar+视觉后融合的方案。主要的过程是,首先有一个Lidar检测的大模型,对输入的Pandar128的点云数据进行感知,得到每帧点云上的3D物体的检测框。之后采用传统的卡尔曼滤波的方式,对不同帧之间感知结果的跟踪,得到每个物体的跟踪结果,从而可以获取每个物体在时序上的一条完整轨迹。
4D标注过程在云上进行的最大的优势就是可以利用未来的信息来做标注。也就是说,一个运动物体可以用其未来的信息来辅助当前的标注,也因此能够得到比较高的一个精度或者召回。我们前面讲到,视觉和Lidar之间会有时间的同步,而视觉11V的图像是同时曝光的,它和Lidar之间的扫描会存在一个时间偏差。利用时间同步的信息和轨迹信息,可以把物体的运动信息插值到任何一个时刻,从而得到每个时刻的真值。例如当某些Lidar帧上出现漏检的情况,可以通过时序轨迹差值的方式补充在该帧上的结果。
为了进一步提升真值的质量,我们采用2D预刷大模型的方式,和3D插值的结果进行对比,实现自动质检。只有3D投影的结果和2D有比较高的overlap,才会被当作高质量的真值保留下来,否则会被丢弃掉。这样做并不会影响真值的的效果,因为检测任务中每个训练样本是物体的object,而不是一幅图像。所以,即便在同一个样本里,一幅图像或者一帧点,有部分的object没有被完全准确标注出来, 也并不影响最终的训练任务。一个时刻的图像,如果能保证里面有60% -70%的真值是准确标注的,就能够满足模型训练的需求。这种投影的方式还有一个用处就是将2D感知的属性赋予3D标注结果,例如车辆的车门开合、车灯颜色等,很难通过Lidar识别的信息,可以通过2D图像获取。
接下来介绍其它静态要素的标注,驾驶场景里面的红绿灯、交通牌和锥桶。这些物体的标注方案和动态物体基本是一致的,主要区别在于两点:3D空间bounding box的获取方式以及跟踪方式。在这里我们以锥桶的方案为案例进行介绍。
我们的主要的路线:首先是有一个Lidar分割的大模型,利用Lidar的语义信息,提取锥桶的潜在3D proposal,但这里面可能会存在大量的噪声;之后利用时序的信息对2D锥桶检测结果进行跟踪和关联;最后利用2D锥桶和3D-proposal做关联,去除一些噪声。可以看得出来,最终的标注方案,实际上是比较依赖于2D锥桶检测大模型,它的准召率也依赖于2D锥桶大模型。最后,通过2D和3D交叉验证的方式,得到锥桶的标注结果。我们的方案可以实现锥桶标注的准召率高于95%,测距误差50m范围之内小于5%。
这个demo展示了两个场景下的一些真值标注的效果,一个是泊车场景下,一个是行车场景下。对于一些2D检测出来,但是3D缺少的情况,可以采用标志为 ignore的方式,不参与训练。

针对这种情况,我们对Occupancy的方案进行了一些改进。主要思路是在整个过程中尽量减少对语义的依赖。在动静态分离的时候,并不是依赖于白名单信息,而是利用几何信息进行运动分割。分割完之后,将静态场景和动态场景分而治之,静态采用前面介绍的静态语义建图的方式来得到静态的点云;动态的话,主要采用Scene Flow或者ICP的方式,来进行动态点云的配准,最终得到整个场景的4D点云。同时,在生成每帧图像的时候,我们也会做图像和3D结果的cross check,最后来生成真值。
下面是一些案例,这个场景里面有很多的障碍物,像摆放的不规则、临时的红绿灯,里面还有只宠物狗、行人推的婴儿车。像这只宠物狗,能够比较好的识别出来。还有一些不规则的,像放在十字路口的临时红绿灯,也能够比较好的识别出来。我们针对Occupancy真值的性能做了一些定量的评测。针对50cm×50cm这样的小物体,准召率是高于92%。
接下来,我介绍一下面向量产场景的纯视觉标注方案。

纯视觉的标注方案,主要是利用视觉加上一些GPS、IMU和轮速计传感器的数据进行动静态标注。当然面向量产场景的话,不一定非要是纯视觉,有一些量产的车辆里面,会有像固态雷达(AT128)这样的传感器。如果从量产的角度做数据闭环,把这些传感器都用上,可以有效地解决动态物体的标注问题。但是我们的方案里面,是没有固态雷达的。所以,我们就介绍这种最通用的量产标注方案。
纯视觉的标注方案的核心在于高精度的pose重建。我们采用Structure from motion (SFM) 的pose重建方案,来保证重建精度。但是传统的SFM,尤其是增量式的SFM,效率非常慢,计算复杂度是O(n^4),n是图像的数量。这种重建的效率,对于大规模的数据标注,是没有办法接受的,我们对SFM的方案进行了一些改进。
改进后的clip重建主要分为三个模块:1)利用多传感器的数据,GNSS、IMU和轮速计,构建pose_graph优化,得到初始的pose,这个算法我们称为Wheel-Imu-GNSS-Odometry (WIGO);2)图像进行特征提取和匹配,并直接利用初始化的pose进行三角化,得到初始的3D点;3)最后进行一次全局的BA(Bundle Adjustment)。我们的方案一方面避免了增量式SFM,另一方面不同的clip之间可以实现并行运算,从而大幅度的提升了pose重建的效率,比起现有的增量式的重建,可以实现10到20倍的效率提升。

在单次重建的过程中,我们的方案也做了一些优化。例如我们采用了Learning based features(Superpoint和Superglue),一个是特征点,一个是匹配方式,来替代传统的SIFT关键点。用学习NN-Features的优势就在于,一方面可以根据数据驱动的方式去设计规则,满足一些定制化的需求,提升在一些弱纹理以及暗光照的情况下的鲁棒性;另一方面可以提升关键点检测和匹配的效率。我们做了一些对比的实验,在夜晚场景下NN-features的成功率会比SFIT提升大概4倍,从20%提升至80%。
得到单个Clip的重建结果之后,我们会进行多个clips的聚合。与现有的HDmap建图采用矢量结构匹配的方案不同,为了保证聚合的精度,我们采用特征点级别的聚合,也就是通过特征点的匹配进行clip之间的聚合约束。这个操作类似于SLAM中的回环检测,首先采用GPS来确定一些候选的匹配帧;之后,利用特征点以及描述进行图像之间的匹配;最后,结合这些回环约束,构造全局的BA(Bundle Adjustment)并进行优化。目前我们这套方案的精度,RTE指标远超于现在的一些视觉SLAM或者建图方案。




右图是一个局部的放大图,可以看出一些重建细节。从图中可以看到Nerf重建出来的路面的字体,都是清晰可见。重建细节已经非常精致,在这上面来做标注的话,标注的效率也会得到极大的提升。

左边这张图展示的是把Nerf重建的结果和卫星图的对比效果。可以看到,整体的空间位置和形状上也都是非常吻合的。标注的初始阶段,我们将路面重建结果导入到标注工具中进行标注,累积到一定数据量之后,可以训练云端大模型进行辅助标注,提升标注效率。

接下来我们再介绍一下其它静态要素的标注,例如交通牌、红绿灯和锥桶的标注。这三类物体的标注方案基本是一致的,在这里我们以交通牌为例,介绍一下这些静态要素的标注方案。
标志牌的真值生成和路面一样,也是依赖于Parallel SFM提供的相机的初始pose和初始的3D点。与此同时,我们采用2D检测或者Segment Anything Model (SAM) 对在2D图像进行处理,得到交通牌的角点。需要注意的是,获取角点的方式,会比检测结果更加贴合交通牌,举个简单的例子,一个矩形的标识牌,投影到图像上,将会是一个多边形,传统的2D检测方法,无法完全贴合,或导致重建存在偏差。
利用Parallel SFM提供的相机pose以及3D稀疏点,我们可以很容易的3D-2D的对应关系,以及2D时序上的跟踪关系,之后可以构造三角化的优化范式,通过调整3D空间中交通牌角点的位置和朝向,通常还需要确保交通牌的矩形约束,使得角点在2D图像空间中的重投影误差最小。

这是一个标志牌的重建的结果投影到原图的效果。可以看到,投影下来它和自车的运动基本上是完全自洽的,不会因为车辆抖动而存在较大的偏差,多模的方案会存在非常明显的抖动的情况。这也说明了交通牌的3D重建结果和相机pose的恢复都是非常准确的。
右面的图是标志牌的重建结果在3D空间中的一个可视化结果。把3D的标志牌和3D稀疏的点放在一起,可以看到贴合度是非常好的。
对于纯视觉重建方案,我们主要通过两种方式进行评测:一种是评估pose的指标,例如以Lidar odometry为真值评测RRE和RTE指标;另一种是通过计算重投影误差进行评估。前者能够评测重建的pose精度和尺度的准确性,后者能够评测pose精度和3D重建结果的准确性。用这两个评测方式,能够比较合理地对纯视觉重建方案的性能进行评测。我们这种云端纯视觉重建的方案,相比较于目前业界主流的视觉众包建图方案,有更高的重建精度。与多模的方案相比,在精度上完全可以做到多模的精确水平。

纯视觉的动态标注方案是非常有挑战性的,尤其是单目的纯视觉方案,最大的挑战性在于动态物体的重建,因为运动物体是不符合传统3D多视图几何假设的,所以很难通过传统的方法进行重建。业界的一些单目(周视视角之间的overlap较小)测距的算法,主要是通过三角测距,需要很强的路面几何假设、真实的物体尺寸以及准确的相机pose。真实场景中很难满足的这些假设,导致测距精度受限,能满足的场景也受限,无法用来做真值的生成。
我们采用了采用了一种大模型+轨迹优化的的方式进行纯视觉的动态物体的标注。首先,我们会在云上训练一个容量更大、性能更高的BEV 3D检测的模型。这个模型输入的是11V的图像,输出的是动态物体3D BBox检测结果。利用这个检测结果结合自车提供的pose信息,就可以走前面介绍的多模标注方案,将动态物体投射到统一的全局坐标系之下,进行时序跟踪和轨迹优化,最后来生成检测、跟踪、预测以及各种属性的真值。
与多模的方案相同,优化后的3D检测结果会投影到对应的图像上,和2D检测大模型的效果进行交叉对比,实现自动质检,同时也可以获取更多的属性。
我们从几个方面来解释这套方案的合理性:1)虽然视觉大模型的测距精度很难达到Pandar128 Lidar检测的效果, 但是这两种模型的真值(纯视觉动态标注生成的真值我们称为伪真值)对于端上模型的提升性能是接近的,这个我们已经在实践中进行了验证;2)云上模型具备更好的跨车泛化性,这就意味着可以通过少量的采集车维护这个大模型来满足所有量产车的伪真值需求。

这是我们纯视觉动态标注方案生成的真值的效果。从demo中可以看到,生成的轨迹非常稳定,真值的有效的感知范围是150m,测距的误差小于5%,AP大于90%,同时我们的方案支持不同视角个数(5v/6v/7v/11v)自由切换。我们的方案目前已经在量产中得到应用。

对于纯视觉的通用障碍物检测也就是Occupancy感知,我们也做了一些探索。我们现在主要是采用Vidar的方案来进行标注,首先通过单目depth估计方案得到每个视角的depth map,之后通过depth来转成3D空间中的点云,生成之后将点云voxel化生成Occupancy的真值。
单目深度估计,我们采用的是DRO的方案,但是针对我们的传感器布局特点做了一些改进。首先,我们的方案是自监督的,我们采用了多视角之间的空间约束和时序约束进行自监督。空间约束的话,其实就是不同的camera之间存在一些overlap,虽然比较小,但是也能够对这个模型的训练产生约束,提供一些尺度信息。时序上的约束,因为有SFM的基础,可以得到比较准确的相机pose,利用这个pose结合depth值,能够实现时序上的自监督约束。需要注意的是,空间约束可以对动态物体进行约束,但是时序约束只能对静态场景的进行约束。


4D-Label的标注运营平台

4D标注是数据闭环里面一个非常重要的模块,数据生产和标注是在云上运行,并且其它的模块共同构成一个完整高效的数据闭环系统。从端上数据返回上传到云上之后,会进行同类数据的挖掘,构建数据集,之后开始进行4D标注,得到这些标注的结果之后,进行模型的自动化训练,以及模型的更新。
这里我主要介绍一下云端的标注工具、数据挖掘手段以及数据链路。

此外我们还同通过引入一些算法提升工具的标注效率。比如静态标注,因为底层是有重建的相机pose,可以产生时间和空间的关联,标注3D空间的时候,可以实时地看到它在2D上跟图像的对齐效果。同时,也可以在图像上进行编辑,来调整3D空间中的结果。在动态的标注过程中,因为有时序上跟踪的结果,所以只需要少量的人工参与,便能够生成物体在时序上的整条轨迹。如果这个轨迹存在偏差,人工可以进行一些调整,调整完之后,整个系统会自动进行全部的轨迹更新,非常高效。此外,标注工具是基于web端开发的,能够支持千人的并发作业,能够满足大规模数据标注的需求。

现在整个HD Flow支持的一些节点,除了上次提到的,还有训练前的环节如数据挖掘、4D标注、评测集的构建、数据分布的统计,以及训练过程中的一些闭环像训练数据的打包、模型训练、模型发版和模型评测。


同时,我们也构建了完整的数据血缘,从数据返回到标注到模型更新,我们可以准确的追踪每一批数据在中间的各个环节的数据的使用率和处理情况,通过数字化的方式对整个数据运营的成本进行更精细地把控和优化。

首先介绍一下4D-Label和数字孪生或者数据仿真之间的关系。4D-Label一个重要的模块,就是对场景进行4D重建并且得到结构化的信息(即标注的动静态真值)。数据仿真的核心模块在于场景库的构建。得到大量的场景库之后,根据一定的规则进行新场景的合成,例如得到某个场景之后,把场景里面的车辆、运动物体,进行擦除、添加和编辑得到新的场景,并通过通过对新场景的渲染得到训练样本,也可以同时拿到结构化的数据来进行各种仿真,包括规控的仿真,感知的仿真等。所以,4D-Label相当于是数据仿真的一个重要的素材库。



在这里,我们举另一个简单的案例,采用Vidar合成不同安装位置的车型的真值。当车辆的形状发生改变的时候怎样复用已有的数据。像特斯拉因为是单一车型,所以用了几何矫正(Homography 变换)的方式,把相机归一化到同一平面上。但是,它存在很大的局限性,即只能解决相机是纯旋转的情况,而当相机有高度变化的时候,这种矫正的方法就不能够满足需求了。
如果相机存在高度变化,就需要获取场景准确的depth信息。利用前面提供的Vidar方案,可以获取每个像素的真值。虽然像素的深度值不是很准,但是利用来做视角的变换以及新视角的合成是足够用的。用这种方式,可以用来模拟当传感器发生变化的时候生成新的真值。用Vidar的方法本质上是一种对场景进行显式重建的方式,另一种方案是采用Nerf进行重建,这是一种隐式的重建方法,将场景表达成MLP进行重建、编辑和渲染,相比较于显式的重建效果更优,上面介绍的unisim方案就属于这一类。


把云上和端上的智驾搞成一体的智驾方案,可以减少维护的成本。云上不但是提供真值数据给端上模型,还可以把知识蒸馏给端上模型。而端上模型可以发掘一些corner case用于迭代云上模型。

这就是我今天要介绍的主要内容。最后,总结一下:
1)面向BEV的真值系统的4D-Label,是模型迭代效率和成本一个非常重要的因素。而迭代效率和成本,就是AI产品的核心竞争力。
3)在端上部署端到端模型是实现数据闭环的必经环节。一些重要的后处理任务,会从端上走到云上,成为一些真值标注的方案,甚至会成为云端的智驾方案,也就是我刚才介绍的云端一体的架构。
4)数据仿真合成会是解决corner case的一个非常有潜力的途径,将来一定会成为一个非常重要的智驾模块基础设施。
这就是我今天要介绍的主要内容。也欢迎大家关注我们之后在自动驾驶方面的课程,谢谢大家。