UFLD & UFLDv2学习
UFLD
以行为单位进行车道位置的判断,即基于行锚检测车道。
车道线检测的新范式
作者认为,高速和无视觉信息问题在车道线检测中是极为重要的,所提方法有效地解决了这些问题。
范式定义:为了解决上述问题,作者提出将车道检测制定为基于全局图像特征的基于行选择方法。换句话说就是使用全局特征在每个预定义行上选择正确的车道位置。在公式中,车道表示为预定义行的一系列水平位置,即行锚点。为了表示位置,第一步是网格化。在每个行锚点上,位置被划分为许多单元格。这样,通道检测可以描述为在预定义的行锚点上选择某些单元格,如图3(a)所示。
设最大车道数为C,行锚点数为h,网格单元数为w。设X为全局图像特征,
f
i
j
f^{ij}
fij为在第
i
i
i条车道线、第
j
j
j条行锚点上选择车道位置的分类器。则车道预测可写成:
P
i
,
j
,
:
=
f
i
j
(
X
)
,
s
.
t
.
i
∈
[
1
,
C
]
,
j
∈
[
1
,
h
]
,
P_{i,j,:}=f^{ij}(X),\ s.t.\ i\in[1,C],j\in [1,h],
Pi,j,:=fij(X), s.t. i∈[1,C],j∈[1,h],
其中
P
i
,
j
,
:
P_{i,j,:}
Pi,j,:为
(
w
+
1
)
(w+1)
(w+1)维向量,表示选择
(
w
+
1
)
(w+1)
(w+1)个网格单元作为第
i
i
i条车道,第
j
j
j行锚点的概率。假设
T
I
,
J
,
:
T_{I,J,:}
TI,J,:是正确位置的独热码标签。该范式的损失函数为:
L
c
l
s
=
∑
i
−
1
C
∑
j
=
1
h
L
C
E
(
P
i
,
j
,
:
,
T
i
,
j
,
:
)
,
L_{cls}=\sum^C_{i-1}\sum^h_{j=1}L_{CE}(P_{i,j,:},T_{i,j,:}),
Lcls=i−1∑Cj=1∑hLCE(Pi,j,:,Ti,j,:),
其中
L
C
E
L_{CE}
LCE为交叉熵损失。使用额外的维度来表示车道的缺失,因此使用的是
(
w
+
1
)
(w+1)
(w+1)维度而不是
w
w
w维度进行分类。
PS:作者认为,该方法根据全局特征预测了每个行锚上所有位置的概率分布。因此,可以根据概率分布选择正确的位置。
如何达到较快运行速度:所提出的范式与分割之间的差异如图3所示。假设图像大小为 H × W H × W H×W。一般情况下,预定义行锚的数量和网格大小都远远小于一张图像的大小,也就是说 h ≪ H h\ll H h≪H和 w ≪ W w\ll W w≪W。这样,原来的分割公式需要进行 ( C + 1 (C + 1 (C+1)维的 H × W H × W H×W分类,而我们的公式只需要解决 ( W + 1 ) (W + 1) (W+1)维的 C × H C × H C×H分类问题。这样可以大大减少计算规模,因为我们的公式的计算成本为 C × h × ( w + 1 ) C ×h×(w+1) C×h×(w+1),而分割的计算成本为 H × w × ( C + 1 ) H × w ×(C +1) H×w×(C+1)。例如,使用CULane数据集的通用设置[22],我们的方法的理想计算成本为 1.7 × 1 0 4 1.7 × 10^4 1.7×104计算,分割的计算成本为 1.15 × 1 0 6 1.15×10^6 1.15×106计算。计算成本大大降低,我们的公式可以实现极快的速度。
如何处理无视觉线索问题:为了处理无视觉线索问题,利用其他位置的信息是很重要的,因为无视觉线索意味着在目标位置没有信息。例如,一条车道被一辆车挡住了,但我们仍然可以通过其他车道、道路形状甚至汽车方向的信息来定位这条车道。因此,利用其他位置的信息是解决无视觉线索问题的关键,如图1所示。
从接受野的角度来看,我们的公式具有整个图像的接受野,比分割方法要大得多。上下文信息和来自图像其他位置的信息可以用来解决无视觉线索的问题。从学习的角度来看,基于我们的公式,也可以使用结构损失来学习车道的形状和方向等先验信息,如3.2节所示。这样,在我们的范式中就可以处理无视觉线索的问题。
另一个重要的好处是,这种范式以基于行的方式对车道位置进行建模,这使我们有机会显式地建立不同行之间的关系。原有的由低级像素化建模和高级车道长线结构造成的语义差距可以被弥合。
车道结构损失
除了分类损失外,我们还提出了两个损失函数,用于对车道点的位置关系进行建模。这样可以促进结构信息的学习。
第一个是由于车道是连续的,即相邻行锚中的车道点应该彼此接近。在我们的公式中,车道的位置由分类向量表示。因此,通过约束分类向量在相邻行锚点上的分布来实现连续性。这样,相似度损失函数为:
L
s
i
m
=
∑
i
=
1
C
∑
j
=
1
h
−
1
∥
P
i
,
j
,
:
−
P
i
,
j
+
1
,
:
∥
1
,
L_{sim}=\sum^C_{i=1}\sum^{h-1}_{j=1}\Vert P_{i,j,:}-P_{i,j+1,:}\Vert_1,
Lsim=i=1∑Cj=1∑h−1∥Pi,j,:−Pi,j+1,:∥1,
其中,
P
i
,
j
,
:
P_{i,j,:}
Pi,j,:是第
j
j
j个行锚点的预测,
∥
⋅
∥
1
\Vert\cdot\Vert_1
∥⋅∥1为
L
1
L_1
L1范数。
另一个结构损失函数关注的是车道的形状。一般来说,大多数车道都是直的。即使是弯道,由于透视效果,大部分仍然是直的。在这项工作中,我们使用二阶差分方程来约束车道的形状,直线情况下为零。
为了考虑形状,需要计算每个行锚上的车道位置。直观的思路是通过找到最大响应峰,从分类预测中获得位置。对于任意车道索引
i
i
i和行锚索引
j
j
j,位置
L
O
C
i
,
j
L_{OCi,j}
LOCi,j可以表示为:
L
O
C
i
,
j
=
a
r
g
m
a
x
k
P
i
,
j
,
k
,
s
.
t
.
k
∈
[
1
,
w
]
L_{OCi,j}=\mathop{argmax}\limits_{k}P_{i,j,k},\ s.t.\ k\in[1,w]
LOCi,j=kargmaxPi,j,k, s.t. k∈[1,w]
其中
k
k
k是表示位置索引的整数。需要注意的是,我们没有在背景网格单元中进行计数,并且位置索引
k
k
k的取值范围只有
1
1
1到
w
w
w,而不是
w
+
1
w + 1
w+1。
然而,
a
r
g
m
a
x
argmax
argmax函数是不可微的,不能与进一步的约束一起使用。此外,在分类公式中,类没有明显的顺序,难以建立不同行锚之间的关系。为了解决这个问题,我们建议使用预测的期望作为位置的近似值。我们使用
s
o
f
t
m
a
x
softmax
softmax函数得到不同位置的概率:
P
r
o
b
i
,
j
,
:
=
s
o
f
t
m
a
x
(
P
i
,
j
,
1
:
w
)
,
Prob_{i,j,:}=softmax(P_{i,j,1:w}),
Probi,j,:=softmax(Pi,j,1:w),
其中
P
i
,
j
,
1
:
w
P_{i,j,1:w}
Pi,j,1:w是
w
w
w维向量,
P
r
o
b
i
,
j
,
:
Prob_{i,j,:}
Probi,j,:表示在每个位置的概率。由于与Eq. 4相同的原因,不包括背景网格单元,计算范围仅为
1
1
1到
w
w
w,则位置期望为:
L
O
C
I
,
J
=
∑
k
=
1
w
k
⋅
P
r
o
b
i
,
j
,
k
L_{OCI,J}=\sum^w_{k=1}k\cdot Prob_{i,j,k}
LOCI,J=k=1∑wk⋅Probi,j,k
其中
P
r
o
b
i
,
j
,
k
Prob_{i,j,k}
Probi,j,k是第
i
i
i条车道,第
j
j
j行锚点和第
k
k
k个位置的概率。这种定位方法的好处是双重的。第一个是期望函数是可微的。二是该操作用离散随机变量恢复连续位置。
根据上式,二阶差分约束可写成:
L
s
h
p
=
∑
i
=
1
C
∑
j
=
1
h
−
1
∥
(
L
O
C
i
,
j
−
L
O
C
i
,
j
+
1
)
−
(
L
O
C
i
,
j
+
1
−
L
O
C
i
,
j
+
2
)
∥
1
,
L_{shp}=\sum^C_{i=1}\sum^{h-1}_{j=1}\Vert(L_{OCi,j}-L_{OCi,j+1})-(L_{OCi,j+1}-L_{OCi,j+2})\Vert_1,
Lshp=i=1∑Cj=1∑h−1∥(LOCi,j−LOCi,j+1)−(LOCi,j+1−LOCi,j+2)∥1,
其中,
j
j
j为第
i
i
i车道上的位置,即第
j
j
j行锚点。我们用二阶差分代替一阶差分的原因是一阶差分在大多数情况下不为零。因此,网络需要额外的参数来学习车道位置一阶差分的分布。此外,二阶差分的约束相对弱于一阶差分的约束,因此当车道不直时,二阶差分的影响较小。最后,整体结构损失可为:
L
s
t
r
=
L
s
i
m
+
λ
L
s
h
p
L_{str}=L_{sim}+\lambda L_{shp}
Lstr=Lsim+λLshp
其中λ是损耗系数。
特征聚合
上述损耗设计主要关注车道间的内部关系。在本节中,我们提出了一种辅助特征聚合方法,该方法在全局上下文和局部特征上执行。提出了一种利用多尺度特征对局部特征进行建模的辅助分割任务。我们使用交叉熵作为辅助分割损失。这样,我们的方法的总体损失可以写成:
L
t
o
t
a
l
=
L
c
l
s
+
α
L
s
t
r
+
β
L
s
e
g
,
L_{total}=L_{cls}+\alpha L_{str}+\beta L_{seg},
Ltotal=Lcls+αLstr+βLseg,
其中
L
s
e
g
L_{seg}
Lseg为分割损失,
α
α
α和
β
β
β为损失系数。整体架构如图4所示。
需要注意的是,我们的方法在训练阶段只使用了辅助分割任务,在测试阶段将会被移除。这样,即使我们增加了额外的分割任务,也不会影响我们方法的运行速度。它与没有辅助分段任务的网络相同。
UFLDv2
在UFLD的基础上,添加列锚与行锚形成混合锚,基于此将车道检测任务重新表述为一个有序分类问题,以获得车道坐标。
我们将带行锚的车道表示扩展为混合锚系统。我们的观察是,行锚系统可能不适用于所有类型的车道,并且可能导致放大的定位问题。如图2a和2b所示,使用行锚时,侧车道的定位精度明显低于自车道。如果我们使用列锚呢?在图2c中,我们可以看到相反的现象,柱锚系统对自我通道的定位能力更差。我们将这种现象称为放大定位误差问题。这个问题使得行锚难以定位水平(侧车道)车道,同样也使得列锚难以定位垂直车道(自我车道)。根据上述观察,我们建议使用混合(行和列)锚分别表示不同的车道。具体来说,我们对自我通道使用行锚,对侧通道使用列锚。这样可以缓解定位误差放大的问题,提高性能。
在混合锚系统中,车道可以用锚系统上的坐标来表示。如何有效地学习这些坐标是另一个重要问题。最直接的方法是使用回归。通常,回归方法适用于局部范围预测设置,在建模远程和全局定位方面相对较弱。为了应对全局距离预测,我们提出了一种基于分类的车道坐标学习方法,即使用不同的类来表示不同的坐标。在这项工作中,我们进一步将原来的分类扩展到有序分类。在有序分类中,相邻类具有紧密有序的关系,这与原有的分类不同。例如,在ImageNet分类任务中,第7类是黄貂鱼(一种鱼类),第8类是公鸡。在我们的工作中,类是有序的(例如,第8类的车道坐标在空间上总是在第7类的右侧)。有序分类的另一个性质是类的空间是连续的。例如,像7.5类这样的非整数类是有意义的,它可以看作是介于7类和8类之间的中间类。为了实现有序分类,我们提出了两个损失函数来共同建模类之间的有序关系,包括基本分类损失和数学期望损失。利用序关系和连续类空间性质,我们可以用数学期望代替argmax来得到预测的连续类[19]。期望损失是约束预测的连续类等于基本真值。通过同时约束基础损失和期望损失,使输出具有更好的有序关系,有利于车道的定位。
基于锚的车道表示
为了表示车道,我们引入行锚点进行车道检测,如图3所示。车道用行锚上的点表示。但是,行锚系统可能会导致放大的定位误差问题,如图2所示。这样,我们进一步将排锚系统扩展为混合锚系统。
造成这个问题的原因如图5所示。假设没有锚点系统的理想最小定位误差为 ε ε ε,这可能是由网络偏差、标注误差等引起的。我们可以看到行锚系统的误差带乘以 1 s i n θ \frac{1}{sin θ} sinθ1。当通道与锚点之间的角度 θ θ θ较小时,放大因子 1 s i n θ \frac{1}{sin θ} sinθ1趋于无穷大。例如,当一个车道是严格水平时,不可能用行锚系统来表示该车道。这个问题使得行锚难以定位更水平的车道(通常是侧车道),同样,它使得列锚难以定位更垂直的车道(通常是自我车道)。相反,当车道和锚点垂直时,锚点系统引入的误差最小( θ θ θ = 0),它等于理想定位误差 ε ε ε。
基于以上观察结果,我们进一步建议使用混合锚来表示车道。针对不同的车道类型,采用不同的定位系统来减小放大的定位误差。具体来说,规则是:一个车道只能分配一种锚,并选择更垂直的锚类型给该车道。在实际应用中,CULane[2]和TuSimple[53]等车道检测数据集只标注了两条自我车道和两条侧车道,如图2a所示。这样,我们在自车道上使用排锚,在侧车道上使用列锚,混合锚系统可以缓解放大的定位误差问题。
在混合锚系统中,我们可以将车道表示为锚上的一系列坐标,如图4所示。 N r o w N_{row} Nrow表示行锚点的数量, N c o l N{col} Ncol表示列锚点的数量。对于每个车道,我们首先分配相应的定位误差最小的锚系统。然后计算车道与各锚点的直线交点,并记录交点的坐标。如果该车道在某些锚点之间没有交集,则坐标将设置为-1。假设分配给行锚点的车道数为 N l a n e r N^r_{lane} Nlaner,分配给列锚点的车道数为 N l a n e c N^c_{lane} Nlanec。图像中的车道可以用一个固定大小的目标 T T T来表示,其中每个元素要么是车道的坐标,要么是-1,其长度为 N r o w × N l a n e r + N c o l × N l a n e c N_{row} × N^r_{lane} + N_{col} × N^c_{lane} Nrow×Nlaner+Ncol×Nlanec。 T T T可分为 T r T^r Tr和 T c T^c Tc两部分,分别对应行锚和列锚上的部分,尺寸分别为 N r o w × N l a n e r N_{row} × N^r_{lane} Nrow×Nlaner和 N c o l × N l a n e c N_{col} × N^c_{lane} Ncol×Nlanec。
锚点驱动的网络设计
借助混合锚的车道表示,我们设计网络的目标是学习固定大小的目标
T
r
T_r
Tr和
T
c
T_c
Tc并进行分类。为了用分类学习
T
r
T_r
Tr和
T
c
T_c
Tc,我们将
T
r
T_r
Tr和
T
c
T_c
Tc中的不同坐标映射到不同的类。假设
T
r
T_r
Tr和
T
c
T_c
Tc被归一化(
T
r
T_r
Tr和
T
c
T_c
Tc的元素范围从0到1或等于1,即“无车道”的情况),类的数量为
N
d
i
m
r
N^r_{dim}
Ndimr和
N
d
i
m
c
N^c_{dim}
Ndimc。映射可以写成:
{
T
c
l
s
i
,
j
r
=
⌊
T
i
,
j
r
N
d
i
m
r
⌋
,
T
c
l
s
m
,
n
c
=
⌊
T
m
,
n
c
N
d
i
m
c
⌋
,
s
.
t
.
i
∈
{
1
,
⋯
,
N
r
o
w
}
,
j
∈
{
1
,
⋯
,
N
l
a
n
e
r
}
,
m
∈
{
1
,
⋯
,
N
c
o
l
}
,
n
∈
{
1
,
⋯
,
N
l
a
n
e
c
}
,
\begin{aligned} &\begin{cases} T^r_{cls_i,j}=\lfloor T^r_{i,j}N^r_{dim}\rfloor, \\ T^c_{cls_m,n}=\lfloor T^c_{m,n}N^c_{dim}\rfloor, \end{cases} \\ s.t.\quad &i\in\{1,\cdots,N_{row}\},j\in\{1,\cdots,N^r_{lane}\},\\ &m\in\{1,\cdots,N_{col}\},n\in\{1,\cdots,N^c_{lane}\}, \end{aligned}
s.t.{Tclsi,jr=⌊Ti,jrNdimr⌋,Tclsm,nc=⌊Tm,ncNdimc⌋,i∈{1,⋯,Nrow},j∈{1,⋯,Nlaner},m∈{1,⋯,Ncol},n∈{1,⋯,Nlanec},
其中
T
c
l
s
r
T^r_{cls}
Tclsr和
T
c
l
s
c
T^c_{cls}
Tclsc为坐标的映射类标号,
⌊
⋅
⌋
\lfloor\cdot\rfloor
⌊⋅⌋为取整操作,
T
c
l
s
_
i
,
j
r
T^r_{cls\_i,j}
Tcls_i,jr为
T
c
l
s
r
T^r_{cls}
Tclsr的第
i
i
i行,第
j
j
j列的元素。这样,我们就可以将混合锚点上坐标的学习转化为两个维度分别为
N
d
i
m
r
N^r_{dim}
Ndimr和
N
d
i
m
c
N^c_{dim}
Ndimc的分类问题。对于无车道的情况,即
T
i
,
j
r
T^r_{i,j}
Ti,jr或
T
m
,
n
c
T^c_{m,n}
Tm,nc等于-1,我们使用一个额外的双向分类来表示:
T
e
x
t
_
i
,
j
r
=
{
1
,
i
f
T
i
,
j
r
≠
−
1
0
,
o
t
h
e
r
w
i
s
e
,
s
.
t
.
i
∈
{
1
,
⋯
,
N
r
o
w
}
,
j
∈
{
1
,
…
,
N
l
a
n
e
r
}
\begin{align} &T^r_{ext\_i,j}= \begin{cases} 1,\ if T^r_{i,j}\neq -1\\ 0,\ otherwise \end{cases}\ ,\\ &s.t.\quad i\in\{1,\cdots,N_{row}\},j\in\{1,\dots,N^r_{lane}\} \end{align}
Text_i,jr={1, ifTi,jr=−10, otherwise ,s.t.i∈{1,⋯,Nrow},j∈{1,…,Nlaner}
其中
T
e
x
t
r
T^r_{ext}
Textr为坐标存在的类标号,
T
e
x
t
_
i
,
j
r
T^r_{ext\_i,j}
Text_i,jr为
T
e
x
t
r
T^r_{ext}
Textr第
i
i
i行第
j
j
j列的元素。列锚
T
e
x
t
c
T^c_{ext}
Textc的存在目标类似:
T
e
x
t
_
m
,
n
c
=
{
1
,
i
f
T
m
,
n
c
≠
−
1
0
,
o
t
h
e
r
w
i
s
e
,
s
.
t
.
m
∈
{
1
,
⋯
,
N
c
o
l
}
,
n
∈
{
1
,
…
,
N
l
a
n
e
c
}
.
\begin{align} &T^c_{ext\_m,n}= \begin{cases} 1,\ if T^c_{m,n}\neq -1\\ 0,\ otherwise \end{cases}\ ,\\ &s.t.\quad m\in\{1,\cdots,N_{col}\},n\in\{1,\dots,N^c_{lane}\}. \end{align}
Text_m,nc={1, ifTm,nc=−10, otherwise ,s.t.m∈{1,⋯,Ncol},n∈{1,…,Nlanec}.
根据上述推导,整个网络需要学习
T
c
l
s
r
T^r_{cls}
Tclsr、
T
c
l
s
c
T^c_{cls}
Tclsc、
T
e
x
t
r
T^r_{ext}
Textr和
T
e
x
t
c
T^c_{ext}
Textc,其中包括定位和存在两个分支。假设输入图像的深层特征为
X
X
X,则网络可以表示为:
P
,
E
=
f
(
f
l
a
t
t
e
n
(
X
)
)
,
P,E=f(flatten(X)),
P,E=f(flatten(X)),
其中,
P
P
P和
E
E
E分别是定位和存在分支,
f
f
f是分类器,
f
l
a
t
t
e
n
(
⋅
)
flatten(·)
flatten(⋅)是展平操作。
P
P
P和
E
E
E的输出都由两部分(
P
r
P^r
Pr,
P
c
P^c
Pc,
E
r
E^r
Er和
E
c
E^c
Ec)组成,分别对应于行和列锚点。
P
r
P^r
Pr和
P
c
P^c
Pc的尺寸分别为
N
l
a
n
e
r
×
N
r
o
w
×
N
d
i
m
r
N^r_{lane} × N_{row} × N^r_{dim}
Nlaner×Nrow×Ndimr和
N
l
a
n
e
c
×
N
c
o
l
×
N
d
i
m
c
N^c_{lane} × N_{col} × N^c_{dim}
Nlanec×Ncol×Ndimc,其中
N
d
i
m
r
N^r_{dim}
Ndimr和
N
d
i
m
c
N^c_{dim}
Ndimc是行和列锚点的映射分类维度。
E
r
E^r
Er和
E
c
E^c
Ec的尺寸分别为
N
l
a
n
e
r
×
N
r
o
w
×
2
N^r_{lane}×N_{row}×2
Nlaner×Nrow×2和
N
l
a
n
e
c
×
N
c
o
l
×
2
N^c_{lane}×N_{col}×2
Nlanec×Ncol×2。
在上式中,我们直接将骨干网络的深层特征展平并输入分类器中。相比之下,传统的分类网络使用全局平均池化(GAP)。我们之所以使用展平操作而不是GAP,是因为我们发现对于基于分类的车道检测网络,空间信息非常重要。使用GAP会消除空间信息,导致性能下降。
有序分类损失
正如我们在公式1中所看到的,上述分类网络的一个重要属性是类之间存在一种有序关系。在我们的分类网络中,相邻类别被定义为具有紧密且有序关系,这与传统分类不同。为了更好地利用有序关系的先验知识,我们提出使用基础分类损失和期望损失。
基分类损失定义为:
L
c
l
s
=
∑
i
=
1
N
l
a
n
e
r
∑
j
=
1
N
r
o
w
L
C
E
(
P
i
,
j
r
,
o
n
e
h
o
t
(
T
c
l
s
_
i
,
j
r
)
)
+
∑
m
=
1
N
l
a
n
e
c
∑
n
=
1
N
c
o
l
L
C
E
(
P
m
,
n
c
,
o
n
e
h
o
t
(
T
c
l
s
_
m
,
n
c
)
)
,
\begin{align} L_{cls}&=\sum^{N^r_{lane}}_{i=1}\sum^{N_{row}}_{j=1}L_{CE}(P^r_{i,j},onehot(T^r_{cls\_i,j}))\\ &+\sum^{N^c_{lane}}_{m=1}\sum^{N_{col}}_{n=1}L_{CE}(P^c_{m,n},onehot(T^c_{cls\_m,n})), \end{align}
Lcls=i=1∑Nlanerj=1∑NrowLCE(Pi,jr,onehot(Tcls_i,jr))+m=1∑Nlanecn=1∑NcolLCE(Pm,nc,onehot(Tcls_m,nc)),
其中
L
C
E
(
⋅
)
L_{CE}(·)
LCE(⋅)为交叉熵损失,
P
i
,
j
r
P^r_{i,j}
Pi,jr是分配给行锚点的第
i
i
i条车道的预测,对应于第
j
j
j个行锚点,
T
c
l
s
_
i
,
j
r
T^r_{cls\_i,j}
Tcls_i,jr是
P
i
,
j
r
P^r_{i,j}
Pi,jr的相应分类标签。
P
m
,
n
c
P^c_{m,n}
Pm,nc是分配给列锚点的第
m
m
m条车道的预测,对应于第
n
n
n个列锚点,
T
c
l
s
_
m
,
n
c
T^c_{cls\_m,n}
Tcls_m,nc是
P
m
,
n
c
P^c_{m,n}
Pm,nc的相应分类标签,
o
n
e
h
o
t
(
⋅
)
onehot(·)
onehot(⋅)是一种独热编码函数。
由于类别是有序的,预测的期望可以被看作是平均投票结果。为了方便起见,我们将期望表示为:
{
E
x
p
i
,
j
r
=
∑
k
=
1
N
d
i
m
r
P
r
o
b
i
,
j
r
[
k
]
⋅
k
,
E
x
p
m
,
n
c
=
∑
l
=
1
N
d
i
m
c
P
r
o
b
m
,
n
c
[
l
]
⋅
l
,
\begin{cases} Exp^r_{i,j}=\sum^{N^r_{dim}}_{k=1}Prob^r_{i,j}[k]\cdot k,\\ Exp^c_{m,n}=\sum^{N^c_{dim}}_{l=1}Prob^c_{m,n}[l]\cdot l, \end{cases}
{Expi,jr=∑k=1NdimrProbi,jr[k]⋅k,Expm,nc=∑l=1NdimcProbm,nc[l]⋅l,
其中[·]表示索引操作符。问题定义为:
{
P
r
o
b
i
,
j
r
=
s
o
f
t
m
a
x
(
P
i
,
j
r
)
,
P
r
o
b
m
,
n
c
=
s
o
f
t
m
a
x
(
P
m
,
n
c
)
,
\begin{cases} Prob^r_{i,j}=softmax(P^r_{i,j}),\\ Prob^c_{m,n}=softmax(P^c_{m,n}), \end{cases}
{Probi,jr=softmax(Pi,jr),Probm,nc=softmax(Pm,nc),
通过这种方式,我们可以约束预测的期望,使其接近基本事实。因此,我们有如下期望损失:
L
e
x
p
=
∑
i
=
1
N
l
a
n
e
r
∑
j
=
1
N
r
o
w
L
1
(
E
x
p
i
,
j
r
,
T
c
l
s
_
i
,
j
r
)
+
∑
m
=
1
N
l
a
n
e
c
∑
n
=
1
N
c
o
l
L
1
(
E
x
p
m
,
n
c
,
T
c
l
s
_
m
,
n
c
)
\begin{align} L_{exp}&=\sum^{N^r_{lane}}_{i=1}\sum^{N_{row}}_{j=1}L_1(Exp^r_{i,j},T^r_{cls\_i,j})\\ &+\sum^{N^c_{lane}}_{m=1}\sum^{N_{col}}_{n=1}L_1(Exp^c_{m,n},T^c_{cls\_m,n}) \end{align}
Lexp=i=1∑Nlanerj=1∑NrowL1(Expi,jr,Tcls_i,jr)+m=1∑Nlanecn=1∑NcolL1(Expm,nc,Tcls_m,nc)
其中
L
1
(
⋅
)
L1(·)
L1(⋅)是平滑
L
1
L1
L1损失。
期望损失的图示如图7所示。我们可以看到,期望损失可以将预测分布的数学期望推向地面真值的位置,从而有利于车道的定位。
此外,存在性分支的损失Lext定义如下:
L
e
x
t
=
∑
i
=
1
N
l
a
n
e
r
∑
j
=
1
N
r
o
w
L
C
E
(
E
i
,
j
r
,
o
n
e
h
o
t
(
T
e
x
t
_
i
,
j
c
)
)
+
∑
m
=
1
N
l
a
n
e
c
∑
n
=
1
N
c
o
l
L
C
E
(
E
m
,
n
c
,
o
n
e
h
o
t
(
T
e
x
t
_
m
,
n
c
)
)
.
\begin{align} L_{ext}&=\sum^{N^r_{lane}}_{i=1}\sum^{N_{row}}_{j=1}L_{CE}(E^r_{i,j},onehot(T^c_{ext\_i,j}))\\ &+\sum^{N^c_{lane}}_{m=1}\sum^{N_{col}}_{n=1}L_{CE}(E^c_{m,n},onehot(T^c_{ext\_m,n})). \end{align}
Lext=i=1∑Nlanerj=1∑NrowLCE(Ei,jr,onehot(Text_i,jc))+m=1∑Nlanecn=1∑NcolLCE(Em,nc,onehot(Text_m,nc)).
最终,总损失可表示为:
L
=
L
c
l
s
+
α
L
e
x
p
+
β
L
e
x
t
,
L=L_{cls}+\alpha L_{exp}+\beta L_{ext},
L=Lcls+αLexp+βLext,
其中α和β为损耗系数。
网络推理
在本节中,我们展示了如何在推理过程中获得检测结果。以行锚点系统为例,假设
P
i
,
j
r
P^r_{i,j}
Pi,jr和
E
i
,
j
r
E^r_{i,j}
Ei,jr分别是第i条车道和第j个锚点的预测结果。那么
P
i
,
j
r
P^r_{i,j}
Pi,jr和
E
i
,
j
r
E^r_{i,j}
Ei,jr的长度分别为
N
d
i
m
r
N^r_{dim}
Ndimr和2。每个车道位置的概率可以表示为:
P
r
o
b
i
,
j
r
=
s
o
f
t
m
a
x
(
P
i
,
j
r
)
,
Prob^r_{i,j}=softmax(P^r_{i,j}),
Probi,jr=softmax(Pi,jr),
其中,Probri,j的长度为N rdim。然后,通过对预测分布进行数学期望,可以得到车道的位置。此外,根据存在性分支的预测,将过滤掉不存在车道的预测结果。
L
o
c
i
,
j
r
=
{
∑
k
=
1
N
d
i
m
r
P
r
o
b
i
,
j
r
[
k
]
⋅
k
,
i
f
E
i
,
j
r
[
2
]
>
E
i
,
j
r
[
1
]
−
1
,
o
t
h
e
r
w
i
s
e
,
Loc^r_{i,j}= \begin{cases} \sum^{N^r_{dim}}_{k=1}Prob^r_{i,j}[k]\cdot k,\quad if\quad E^r_{i,j}[2]>E^r_{i,j}[1]\\ -1,\qquad\qquad\qquad\qquad otherwise \end{cases}\ ,
Loci,jr={∑k=1NdimrProbi,jr[k]⋅k,ifEi,jr[2]>Ei,jr[1]−1,otherwise ,
最后,获得的位置Loc会进行缩放以适应输入图像的尺寸。网络架构的整体示意图如图6所示。