- 论文:《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′×W′1Σ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=(rxij−⌊rxij⌋,ryij−⌊ryij⌋), 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
对每条车道线,模型预测其每个关键点。
用一个 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(x−x~)2+(y−y~)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}Lpoint=H′×W′−1Σyx{(1−Y^yx)αlogY^yx Yyx=1(1−Yyx)βY^yxαlog(1−Y^yx) otherwise" role="presentation" style="position: relative;"> { ( 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
用一个 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′×W′1Σyx∣O^yx−Oyx∣
经前面处理之后,可以根据预测的关键点及其相对起始点的偏移,求得车道线的起始点。对于具有 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) (sx’i,sy‘i)=(x,y)+(δx+δy) 得到的起始点进行分组,每组就代表一条车道线。
需要用预测出的相邻点偏移量集合与偏移量真值集合
Δ
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=gik−pi, 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))
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