Key Points Estimation and Point Instance Segmentation Approach for Lane Detection
论文链接: https://arxiv.org/abs/2002.06604
一、Problem Statement
对PINet旧版本的一个补充。旧版解析在这个链接。
二、Direction
增加了多个hourglass network,也添加了知识蒸馏。相对于以前只在TuSimple数据集上测试,多增加了在CuLane数据集上的测试验证。
三、Method
1、 Lane Instance Point Network
网络结构上大体没有改变,堆叠多了两个hourglass,可以根据计算资源去选择网络的大小。
来看一下这个网络的Loss,对比旧版本,其有小部分修改:
L
t
o
t
a
l
=
a
L
e
x
i
s
t
+
b
L
n
o
n
−
e
x
i
s
t
+
c
L
o
f
f
s
e
t
+
d
L
f
e
a
t
u
r
e
+
e
L
d
i
s
t
i
l
l
a
t
a
t
i
o
n
L_{total}=aL_{exist} + bL_{non-exist} + cL_{offset} + dL_{feature} + eL_{distillatation}
Ltotal=aLexist+bLnon−exist+cLoffset+dLfeature+eLdistillatation
(1). confidence branch
confidence branch 预测每一个单元格的置信度。然后这个值会传递给下一个hourglass block,用来稳定训练。这个分支的loss为:
L
e
x
i
s
t
=
1
N
e
∑
c
∈
G
e
(
c
c
∗
−
c
c
)
2
L
n
o
n
−
e
x
i
s
t
=
1
N
n
∑
c
c
∈
G
n
c
c
>
0.01
(
c
c
∗
−
c
c
)
2
+
0.00001
⋅
∑
c
c
∈
G
n
c
c
2
\begin{matrix} L_{exist}=\frac{1}{N_e}\sum_{c\in G_e}(c^*_c-c_c)^2\\ \\ L_{non-exist}=\frac{1}{N_n}\sum_{\begin{matrix} c_c\in G_n \\ c_c>0.01\end{matrix}}(c^*_c-c_c)^2 + 0.00001 \cdot\sum_{c_c\in G_n}c_c^2 \end{matrix}
Lexist=Ne1∑c∈Ge(cc∗−cc)2Lnon−exist=Nn1∑cc∈Gncc>0.01(cc∗−cc)2+0.00001⋅∑cc∈Gncc2
N e , N n N_e, N_n Ne,Nn表示存在点或者不存在点的单元格的数量。 G G G表示所有单元格, c c ∗ c_c^* cc∗是ground-truth, c c c_c cc是预测值。上面式子最后一项是regularization term。
(2). offset branch
offset branch是用来找到每个点的确切位置。它的值在0-1区间,是相对于每一个单元格(grid)。offset branch有两个通道,分别预测x轴和y轴。
L
o
f
f
s
e
t
=
1
N
e
∑
c
x
∈
G
e
(
c
x
∗
−
c
x
)
2
+
1
N
e
∑
c
y
∈
G
n
(
c
y
∗
−
c
y
)
2
L_{offset}=\frac{1}{N_e}\sum_{c_x\in G_e}(c^*_x-c_x)^2+\frac{1}{N_e}\sum_{c_y\in G_n}(c^*_y-c_y)^2
Loffset=Ne1cx∈Ge∑(cx∗−cx)2+Ne1cy∈Gn∑(cy∗−cy)2
(3). feature branch
这个分支的训练是用来使具有相同实例的网格特征更接近,不同实例的特征距离更远,是一个聚类的过程。看一下它的loss:
L
f
e
a
t
u
r
e
=
1
N
e
2
∑
i
N
e
∑
j
N
e
l
(
i
.
j
)
L_{feature}=\frac{1}{N_e^2}\sum_i^{N_e}\sum_j^{N_e}l(i.j)
Lfeature=Ne21i∑Nej∑Nel(i.j)
l
(
i
,
j
)
=
{
∣
∣
F
i
−
F
j
∣
∣
2
i
f
C
i
j
=
1
m
a
x
(
0
,
K
−
∣
∣
F
i
−
F
j
∣
∣
2
)
i
f
C
i
j
=
2
l(i,j)=\left\{ \begin{matrix} ||F_i-F_j||_2 & if &C_{ij}=1\\ max(0,K-||F_i-F_j||_2) & if & C_{ij}=2\\ \end{matrix} \right.
l(i,j)={∣∣Fi−Fj∣∣2max(0,K−∣∣Fi−Fj∣∣2)ififCij=1Cij=2
其中
C
i
j
C_{ij}
Cij表示点
i
,
j
\Large i,j
i,j 是否是同一个实例,如果是同一个实例,则等于1,否则为2。
F
i
F_i
Fi表示输出的特征点。
K
>
0
K>0
K>0是一个常量。然后使用简单的distance based 聚类算法区分点的类别。
(4). Distillation branch
Hourglass原作者认为更多的hourglass modules堆叠会有更好地效果。所以想采用知识蒸馏的办法,把更深的网络认为是teacher,对裁剪的短网络进行蒸馏学习。
L
d
i
s
t
i
l
l
a
t
i
o
n
=
∑
m
M
D
(
F
(
A
M
)
−
F
(
A
M
)
)
F
(
A
M
)
=
S
(
G
(
A
M
)
)
,
S
:
s
p
a
t
i
a
l
s
o
f
t
m
a
x
G
(
A
m
)
=
∑
i
=
1
G
∣
A
m
i
∣
2
,
G
:
R
C
X
H
X
W
→
R
H
X
W
\begin{matrix} L_{distillation}=\sum_m^MD(F(A_M)-F(A_M))\\\\ F(A_M)=S(G(A_M)), S:spatial softmax\\\\ G(A_m)=\sum_{i=1}^G|A_{mi}|^2, G:R^{CXHXW} \rightarrow R^{HXW} \end{matrix}
Ldistillation=∑mMD(F(AM)−F(AM))F(AM)=S(G(AM)),S:spatialsoftmaxG(Am)=∑i=1G∣Ami∣2,G:RCXHXW→RHXW
2、 数据增强
通过翻转、平移、旋转、添加高斯噪声、亮度增强、增加阴影来进行数据增强。
四、Conclusion
与第一版看起来变化不大。多了知识蒸馏这个,个人感觉比较鸡肋。
References
1.https://zhuanlan.zhihu.com/p/115170109