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


    • 论文:《A Keypoint-based Global Association Network for Lane Detection》
    • 代码:https://github.com/Wolfwjs/GANet
    • 地址:http://arxiv.org/pdf/2204.07335
    • 内容:使用 CNN,基于关键点检测车道线

    整体结构

    在这里插入图片描述

    模型还有一个补充分支(Compensation Map δ ^ y x \hat{\delta}_{yx} δ^yx)没有在上图中画出来。该分支的任务是减小被 stride r 带来的量化误差,其损失函数为:
    L q u a n t = 1 H ′ × W ′ Σ y x ∣ δ ^ y x − δ y x ∣ \mathcal{L}_{quant}=\frac{1}{H'\times W'}\Sigma_{yx}|\hat{\delta}_{yx}-\delta_{yx}| Lquant=H×W1Σyxδ^yxδyx

    其中, δ y x = ( x i j r − ⌊ x i j r ⌋ , y i j r − ⌊ y i j r ⌋ ) \delta_{yx}=(\frac{x^j_i}{r}-\lfloor \frac{x^j_i}{r}\rfloor, \frac{y^j_i}{r}-\lfloor \frac{y^j_i}{r}\rfloor) δyx=(rxijrxij,ryijryij⌋) H ′ = H r H'=\frac{H}{r} H=rH W ′ = W r W'=\frac{W}{r} W=rW

    文中,每条车道线用 K 个关键点表示,这些关键点是经过采样得到的,假设每张图片中的车道线数目是 N:
    l i = { p i 1 , p i 2 , ⋯   , p i K } i = 1 N l_i=\{p^1_i,p^2_i,\cdots,p^K_i\}^N_{i=1} li={pi1,pi2,,piK}i=1N

    模型输出的东西:

    对每条车道线,模型预测其每个关键点。

    各个模块:

    1. 关键点预测模块

    用一个 H r × W r \frac{H}{r}\times \frac{W}{r} rH×rW 的 Confidence Map 描述某一点是车道线关键点的概率。

    构建对应的GT:使用非归一化的高斯核生成GT,在两个高斯Map的重叠处取两者在该处的最大值。
    Y y x = exp ⁡ ( − ( x − x ~ ) 2 + ( y − y ~ ) 2 2 σ 2 ) Y_{yx}=\exp(-\frac{(x-\tilde{x})^2+(y-\tilde{y})^2}{2\sigma^2}) Yyx=exp(2σ2(xx~)2+(yy~)2)

    其中, ( x ~ , y ~ ) (\tilde{x},\tilde{y}) (x~,y~) 是关键点的位置。

    该模块的 损失函数
    L p o i n t = − 1 H ′ × W ′ Σ y x { ( 1 − Y ^ y x ) α log ⁡ Y ^ y x                          Y y x = 1 ( 1 − Y y x ) β Y ^ y x α log ⁡ ( 1 − Y ^ y x )            o t h e r w i s e \mathcal{L}_{point}=\frac{-1}{H'\times W'}\Sigma_{yx}

    {(1Y^yx)αlogY^yx                        Yyx=1(1Yyx)βY^yxαlog(1Y^yx)          otherwise" role="presentation" style="position: relative;">{(1Y^yx)αlogY^yx                        Yyx=1(1Yyx)βY^yxαlog(1Y^yx)          otherwise
    Lpoint=H×W1Σyx{(1Y^yx)αlogY^yx                        Yyx=1(1Yyx)βY^yxαlog(1Y^yx)          otherwise

    2. 起始点回归

    用一个 H r × W r × C \frac{H}{r}\times \frac{W}{r} \times C rH×rW×C 的 Offsets Map,其每个像素上的值是该点到起始点的偏移量(仅考虑关键点)。

    记第 i 条车道线起始点为 ( s x i , s y i ) (sx_i, sy_i) (sxi,syi),其第 j 个关键点为 ( x i j , y i j ) (x^j_i, y^j_i) (xij,yij),则偏移量为:
    ( Δ x i j , Δ y i j ) = ( s x i , s y i ) − ( x i j , y i j ) (\Delta x^j_i,\Delta y^j_i)=(sx_i, sy_i)-(x^j_i, y^j_i) (Δxij,Δyij)=(sxi,syi)(xij,yij)

    该模块的 损失函数
    L o f f s e t = 1 H ′ × W ′ Σ y x ∣ O ^ y x − O y x ∣ \mathcal{L}_{offset}=\frac{1}{H'\times W'}\Sigma_{yx}|\hat{O}_{yx}-O_{yx}| Loffset=H×W1ΣyxO^yxOyx

    3. 构建车道线的方式

    经前面处理之后,可以根据预测的关键点及其相对起始点的偏移,求得车道线的起始点。对于具有 K 个关键点的车道线,将得到 K 个起始点,且这些起始点在距离上会比较接近。

    在这里插入图片描述

    关键点中包含了起始点 ( s x i , s y i ) (sx_i,sy_i) (sxi,syi),该点在 Offset Map 上的值 小于 1;
    通过设置距离阈值 θ d i s \theta_{dis} θdis,可以对 ( s x ’ i , s y ‘ i ) = ( x , y ) + ( δ x + δ y ) (sx’_i,sy‘_i)=(x,y)+(\delta x+\delta y) (sxi,syi)=(x,y)+(δx+δy) 得到的起始点进行分组,每组就代表一条车道线。

    Lane-aware Feature Aggregator(LFA)模块

    在这里插入图片描述

    1. 用卷积层预测第 i i i 个关键点在同一条车道线上的 M M M 个相邻点到其自身的偏移量
      Δ P i = { Δ p i m ∣ m = 1 , ⋯   , M } ∈ R 2 M \Delta P_i=\{\Delta p^m_i|m=1,\cdots,M\}\in \mathbb{R}^{2M} ΔPi={Δpimm=1,,M}R2M
    2. 将这些相邻点处的特征集成到第 i i i 个点上去:
      F ^ ( p i ) = Σ m = 1 M w m ⋅ F ( p i + Δ p i m ) \hat{\mathcal{F}}(p_i)=\Sigma^M_{m=1}w_m\cdot\mathcal{F}(p_i+\Delta p^m_i) F^(pi)=Σm=1MwmF(pi+Δpim)

    在这里插入图片描述

    需要用预测出的相邻点偏移量集合与偏移量真值集合
    Δ G i = { Δ g i k ∣ Δ g i k = g i k − p i ,    k = 1 , ⋯   , K } \Delta G_i=\{\Delta g^k_i|\Delta g^k_i=g^k_i-p_i,\ \ k=1,\cdots,K\} ΔGi={Δgik∣Δgik=gikpi,  k=1,,K}
    之间进行二部匹配,即寻找最佳匹配:
    σ ^ = arg ⁡ min ⁡ σ Σ m M L 2 ( Δ p i m , Δ g i σ ( m ) ) \hat{\sigma}=\mathop{\arg\min}_\sigma \Sigma^M_m L_2(\Delta p^m_i,\Delta g^{\sigma(m)}_i) σ^=argminσΣmML2(Δpim,Δgiσ(m))

    该模块的 损失函数

    L a u x = 1 K N M Σ i K N Σ m M S m o o t h L 1 ( Δ p i m , Δ g i σ ^ ( m ) ) \mathcal{L}_{aux}=\frac{1}{KNM}\Sigma^{KN}_i \Sigma^M_m SmoothL1(\Delta p^m_i,\Delta g^{\hat{\sigma}(m)}_i) Laux=KNM1ΣiKNΣmMSmoothL1(Δpim,Δgiσ^(m))

    4. 整体损失函数:

    L t o t a l = λ p o i n t L p o i n t + λ q u a n t L q u a n t + λ o f f s e t L o f f s e t + λ a u x L a u x \mathcal{L}_{total}=\lambda_{point}\mathcal{L}_{point}+\lambda_{quant}\mathcal{L}_{quant}+\lambda_{offset}\mathcal{L}_{offset}+\lambda_{aux}\mathcal{L}_{aux} Ltotal=λpointLpoint+λquantLquant+λoffsetLoffset+λauxLaux

  • 相关阅读:
    Kubernetes通过HostAliases自定义hosts
    ZCMU--2195: Cableway(C语言)
    netmiko安装及使用
    java中如何让1+1=3
    opencv c++实现鼠标框选区域并显示选择的图片区域
    Android 实战项目:找回密码
    Spring Aop问题汇总
    python--requests接口测试
    递归求解斐波那契数列
    上午面了个腾讯拿 38K 出来的,让我见识到了基础的天花板
  • 原文地址:https://blog.csdn.net/qq_29695701/article/details/126089378