论文链接:https://arxiv.org/pdf/2303.12976.pdf
1. 动机和贡献
- 之前多视角的方法一般才有后融合的方式实现360°感知,即每个视角独立完成感知,然后利用空间关系进行融合。但存在的问题是,独立的单目感知其预测误差差异可能很大,导致融合困难,经常导致很多的FP。(当然冗余检测对安全性很重要)
- 汽车公司一般很多生产线,比如SUV,sedan等,每个车型的尺寸不一致,摄像头挂载的位置也不同。因此算法对相机的内外参的容忍度也很重要。
- 对于self driving而言,其实时性也至关重要。
本文贡献:
- 图像和bev 的特征抽取器使用NAS在特定硬件上搜索获得,高指标低延时
- 在特征层面实现对特征的融合。这样的做法有个好处是增大了对view 数的鲁棒性。
- 提出了一种基于MLP的2d-to-3d的隆起模块,该模块不依赖于深度估计,而是显示的利用了相机的内外参,这样当模型训练完成,因为相机内外参是输入参数,因此可以适用于不同的挂载方式。
- 所有的下游任务都被形式化为检测任务,能够直接利用上游结果。
其中第三点应该是本文的核心。
2. 本文方法
本文方法整体的pipeline如上图所示,输入是能够覆盖360°场景的多个视角的图像,以及每个视角对应相机的内外参。 图像首先送入到2D encoder中进行特征编码,这里不同的图像可以对应不同的encoder,也可以是相同的encoder,文中的方法和我们的方法相同,前视单独一个encoder,周视一个encoder,鱼眼数据一个encoder。然后 每个视角的图像特征经过 uplifted 操作转成BEV特征,多个视角的BEV特征通过add 操作形成全视角的BEV特征,然后在该BEV特征上即可进行类似2D图像上的3D目标检测操作,经过BEV encoder抽取特征用于下游的3D检测,free space和parking space的划分。
2.1 2D Image Feature Extractors
这里文中提到几点:
- 不同视角图像的encoder可以划分group,同一个group使用相同的encoder
- encoder结构是使用NAS搜索的,平衡了精度和延迟
- 结构中去掉了skip-connections以获得更高的吞吐量。
- 类似FPN的结构,coarser feature map经过上采样与finer feature map融合获得更丰富的语义信息。
2.2 Image-to-BEV Transformation and Fusion
本文方法的核心部分。
2.2.1 BEV 平面到BEV 网格
这个就是真实场景到模型表示的转换,BEV 网格以自车为中心点刻画周围平面的特征,每个网格表示一块区域,就是分辨率的概念。一般而言,一个网格表示的区域大小是相同的,也有随着距离变化分辨率发生变化的。本文使用 表示BEV网格。
2.2.2 2D图像到BEV的uplifting(隆起)操作
文章提供了一种基于MLP的数据驱动的相机到BEV的变换函数,该方法以查表的方式显式的利用相机的内外参,因此一旦模型训练好以及拿到相机的配置参数就能拿到较好的泛化性。
该方法的motivation 是注意到图像中像素的行列与BEV上极坐标的位置有较强的几何关系, 具体而言,图像中的每一列都对应着BEV上以过消失点的一条曲线(这里说曲线的原因是因为存在相机畸变),而不像之前方法一样认为每一列对应BEV上的一条射线。那uplifting的目的就是学习出每一列到BEV对应曲线的拟合,从而分配特征。图2 左子图给出了图像每一列在BEV上的映射关系。形式化表述而言,使用表示图像的某一列,首先根据相机的内外参将该列的每一个像素点映射到BEV上并将他们转换为极坐标,即, 使用多项式拟合该极坐标下的曲线,注意每一列的曲线是不同的,从而对于图像任意列而言,给定其径向距离能计算出其角度。
假定相机能拍摄的最远距离为, 使用对数空间将径向距离划分 个bins,对数空间保证近处的分辨率更大,远处的分辨率更低。图像某一列的特征表示为, 那么BEV变换网络可以定义为, 于是通过查表法,极坐标表示的BEV每个位置的特征可以从图像中获得,从而构成BEV特征,其过程如图2右图所示。多个视角的BEV特征融合方法采用的加法,加法操作能够允许网络独立于相机视角个数。
2.2.3 基于MLP的BEV变换
上一节说的将图像的特征映射到BEV的函数 由MLP构成, MLP仅有一层隐层,且每一列的MLP不共享参数。这么做是因为MLP能够刻画全局的信息,由于图像本身损失了深度信息以及目标可能存在不同高度,这么做对将图像特征转换到准确的BEV位置很重要。
2.2.4 极坐标与笛卡尔坐标的对比
BEV网格 在下游的检测精度以及检测范围都很重要,对于自动驾驶而言,高速路段甚至需要预测前向200m,一般笛卡尔坐标系是0.25m的分辨率,相当于1600x1600的网格,太大。而且在实践中,一般越近需要的精度越高,而越远的距离段分辨率可以降低。而极坐标按角度和log空间的深度划分,可以有效使用小的BEV大小刻画整个范围。
2.2.5 BEV 特征抽取
使用基于CNN backbone提取融合后BEV的特征,提取后的特征用于3D检测头。
3. 感知任务
3.1 3D目标检测
- 本文检测任务对应9个自由度:位置点, 长宽高,以及roll, yaw, pitch角决定的方向矩阵, 这之前方法一般仅估计yaw角;
- 为了避免NMS的后处理,采用set prediction的方式匹配gt和预测;
- 具体而言,假设输入特征,然后具有5个head,分别对应class,位置,大小,角度和立方体参数的不确定度,和FCOS任务头很类似。
- classification 头预测类,第1个元素表示是否是前景目标
- position 头, 分别表示径向距离、角度和高程,也是基于anchor的
- dimension头, 长宽高,单位为m
- orientation,预测yaw,pitch和roll的sine和cosine值
- 训练loss:
每个式子里的是用于自主学习loss权重时的正则项。都是L1损失,box 使用的是比值。
3.2 3D Freespace
Freespace, 也称为可行驶区域,指道路边界以内且没有被任何障碍物占据的区域。本文将Freespace表示为radial distance map(RDM), RDM是由等角度的bin和对应的距离来表示,每个bin只预测一个值,在生成gt时是从中心点发射射线,其射线与gt的polygon的交叉点构成Freespace的目标。这样的好处是可以直接使用预测结果构建freespace,而不用后处理。除了径向距离,每个bin还有一个边界场景label,如vehicle和vru等。于是每个freespace的gt label表示为, 是径向距离向量,是边界语义向量。
具体模型实现时,CNN+两个head,分别预测距离向量和语义向量。这里需要注意因为划分的是bins所以其输出的大小就是确定的,比如bins num=360,那就是预测的向量。
训练loss:
其中分类损失是标准的focal loss,而回归损失定义如下,这里说是iou其实就是比值回归。
其中表示第i个bin中的顶点到第i+1个bin中的顶点的向量。
3.3 3D Parking Space
车位检测需要预测的目标包括车位中心点位置,长宽和角度,角度0~180, 每个车位还划分为3类: 倾斜、侧方和垂直。模型和3D检测头一致(这里是说也用极坐标的方式?但看loss又不像) 损失函数一样包括回归和分类,回归函数如下
3.4 多任务学习
尽可能的让不同任务的loss赋值相近,因此每个任务的loss weight定义如下:
其中 是可以预先指定的先验,以针对某些更难或者更重要的权重,则保证不同loss的梯度量级相同。最开始时, 尽管 也需要手动调整,但其代价比调整要小很多。
4. 实验和结果
4.1 3D目标检测
- position error:相对radius 误差, 绝对角度误差(度)和绝对高度误差(米)【实验里的该值不知道咋融合的】
- Orientation error: ,旋转矩阵的相似度
- shape error:LWH的相对误差
- safety mAP:安全区域内的mAP
4.2 3D Freespace
- Relative gap: 相对径向距离误差
- Absolute gap: 绝对径向误差(meter)
- Success rate: 成功估计的angular bin的比例。relative gap小于10%则认为成功估计
- Smoothness: 径向距离的总变化值
- Classification error: 每个边界点的分类误差
4.3 Parking Spaces
这里需要注意的是其匹配阈值IOU更加严格,需要大于70%
具体实验这里不贴了,贴一点比较感兴趣的。
4.4 IPM vs MLP based 2D-to-BEV view Transformation
4.5 针对不同生产线的泛化性
这里不同产品线的相机内参差不多,但外参差距很大,可以发现一个产品线训练的模型,仅需其他产品线轻量的finetune就能得到很好的性能。
4.6 可视化
5. 总结
- 该方法中将每一列图像以学习的方式投影到BEV平面,会考虑更多的高度信息,实验也表明其比IPM性能更好;
- 极坐标的表示形式更符合IPM后BEV的分布,使用极坐标确实能够更好的处理映射过程中的拖影问题;这个也能控制计算复杂度,也可以扩展到transformer结构。
- Freespace的形式化表述方式感觉也更加合理。