BeMapNet:End-to-End Vectorized HD-map Construction with Piecewise Be ́zier Curve——论文笔记

参考代码:BeMapNet

1. 概述

介绍:对于高精地图中关于地面车道线相关检测这篇文章提出了一种基于贝塞尔曲线的多片段检测方式,也就是将一条车道线划分称为不同的片段,并对这些片段使用贝塞尔曲线拟合,这样可以减少由于曲线本身复杂而导致单条贝塞尔曲线的学习难度,并且表达的曲线更加准确。同时为了提升地面车道元素的感知性能,在感知头部分还提出了Point-Curve-Region Loss,它由多种loss联合组成用于在多个维度下帮助网络收敛。同时还在bev维度上添加语义分割分支和实例分割分支用于帮助网络收敛。这个方法整体是构建在transformer网络之上的,从bev特征图构建、实例分割和最后贝塞尔曲线拟合都是,因而计算开销也是相对较大的,而且文章实验设置的感知范围是左右10米前后30米,整体感知距离不是很远。此外文章设计了完备消融实验,对涉及到的超参数进行仔细对比,有这篇文章工作感兴趣的伙伴可以重点关注一下。

在下图中比较了文章的多片段贝塞尔曲线与单贝塞尔曲线拟合结果之间的差异:
在这里插入图片描述
可以从上图中看到多片段的贝塞尔曲线对扭曲形状的车道线拟合效果更好,但是这里就需要确定曲线分段的标准和具体做法,不过遗憾的是目前该方法还未开源,等开源之后再对该部分实现进行探究。

2. 方法设计

2.1 整体pipeline

在下图中详细展示了文章算法的结构:
在这里插入图片描述
在上图中展示算法的核心组成部分:

  • 1)bev特征转换模块:使用bev query实现bev特征图构建,并在这个特征图上添加语义分割辅助分支
  • 2)贝塞尔曲线实例模块:这部分输出一条完整的车道线区域,也是通过query的形式得到,query经过transformer之后作为单个实例的动态表达参数这样便可与输入特征一起得到车道实例mask,这部分实例mask也是添加的辅助分支
  • 3)贝塞尔曲线拟合:这里会预测一个车道实例包含贝塞尔曲线片段的个数、对应控制点和offset偏差

首先需要确认贝塞尔曲线和polyline两种建模方式的性能比较:
在这里插入图片描述
在这篇文章给出的结果是贝塞尔曲线的结果是好于polyline的,这个与之前方法LaneGAP,Lane Graph as Path给出的结论不太一致,不过这两篇对贝塞尔曲线的用法也不相同,需要根据实际实验结果进行选择。

2.2 bev特征转换

这里特征转换使用bev query构建,在之前的PETR方法中使用相机的内外参数构建了特征的位置编码 f c p e f_c^{pe} fcpe,对于图像特征上的点依据内外参构建的映射关系为:
d ⋅ A − 1 ⋅ p c f i = K i ⋅ T i ⋅ p c w d\cdot A^{-1}\cdot p_c^{f_i}=K^i\cdot T^i\cdot p_c^w dA1pcfi=KiTipcw
除此之外,还通引入bev空间的位置编码 f b p e f_b^{pe} fbpe,而bev空间到bev特征的变换需要一个尺度变化因子 K \mathcal{K} K:
p b f = K ⋅ p b w p_b^f=\mathcal{K}\cdot p_b^w pbf=Kpbw
transformer中位置编码是一个很重要的存在,它的好坏直接影响了收敛性和网络性能,则首先明确显式的位置编码比可学习的位置编码要好,对比见下表所示:
在这里插入图片描述
接下来确定bev和camera的位置编码在之前基础上怎么进行组合能带来更好收益,则做了下面4种消融实验,见下表所示:
在这里插入图片描述
对应的4种网络结构的可视化结构见下图所示:
在这里插入图片描述
在位置编码之外,query的分辨率也是一个较大的影响因素,这已经在GKT方法中得到验证,也就是越大的bev分辨率性能越好,那么什么样的分辨率适合文章的方法呢?见下表:
在这里插入图片描述
这细节可真到位。。。

在得到bev特征之后便是需要预测出车道线结果了,这里也是采用query的形式,不过在生成最后贝塞尔曲线之前还添加了语义分割和实例分割作为辅助(辅助分割分支采用ce loss+dice loss的形式)。这两个辅助分支对加速网络收敛和提升性能有较大帮助:
在这里插入图片描述

2.3 贝塞尔曲线GT表达

文中将一条车道线的点( P ∈ R m ∗ 2 P\in R^{m*2} PRm2)贝塞尔曲线表达描述为Bernstein matrix( B ∈ R m ∗ n B\in R^{m*n} BRmn)与控制点矩阵( C ∈ R n ∗ 2 C\in R^{n*2} CRn2)相乘的表达:
P = B C P=BC P=BC
那么对于一条车道线它经过固定点采样(这个点数量也会对性能有影响,具体可以见原文)之后,便需要对这条车道线构建贝塞尔曲线表达(在曲线段数和阶数固定情况下),其伪代码如下:
在这里插入图片描述

上文提到的贝塞尔曲线数量和阶数对性能的影响,见下表(下图只是部分,完整请参考原文):
在这里插入图片描述

2.4 贝塞尔曲线预测头

这里需要说明的是对于不同的车道线形式会单独设置它们的query(对于lane-divider, ped- crossing, road-boundary分别设置了),而不是统一query之后通过分类去分别。
在这里插入图片描述

在上述内容中transformer得到的单个实例表达 z ⃗ ∈ R C \vec{z}\in R^C z RC会被划分成为 u u u个不同部分,再与bev位置编码做矩阵乘法得到对应的感知结果(预测控制点和offset属性),其结构见下图所示:
在这里插入图片描述
除此之外,由于每条车道线的贝塞尔分段数量是不一样的,则这里采用FC+softmax后积分的形式预测真实贝塞尔曲线段的数量,单纯FC与FC+softmax方法性能比较:
在这里插入图片描述

生成预测结果之后需要与GT进行匹配,不过文章中对这部分并没有提及,则具体的匹配策略还需要等源代码开源之后才知道。

而生成的结果是通过(PCR-Loss,Point-Curve-RegionRecoveryLoss)构建的,也就是分别对控制点、曲线点序列、曲线区域进行监督,三种形式见下图:
在这里插入图片描述

  • 1)控制点:控制点采用逐点的L1损失, L p o i n t = 1 C ^ ∑ i = 1 ∣ C ^ ∣ ∣ ∣ C i − C ^ i ∣ ∣ 1 L_{point}=\frac{1}{\hat{C}}\sum_{i=1}^{|\hat{C}|}||C_i-\hat{C}_i||_1 Lpoint=C^1i=1C^∣∣CiC^i1
  • 2)序列点:这里是由预测控制点进行采样得到的曲线序列点与真实序列点之间的L1损失, L c u r v e = 1 P ^ ∑ i = 1 ∣ P ^ ∣ ∣ ∣ P i − P ^ i ∣ ∣ 1 L_{curve}=\frac{1}{\hat{P}}\sum_{i=1}^{|\hat{P}|}||P_i-\hat{P}_i||_1 Lcurve=P^1i=1P^∣∣PiP^i1
  • 3)曲线区域:在曲线点上做半径为 w w w的膨胀操作的mask,用这个mask作为曲线区域监督, L r e g i o n = L d i c e ( S ( M , P ^ # ) , S ( M ^ , P ^ # ) ) L_{region}=L_{dice}(S(M,\hat{P}^{\#}),S(\hat{M},\hat{P}^{\#})) Lregion=Ldice(S(M,P^#),S(M^,P^#))

这个部分完整损失函数为:
L P C R = λ p L p o i n t + λ c L c u r v e + λ r L r e g i o n L_{PCR}=\lambda_pL_{point}+\lambda_cL_{curve}+\lambda_rL_{region} LPCR=λpLpoint+λcLcurve+λrLregion
这三个部分的损失函数对性能的贡献见下表:
在这里插入图片描述

3. 实验结果

在这里插入图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值