车道线检测-BezierLaneNet-CVPR2022论文学习笔记

  • 论文:《Rethinking Efficient Lane Detection via Curve Modeling》
  • 代码:https://github.com/voldemortX/pytorch-auto-drive
  • 地址:https://arxiv.org/abs/2203.02431
  • 内容:使用 CNN,基于贝塞尔曲线拟合车道线

整体结构

车道线检测-BezierLaneNet-CVPR2022论文学习笔记_第1张图片

特征提取器:三层 ResNet 结合 RESA 模块。
特征提取器上还要加一个辅助分支:分割分支

模型输出的东西

贝塞尔曲线的四个控制点 P i \mathcal{P}_i Pi,以及车道线的存在性。

三阶贝塞尔曲线的表达式:

B ( t ) = Σ i = 0 3   b i , 3 ( t ) ⋅ P i ,      0 ≤ t ≤ 1 b i , n = C n i t i ( 1 − t ) 3 − i ,      i = 0 , 1 , 2 , 3 \begin{align} \mathcal{B}(t)&=\Sigma^3_{i=0}\ b_{i,3}(t)\cdot\mathcal{P}_i,\ \ \ \ 0\le t\le 1\\ b_{i,n}&=C^i_{n}t^i(1-t)^{3-i},\ \ \ \ i=0,1,2,3 \end{align} B(t)bi,n=Σi=03 bi,3(t)Pi,    0t1=Cniti(1t)3i,    i=0,1,2,3

特征的水平翻转融合

试图利用车道线的对称性(这部分起效的原因很值得探讨)。
车道线检测-BezierLaneNet-CVPR2022论文学习笔记_第2张图片

整体的损失函数

主要分为三部分:回归、分类、分割:

L = λ 1 L r e g + λ 2 L c l s + λ 3 L s e g \mathcal{L}=\lambda_1 \mathcal{L}_{reg}+\lambda_2 \mathcal{L}_{cls}+\lambda_3 \mathcal{L}_{seg} L=λ1Lreg+λ2Lcls+λ3Lseg

其中,

  • 分割的损失函数 L s e g \mathcal{L}_{seg} Lseg 不再赘述;
  • L c l s \mathcal{L}_{cls} Lcls 使用一个权重控制正负样本之间的数据不平衡:
    L c l s = − y log ⁡ p − w ⋅ ( 1 − y ) log ⁡ ( 1 − p ) \mathcal{L}_{cls}=-y\log p-w\cdot(1-y)\log (1-p) Lcls=ylogpw(1y)log(1p)
  • L r e g \mathcal{L}_{reg} Lreg 是预测曲线与 GT 之间的距离,表达式如下:
    L r e g = 1 m Σ i L 1 ( B ( t i ) , B ^ ( t i ) ) \mathcal{L}_{reg}=\frac{1}{m}\Sigma_{i}L_1(\mathcal{B}(t_i),\hat{\mathcal{B}}(t_i)) Lreg=m1ΣiL1(B(ti),B^(ti))

其中, { t i } \{t_i\} {ti} t t t [ 0 , 1 ] [0,1] [0,1] 上的均匀采样,每条车道线 m m m 个样本。

注意

  • 由于模型输出的是四个控制点,所以还需要将数据的 GT 转为控制点的形式。

  • 利用最小二乘法,可以得到控制点 GT 的生成方案:
    [ P 0 P 1 P 2 P 3 ] = [ k x 0   k y 0 k x 1   k y 2 ⋮       ⋮ k x m   k y m ] [ b 0 , 3 ( t 0 )    b 1 , 3 ( t 0 )    b 2 , 3 ( t 0 )    b 3 , 3 ( t 0 ) b 0 , 3 ( t 1 )    b 1 , 3 ( t 1 )    b 2 , 3 ( t 1 )    b 3 , 3 ( t 1 ) ⋮                      ⋱                      ⋮ b 0 , 3 ( t m )    b 1 , 3 ( t m )    b 2 , 3 ( t m )    b 3 , 3 ( t m ) ] T \begin{bmatrix} \mathcal{P}_0 \\ \mathcal{P}_1 \\ \mathcal{P}_2 \\ \mathcal{P}_3 \end{bmatrix}=\begin{bmatrix} k_{x_0}\ k_{y_0} \\ k_{x_1}\ k_{y_2} \\ \vdots\ \ \ \ \ \vdots \\ k_{x_m}\ k_{y_m} \end{bmatrix} \begin{bmatrix} b_{0,3}(t_0)\ \ b_{1,3}(t_0)\ \ b_{2,3}(t_0)\ \ b_{3,3}(t_0) \\ b_{0,3}(t_1)\ \ b_{1,3}(t_1)\ \ b_{2,3}(t_1)\ \ b_{3,3}(t_1) \\ \vdots\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ddots\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \vdots \\ b_{0,3}(t_m)\ \ b_{1,3}(t_m)\ \ b_{2,3}(t_m)\ \ b_{3,3}(t_m) \end{bmatrix}^T P0P1P2P3 = kx0 ky0kx1 ky2     kxm kym b0,3(t0)  b1,3(t0)  b2,3(t0)  b3,3(t0)b0,3(t1)  b1,3(t1)  b2,3(t1)  b3,3(t1)                                        b0,3(tm)  b1,3(tm)  b2,3(tm)  b3,3(tm) T

  • GT 与模型预测结果之间的匹配(Hungarian 算法求解):
    π ^ = arg ⁡ max ⁡ π ∈ Π G N   Σ i G   ( p ^ π ( i ) ) 1 − α ⋅ ( 1 − L 1 ( b i , b ^ π ( i ) ) ) α \hat{\pi}=\mathop{\arg\max}_{\pi\in\Pi^N_G}\ \Sigma^G_i\ (\hat{p}_{\pi(i)})^{1-\alpha}\cdot(1-L_1(b_i,\hat{b}_{\pi(i)}))^\alpha π^=argmaxπΠGN ΣiG (p^π(i))1α(1L1(bi,b^π(i)))α

其中,GT的数量是 G,预测出的数量是 N,且 G < N GG<N π ( i ) \pi(i) π(i) 是与第 i i i 个 GT相匹配的第 π \pi π 个预测。

你可能感兴趣的:(目标检测,CV,学习,机器学习,算法,车道线检测)