参考代码:pytorch-auto-drive
1. 概述
介绍:本文讨论分析了车道线建模,指出现有的车道线检测方法一般如下:segmentation-based、key_points-based、polynomial-based,当然,还有其他类型的车道线建模表达方法。在此基础上,利用曲线描述函数建模车道线,节省了许多特征解码的相关问题,只需要网络来预测相应曲线的参数。但是在polynomial-based方法中其多项式回归对网络来讲是较难,导致的结果就是其性能相比前面提到的两种类型有较大的差距。本文从贝塞尔曲线的描述中学习,通过预测级贝塞尔曲线来描述车道线(曲线描述可以通过少量控制点来实现),并通过水平折半反转和可变卷积来提高特征集成和表达能力(来自于车道线在场景中相对于车中轴的对称分布)。
上述提到的4中对与车道线的描述见下图所示:
本文的车道线是通过预测贝塞尔曲线控制点来实现的,然后发现相应数据集下的车道线数量是固定的,因此自动驾驶场景车道变化复杂,其适应性可能存在一些问题。
:关于贝塞尔曲线的相关原理基础可以参考如下资料: 贝塞尔曲线原理(简要说明)
2. 方法设计
2.1 网络pipeline
文章的整体pipeline如下图所示: 从上图可以看出,它包含了文章提出的两个创新点:feature flip特征融合与贝塞尔曲线拟合头。
2.2 Feature Flip
这部分用于提高特征图的感知能力。它是通过可变形卷积实现特征的增强表达。其网络结构如下图所示: 该网络结构的思想来自于对下图中实际数据的观察。其思想是通过对称原理弥补左右图像区域车道线不明显造成的检测问题。就我个人而言,我认为这样的假设是有道理的,但它的假设相对较强。
2.3 拟合贝塞尔曲线
由控制点和偏置项决定的贝塞尔曲线可以描述为: B = ∑ i = 0 n b i , n ( t ) P i , 0 ≤ t ≤ 1 \mathcal{B}=\sum_{i=0}^nb_{i,n}(t)\mathcal{P}_i,0\le t \le1 B=i=0∑nbi,n(t)Pi,0≤t≤1 其中,生成曲线上每一个点的偏移项在阶数 n n n(文章中将其设置为3)下的描述为: b i , n = C n i t i ( 1 − t ) n − i , i = 0 , … , n b_{i,n}=C_n^it^i(1-t)^{n-i},i=0,\dots,n bi,n=Cniti(1−t)n−i,i=0,…,n
在原始的标注文件中给出的是描述车道线的点坐标,因而需要将这些数据转换到由贝塞尔曲线控制的参数下表达,对此文章是通过最小二乘法的方式计算白塞尔线的GT。
在之前的一些工作中通过L1损失函数的形式去监督贝塞尔曲线的控制点,如下图的(a)图所示,但是这样的结果是由控制点生成的曲线效果并不与实际曲线贴合效果直接关联。对此文章参考polynomial-based中的策略(图c),通过sample采样(文中取采样点为100)的方式去计算曲线的贴合程度。 那么对于文章中提到的曲线采样点匹配策略是通过枚举的形式得到的,其描述为: π ^ = arg max π ∈ ∏ G N ∑ i G Q i , π ( i ) \hat{\pi}=\argmax_{\pi\in\prod_G^N}\sum_i^GQ_{i,\pi}(i) π^=π∈∏GNargmaxi∑GQi,π(i) 其中, N , G N,G N,G代表的是采样的点集和GT点集, π ( i ) \pi(i) π(i)代表的是第 i i i车道线。那么匹配的度量是: Q i , π ( i ) = ( p ^ π ( i ) ) 1 − α ⋅ ( 1 − L 1 ( b i , b ^ π ( i ) ) ) α Q_{i,\pi}(i)=(\hat{p}_{\pi(i)})^{1-\alpha}\cdot(1-L_1(b_i,\hat{b}_{\pi(i)}))^\alpha Qi,π(i)=(p^π(i))1−α⋅(1−L1(bi,b^π(i)))α 其中, p ^ π ( i ) \hat{p}_{\pi(i)} p^π(i)代表的是第 i i i车道线的分类概率,且 α = 0.8 \alpha=0.8 α=0.8。 L 1 ( b i , b ^ π ( i ) ) L_1(b_i,\hat{b}_{\pi(i)}) L1(bi,b^π(i))代表的是对应采样点的差异,可参考上图b中的关联虚线。
首先,对于贝塞尔曲线的整体约束是使用L1的形式: L r e g = 1 n ∑ t ∈ T ∣ ∣ B ( f ( t ) ) − B ^ ( f ( t ) ) ∣ ∣ 1 L_{reg}=\frac{1}{n}\sum_{t\in T}||\mathcal{B}(f(t))-\hat{\mathcal{B}}(f(t))||_1 Lreg=n1t∈T∑∣∣B(f(t))−B^(f(t))∣∣1 对于车道线的分类使用的是加权的二值交叉熵的形式,此外还添加车道线二值分割损失,则整体的损失函数描述为: L = λ 1 L r e g + λ 2 L c l s + λ 3 L s e g L=\lambda_1L_{reg}+\lambda_2L_{cls}+\lambda_3L_{seg} L=λ1Lreg+λ2Lcls+λ3Lseg 其中, λ 1 = 1 , λ 2 = 0.1 , λ 3 = 0.75 \lambda_1=1,\lambda_2=0.1,\lambda_3=0.75 λ1=1,λ2=0.1,λ3=0.75。
2.4 消融实验
上述2.3节中各分量对整体性能的影响:
3. 实验结果
CULane数据集性能比较: