本文来源知乎巫婆塔里的工程师
自动驾驶的应用中通常会包括多种传感器,以提高系统的可靠性。从目前来看,常用的传感器包括可见光相机,激光雷达和毫米波雷达。这些传感器各有优缺点,也互为补充,因此如何高效的融合多传感器数据,也就自然的成为了感知算法研究的热点之一。
毫米波雷达感知算法的研究起步较晚,公开的数据库也不多,因此目前多传感器融合的研究主要集中在融合相机(图像)和激光雷达(点云)的数据。随着毫米波雷达在自动驾驶车辆中越来越多的应用,它的数据如何与图像进行融合,也成为了一个亟需解决的问题。
毫米波雷达的数据一般以Point Cloud(点云)的形式呈现。理论上说这与激光雷达的点云类似,只是每个点包含的数据不同:激光雷达的点包括X,Y,Z坐标和反射信号强度,而毫米波雷达的点包括X,Y(也可能有Z)坐标,RCS(物体反射面积)和Doppler(物体速度)。因此,很多激光雷达和图像的融合方法也可以用来融合毫米波雷达。但是,相对于激光雷达,毫米波雷达的点云非常稀疏(几十vs.几千),所以在算法上还需要一些特殊的设计。目前来看,大多数融合算法采用点云数据作为输入,但是也有部分工作采用更底层的雷达数据,比如Range-Doppler-Azimuth (RAD) Tensor。RAD数据包含更多的信息,需要的运算量也更大,但是对于深度学习来说,RAD是更适合的数据。下面会分别介绍基于这两种数据的融合方法,并对其中存在的问题和未来的发展方向进行分析。
扫码加入汽车毫米波雷达交流群探讨
一、基于Point Cloud的融合方法
按照融合层次的不同,这类方法又可以分为Feature-level Fusion(特征层融合),Data-level Fusion (数据层融合)和Decision-level Fusion (决策层融合)。
决策层的融合其实就是分别处理雷达和图像数据,将两种数据中得到的结果进行融合。这种方法需要考虑的是如何将不同可信度的结果整合到一起,采用的多是传统的基于滤波的策略。由于并没有充分考虑特征层面的互补性,这种方法对系统性能的提升有限,这里就不做介绍了。下面重点来讲一讲数据层融合和特征层融合。
1.数据层融合
其实这种方法叫做特征+决策融合更贴切一些,因为其核心思想是由一种传感器数据生成目标物体的候选(术语称作 proposal),然后在另外一种传感器数据上进行验证。这也就相当于融合了一种传感器的决策(proposal)和另外一种传感器的数据。
一般来说,由于雷达点云已经很接近于物体检测的结果,proposal会基于点云来生成。你可以理解为一个点就是一个物体proposal。或者对点云做一个简单的聚类,每个类作为一个物体。然后将生成的proposal从雷达坐标系(一般是Bird's Eye View, BEV)映射到图像坐标系,并根据proposal的距离来生成候选的boundingbox。最后就是用传统的基于CNN的方法(比如Faster RCNN)来对proposal进行分类。参考文献[2]中采用就是这类方法。
更复杂一些的方法会先将点云转换成BEV坐标下的图像,采用基于CNN的物体检测网络生成proposal。与直接由点云生成proposal相比,基于BEV图像的方法增加了计算量,但一般来说生成的proposal质量会高很多,毕竟CNN可以从点云中抽取更为丰富的物体和场景信息。文献[3]更是提出通过雷达BEV数据和相机图像数据同时生成proposal。来自两种数据的proposal通过几何映射可以进行对应,然后再将各自的特征进行融合,用全连接网络进行分类。这里的几何映射指的是BEV和图像坐标之间的映射,可以由雷达和相机的标定数据计算得到。
2.特征层融合
与数据层融合相比,特征层的融合更加底层一些,也更有利于神经网络也学习不同传感器之间的互补性,但是算法设计的复杂程度也相对较高。一般的做法是将点云数据映射到图像坐标系下,形成一个类似于相机图像的“点云图像”。比如在下图中的例子中,第一行是相机图像,第二,三行是对应range和doppler数据的点云图像,分别反映了场景内物体的距离和运动信息。点云图像和相机图像处于相同的坐标系下,因此可以很容易的通过神经网络进行融合。
文献[4]中提出将包含range和doppler的点云图像作为额外的输入数据,用ResNet进行特征提取后与相机RGB图像进行融合。这里所谓的融合其实就是一个简单的concatenation操作。这是深度学习中一个常见的操作,它将来自多个输入的特征图(feature maps)叠放到一起。后续一般会采用kernel大小为1x1的卷积层对其进行压缩,其实也就是一个加权平均的过程。网络会自动的从训练数据中学习权重,从而达到融合多种特征的目的。特征融合模块输出的是特征图,因此后续我们可以采用一些标准的网络结构来完成想做的任务,比如物体检测或者语义分割。在下图的例子中,融合模块(concat)输出的特征图经过ResNet和下采样来提取多分辨率下的特征。每种分辨率的特征图分别连接了detection head来完成物体检测的任务。文献[5]也提出了类似的方法,将点云的range和doppler信息投影到图像坐标系,采用concat操作来融合来自雷达和图像的特征,只不过后续的物体检测采用了YOLO网络。
文献[6]利用了点云的range和RCS信息,将其投影到图像坐标系下,得到基于range和RCS的点云图像。这些操作与之前介绍的方法基本没有区别,但是这篇文献处理了两个重要的问题。首先,传统毫米波雷达的点云数据非常稀疏,生成的点云图像包含的信息量也很少,不利于神经网络的特征学习。其实在传统的雷达数据处理中,单帧的点云数据也是很难处理的,一般都需要在时序上进行融合,比如occupancy grid中的做法。类似的,这篇文章也提出将多帧的点云(1秒钟的跨度)进行融合,以提高数据的稠密度。与occupancy grid中的做法类似,我们需要对多帧的点云进行ego motion的补偿,使其处于统一的坐标系下。这里需要注意的是,ego motion的补偿只对静态物体有效。对于运动物体来说,运动的轨迹会出现在融合后的点云中。其次,特征融合的一个重要参数就是在网络的哪一层上进行融合。这个参数一般都是通过经验或者实验来确定。这篇文章提出了一个新的方法,也就是将雷达数据和图像数据在不同层上分别进行融合,最后由网络通过学习来决定不同层次上融合的权重。
在前面介绍的方法中,不管是在单一层上[4,5]上还是多层上[6]进行融合,基本的操作都是采用concat将多种数据叠放在一起并由网络进行加权平均。这种做法可以通过学习得到不同传感器数据的权重,但是这些权重是全局性的,无法反映局部区域的重要性。举个不太严谨的例子,在自动驾驶的应用中,车辆正前方近处的物体其重要性要远大于侧面远处的物体。为了体现这种局部区域的重要性区别,文献[7]提出利用注意力机制(attention)来对特征图的不同位置进行加权。具体来说,首先还是通过几何映射生成雷达点云图像,这个图像经过一系列网络操作后生成attention map,并将其与相机图像生成的特征图相乘。这里的相乘操作是对每一个像素分别进行的,也就相当于用attention map上的每一个像素值对图像特征图的对应像素进行加权。Attention map上像素值的大小反映了该区域的重要程度。经过attention map的加权后,我们得到的数据依然是以特征图的形式存在,后续的操作与其他文献中的方法没有太大区别。只是该文献采用了类似RetinaNet的结构来完成物体检测的任务。
值得一提的是,作者将attention map与其他融合方法进行了实验对比,比如multiply,add,concatenation。结论是基于attention map的方法在物体检测的效果上显著的优于其他融合方法。
文献[7]中的attention map由雷达数据生成,但是理论上说每种传感器数据都可以生成attention map。文献[8]就是在这个方向上做了进一步的扩展。具体来说,该方法将所有同步的传感器的数据(可见光相机,近红外相机,激光雷达,毫米波雷达)映射到统一的图像坐标系下,并以此生成相应的熵图像(entropy map)。不同传感器的特征图通过concat操作叠放到一起,并与经过sigmoid处理后的熵图像进行像素点相乘操作,得到最终的特征输出。这里所谓的熵图像可以通过对图像的局部处理得到,熵图像中的每一个像素值都反映了该局部块(16x16像素)的信息熵,也就是包含信息量的大小,你也可以将其理解为一种特殊的attention map。需要注意的是,这个局部信息熵图像并不是通过学习得到,因此可以更好的处理罕见数据(比如说文中提到的各种极端天气情况)。如果采用基于attention的方法,那么就需要在各种天气情况下采集大量数据用于网络学习,这显然是非常费时费力的。
总结一下,对于雷达点云数据,与相机图像的融合大多在较低的特征层上进行,这也是为了充分利用神经网络的特征学习能力。融合的方法主要有两种:相加或者相乘。前者将来自不同传感器的特征图做全局的加权平均(通过concat和1x1卷积实现)。后者将来自不同传感器的特征图相乘,可以理解为用某个传感器的数据对另一个传感器的数据进行局部加权。通常来说,有用的分类信息会更多的隐藏在局部区域中,不同局部区域的重要性也不尽相同,因此相乘的方式一般会取得更好的结果。
扫码加入汽车毫米波雷达交流群探讨
二、基于RAD Tensor的融合方法
通常来说,毫米波雷达的点云都非常稀疏,很多有用的信息已经在雷达信号处理的过程中(参考CFAR算法)被过滤掉了。因此,毫米波雷达感知算法的研究开始慢慢转向直接利用深度神经网络处理雷达的底层数据,比如Range-Azimuth-Doppler Tensor。那么,将RAD数据与相机图像数据进行融合,也就自然的成为了新的研究增长点。
文献[9]提出将RAD数据(极坐标)和图像数据都转换到BEV坐标(笛卡尔坐标系)下。RAD其实可以看作极坐标下的多通道图像,其通道是doppler特征。做完坐标转换之后就可以看作BEV下的多通道的图像。同样的,相机图像做完坐标转换后也可以看作BEV下的多通道(比如RGB)图像。两种数据处于同一坐标系下,后续的处理就相对简单了:文中使用了基于concat的方式将两种数据在多尺度上进行了融合。
这个方法本身没有太多可介绍之处,但是作者提出的两个实际应用中的问题值得讨论一下:
1.图像转BEV坐标时对平坦路面的假设。作者按照美国洲际公路最大6%的坡度估算,在雷达的最大可视范围处会有8厘米的误差。如果这个误差远小于所用雷达的距离分辨率,那么可以将其忽略,否则就需要特别考虑。
2.各个传感器之间在时序上的对齐。该文中采用LiDAR数据进行自动标注,因此需要考虑三种传感器之间的对齐。理论上说,任意时间点的物体标注数据可以通过插值的方式来得到,但是对于雷达和图像数据就没办法这样做了。该文献中是以雷达数据为基准,在时间轴上寻找距离其最近的图像数据。如果传感器的帧率比较低的话或者车辆运动较快时,这种方法会带来较大的误差,因此需要更进一步的研究。
此外,该文献在实验中对比了不同的训练方法,不同传感器的贡献等等。这些对比对于理解和设计多传感器融合系统非常有帮助,感兴趣的朋友可以自己去看看论文,图表较多这里就不一一罗列了。
文献[10]提出的RODNet是一个较新的工作,并且在公开数据库CRUW上进行了测试。实际上,这个工作的融合部分在于利用多传感器数据生成标注信息,也就是下图中的Teacher分支。对于网络预测部分,也就是下图中的Student分支,图像数据并没有参与。对于Teacher分支,基于RGB图像的物体检测结果与雷达点云(也就是CFAR detection)相结合,得到物体的标注,用于训练检测网络。至于Student分支,其实就是一个基于底层雷达数据的物体检测网络。当然这里面有一些特别的设计。比如说,输入数据并不是标准的RAD,而是Range-Azimuth-Chirp Tensor。在通常的雷达信号处理中,对Chirp维度做FFT会得到Doppler信息,但是这篇文章采用神经网络来做这一步,以期更好的提取物体的运动信息。
基于雷达RAD数据的深度学习算法研究刚刚起步,因此融合RAD和图像数据的方法也并不多,以上两篇文章分别算是在特征融合和数据融合上做的比较好的工作。
三、未来发展趋势
总的来说,融合毫米波雷达和图像数据的研究工作不是很多,其中大多数方法采用雷达点云数据,将其映射到图像坐标系下后再与相机数据进行融合。这种方式相对于图像检测网络来说,附加的计算量的较少,对雷达硬件的要求的也相对较低。但是毫米波雷达的点云非常稀疏,包含的信息量有限,因此采用更加底层的雷达数据将会成为接下来的主流研究方向。个人认为,作为未来的发展方向,融合底层雷达数据和图像数据的算法至少还需要解决以下问题:
1.坐标统一问题。雷达RAD数据是BEV坐标,而图像数据则是透视坐标,如何将两种数据映射到统一的坐标系下是设计融合算法的关键。文献[9]中将相机图像映射到BEV坐标,但是可以看到转换后的图像有很大的畸变,不利于提取物体信息。另外一种可能是将雷达数据看做稠密的点云,并将其映射到图像坐标下。
2.数据同质问题。即使将雷达和图像数据映射到一个坐标系下,其数据本身也存在着巨大的差异。需要设计不同的网络结构来对不同质的数据进行处理,使其在统计分布上尽可能的一致。只有这样,后续的融合才有可能带来性能的提升。
3.时序对齐问题。由于不同传感器的采样频率不同,各传感器的数据之间会有一定的时间差。这会带来数据的不一致性,尤其是在车辆或目标物体高速运动的情况下。
参考文献:
文章来源于:知乎巫婆塔里的工程师
Recommended reading
阅读原文,即可报名
The original article was posted on the WeChat official account "Smart Car Club."毫米波雷达数据和相机图像的融合算法详解