本文介绍一篇基于深度学习的停车位检测论文:DeepPS ,作者同时公开了数据集ps2.0,工作很扎实,对于入门停车位检测很有帮助,论文发表在 IEEE T-IP 2018。
项目链接为:https://cslinzhang.github.io/deepps/
0. Abstract
在自动泊车系统 中,如何能准确而高效地检测和定位停车位 是一个关键但尚未解决的问题。由于路面材质的多样性、光照条件的变化 以及树木产生的阴影 等因素,使得基于视觉的停车位检测变得比看上去困难得多。
本文提出了一种新的基于卷积神经网络的停车位检测方法 ,即 DeepPS 。DeepPS 的关键步骤有两个:识别输入图像上的所有标记点 和对标记点对形成的局部图像进行分类 。
其次,为了便于基于视觉的停车位检测研究,建立了大规模的数据集 。包括从典型的室内 和室外 停车场采集的12165张环视图 。
1. Introduction & Related Work
下图是一个典型的基于视觉的停车位检测系统,该系统包括两个模块,即环视图合成 和对环视图的停车位检测 。(本文重点介绍停车位检测,环视图合成可以查看相关文献。)
下图为本文中收集到的停车位数据:(a)、(b)、( c )、(d)中的停车位是垂直 的,(e)、(f)、(g)中的停车位是平行 的,(h)中的停车位是倾斜 的。(a)和(b)是从室内 停车场采集的,其它的是从室外 停车场采集的。(b)中的车位线是黄色 的,而其它图像中的车位线是白色 的。(e)是在雨天 采集的,(f)是晚上在路灯下 采集的,在(g)中树木造成的阴影 覆盖了停车线,(d)和(e)中车位线有所损坏 。 对于采集的数据集,作者进行了标注,下图中黄色圆圈为标记点。
2. DeepPS: A DCNN-Based Approach
下图分别为理想的垂直、平行和倾斜停车位 。在图中,所有标记点都用黄圆圈标记。此外,还标记了车位进入线 (有效停车位的两个标记点的连接虚线)和车位分隔线 (白色实线)。
对于停车位检测,DeepPS 主要分为三步:标记点检测 、局部图像模式分类 和停车位推理 。
A. Marking-Point Detection
本文选择YoloV2 模型作为标记点检测器。在训练阶段,对于每张环视图,首先人工标注所有的标记点。对于每个标记点
p
i
\mathbf{p}_i
pi?,都有一个以标记点为中心固定尺寸为
p
×
p
p\times p
p×p 的包围框作为标记点的真值包围框 。
为了使检测器具有旋转不变性 ,作者通过旋转每张原始标记图片来增强训练集。具体地说,每张训练图片
I
\mathbf{I}
I,可以得到它的
J
\mathbf{J}
J 个旋转版本图片,
{
I
j
}
j
=
0
J
?
1
\{\mathbf{I}_j\}_{j=0}^{\mathbf{J}-1}
{Ij?}j=0J?1?。其中
I
j
\mathbf{I}_j
Ij? 经过旋转
360
J
×
j
\frac{360}{\mathbf{J}}\times j
J360?×j 角度得到。同时标记点的坐标 也以同样的方式旋转。
下图中(a)是原始训练图片,(b)是通过将图(a)旋转30度来生成的。标记点为紫色点,边界框为黄色。
B. Local Image Pattern Classification
测试时,置信度大于
δ
1
\delta_1
δ1? 的点将被视为标记点。假如有两个标记点
p
1
,
p
2
\mathbf{p}_1,\mathbf{p}_2
p1?,p2?,还需要验证其是否能够形成有效的车位进入线?
- 首先如果
p
1
,
p
2
\mathbf{p}_1,\mathbf{p}_2
p1?,p2? 能够形成一个有效的
车位进入线 ,两个标记点之间的距离应该满足一些距离约束条件 。如果是平行停车位的车位进入线,应该满足
t
1
<
∣
∣
p
1
p
2
∣
∣
<
t
2
t_1<||\mathbf{p}_1\mathbf{p}_2||<t_2
t1?<∣∣p1?p2?∣∣<t2?,如果是垂直或倾斜停车位的车位进入线,应该满足
t
3
<
∣
∣
p
1
p
2
∣
∣
<
t
3
t_3<||\mathbf{p}_1\mathbf{p}_2||<t_3
t3?<∣∣p1?p2?∣∣<t3?,参数
t
1
、
t
2
、
t
3
、
t
4
t_1、t_2、t_3、t_4
t1?、t2?、t3?、t4? 是根据各种停车位进入线长度的先验知识确定的。 - 然后,还需要进一步处理满足距离约束的标记点对。首先,对于一对标记点,虽然它可以满足距离约束,但它们仍然很可能无法形成有效的车位进入线。例如,在下面的左图中两个标记点之间的距离满足作为
平行停车位 的车位进入线的距离约束;然而,这两个标记点仍然无线形成有效的车位进入线,因为它们之间还存在一个标记点未检测出来。另外,假设可以形成有效的车位进入线。还需要确定相关的停车位是在顺时针方向 还是在逆时针方向 ,以及这个停车位是直角 还是倾斜 。所有这些问题都可以通过将两个标记点形成的局部图像模式分类到预定义的类中来解决 。
如中间的图所示:首先建立以
p
1
\mathbf{p}_1
p1? 和
p
2
\mathbf{p}_2
p2? 的中点为原点 ,以
p
1
p
2
→
\overrightarrow{\mathbf{p}_{1} \mathbf{p}_{2}}
p1?p2?
? 为
X
\mathbf{X}
X 轴的局部坐标系。因此可以确定它的
Y
\mathbf{Y}
Y 轴。在这个坐标系中,定义了一个矩形区域
R
\mathbf{R}
R。对于
R
\mathbf{R}
R,其沿
X
\mathbf{X}
X 轴的长度设为
∥
p
1
p
2
∥
+
Δ
x
\left\|\mathbf{p}_{1} \mathbf{p}_{2}\right\|+\Delta x
∥p1?p2?∥+Δx 及其沿
Y
\mathbf{Y}
Y 轴的长度设为
Δ
y
\Delta y
Δy, 从环视图中提取
R
\mathbf{R}
R 覆盖的区域,将其归一化为
w
×
h
w\times h
w×h 的大小区域,得到了局部图像模式。
在训练阶段,会得到一个由标记点形成的所有局部图像模式组成的集合
C
\mathbb{C}
C。根据停车位的特征,将集合
C
\mathbb{C}
C 中的样本分为7类,如右图所示:逆时针直角,逆时针倾斜(锐角),逆时针倾斜(钝角),顺时针直角,顺时针倾斜(钝角),顺时针倾斜(锐角),无效 。
在构造集合
C
\mathbb{C}
C时,还有一个实际问题,类不平衡 ,这意味着一个特定的类相对于其它类只有很少的实例。为了解决这个问题,作者采用了SMOTE 对少数类别进行了过度采样。
作者设计的分类模型如下图所示,右边是模型参数。
C. Parking-Slot Inference
在自动泊车系统中,停车位通常被认为是一个平行四边形 ,由其四个顶点的坐标表示。在大多数情况下,两个非标记点是不可见的 ,其坐标只能通过推理得到。为此,需要假设停车位的深度 是已知的先验知识。如下图(a)、(b)、( c )所示,垂直、平行和倾斜 的停车位的深度分别为
d
1
、
d
2
、
d
3
d_1、d_2、d_3
d1?、d2?、d3?。
- 假设
p
1
\mathbf{p}_1
p1? 和
p
2
\mathbf{p}_2
p2? 是两个检测到的标记点,形成的局部图像模式分为
顺时针直角 或逆时针直角 ,则可以很容易地计算出两个非标记点
p
3
\mathbf{p}_3
p3? 和
p
4
\mathbf{p}_4
p4? 的坐标。例如,在上图(a)中,标记点形成的局部图像模式是顺时针直角 并且此停车位应为垂直停车位,其深度 为
d
1
d_1
d1?。因此,其另外两个标记点
p
3
\mathbf{p}_3
p3? 和
p
4
\mathbf{p}_4
p4? 可表示为:
p
3
=
[
cos
?
π
2
sin
?
π
2
?
sin
?
π
2
cos
?
π
2
]
p
1
p
2
→
∥
p
1
p
2
→
∥
?
d
1
+
p
2
p
4
=
[
cos
?
π
2
sin
?
π
2
?
sin
?
π
2
cos
?
π
2
]
p
1
p
2
→
∥
p
1
p
→
2
→
∥
?
d
1
+
p
1
\begin{array}{l} \mathbf{p}_{3}=\left[\begin{array}{cc} \cos \frac{\pi}{2} & \sin \frac{\pi}{2} \\ -\sin \frac{\pi}{2} & \cos \frac{\pi}{2} \end{array}\right] \frac{\overrightarrow{\mathbf{p}_{1} \mathbf{p}_{2}}}{\left\|\overrightarrow{\mathbf{p}_{1} \mathbf{p}_{2}}\right\|} \cdot d_{1}+\mathbf{p}_{2} \\ \mathbf{p}_{4}=\left[\begin{array}{cc} \cos \frac{\pi}{2} & \sin \frac{\pi}{2} \\ -\sin \frac{\pi}{2} & \cos \frac{\pi}{2} \end{array}\right] \frac{\overrightarrow{\mathbf{p}_{1} \mathbf{p}_{2}}}{\left\|\overrightarrow{\mathbf{p}_{1} \overrightarrow{\mathbf{p}}_{2}}\right\|} \cdot d_{1}+\mathbf{p}_{1} \end{array}
p3?=[cos2π??sin2π??sin2π?cos2π??]∥p1?p2?
?∥p1?p2?
???d1?+p2?p4?=[cos2π??sin2π??sin2π?cos2π??]∥∥∥?p1?p
?2?
?∥∥∥?p1?p2?
???d1?+p1?? - 当由两个标记点形成的局部图像模式被分类为
倾斜 时,如上图( c )所示。在图( c )中,标记点形成的局部图像模式被分类为逆时针倾斜(锐角) ;为了估计两个非标记点的位置,需要估计角度
α
\alpha
α。为了解决这个问题,采用基于模板匹配的策略 。图(d)中所示的是一套理想的T形模板
{
T
θ
j
}
j
=
1
M
\{\mathbf{T}_{\theta_j}\}_{j=1}^{M}
{Tθj??}j=1M?,
M
M
M 是模板数量。每个模板的大小为
s
×
s
s\times s
s×s。测试时,提取两个标记点的图像进行匹配,则角度
α
\alpha
α 为:
α
=
arg
?
max
?
θ
j
{
I
1
?
T
θ
j
+
I
2
?
T
θ
j
}
,
j
=
1
,
…
,
M
\alpha=\underset{\theta_{j}}{\arg \max }\left\{\mathbf{I}_{1} * \mathbf{T}_{\theta_{j}}+\mathbf{I}_{2} * \mathbf{T}_{\theta_{j}}\right\}, \quad j=1, \ldots, M
α=θj?argmax?{I1??Tθj??+I2??Tθj??},j=1,…,M 则其余两个标记点计算为:
p
3
=
[
cos
?
α
?
sin
?
α
sin
?
α
cos
?
α
]
p
1
p
2
→
∥
p
1
p
2
→
∥
?
d
3
+
p
2
p
4
=
[
cos
?
α
?
sin
?
α
sin
?
α
cos
?
α
]
p
1
p
2
→
∥
p
1
p
2
→
∥
?
d
3
+
p
1
\begin{array}{l} \mathbf{p}_{3}=\left[\begin{array}{cc} \cos \alpha & -\sin \alpha \\ \sin \alpha & \cos \alpha \end{array}\right] \frac{\overrightarrow{\mathbf{p}_{1} \mathbf{p}_{2}}}{\left\|\overrightarrow{\mathbf{p}_{1} \mathbf{p}_{2}}\right\|} \cdot d_{3}+\mathbf{p}_{2} \\ \mathbf{p}_{4}=\left[\begin{array}{cc} \cos \alpha & -\sin \alpha \\ \sin \alpha & \cos \alpha \end{array}\right] \frac{\overrightarrow{\mathbf{p}_{1} \mathbf{p}_{2}}}{\left\|\overrightarrow{\mathbf{p}_{1} \mathbf{p}_{2}}\right\|} \cdot d_{3}+\mathbf{p}_{1} \end{array}
p3?=[cosαsinα??sinαcosα?]∥p1?p2?
?∥p1?p2?
???d3?+p2?p4?=[cosαsinα??sinαcosα?]∥p1?p2?
?∥p1?p2?
???d3?+p1??
最终,DeepPS 的训练和测试工作流程如下:
3. Experimental Results
A. Benchmark Dataset & Settings
首先介绍数据集 :每张环视图的分辨率为600×600,对应于一个10m×10m的区域,即环视图上1个像素的长度对应于物理地面上1.67cm长度。通过离线标定,可以得到从环视图坐标系到以车辆为中心的世界坐标系 的变换矩阵。因此,当在环视图上检测到停车位时,可以反投影确定其在世界坐标系中的坐标。
表3和4是 ps1.0,ps2.0 数据集的比较与测试集数据采样分布,表5是超参数设置。
B. Marking-Point Detection & Local Image Pattern Classification
下面介绍标记点检测 ,对于标记点真值
g
i
\mathbf{g}_i
gi?,如果一个检测到的标记点
d
i
\mathbf{d}_i
di? 满足
∥
g
i
?
d
i
∥
<
δ
2
\left\|\mathbf{g}_{i}-\mathbf{d}_{i}\right\|<\delta_{2}
∥gi??di?∥<δ2?,则认为
g
i
\mathbf{g}_i
gi? 是正确检测的。为了比较不同的检测器,我们通过改变检测置信度的阈值,画出log-log图绘制漏检率与每张图片的误报率 。
然后是定位误差 ,用
g
i
\mathbf{g}_i
gi? 表示真值,
g
i
′
\mathbf{g}_i^{'}
gi′? 表示检测到的标记点(真阳性)。用
e
i
=
∥
g
i
′
?
g
i
∥
e_{i}=\left\|\mathbf{g}_{i}^{\prime}-\mathbf{g}_{i}\right\|
ei?=∥gi′??gi?∥ 表示定位误差,这里使用平均定位误差作为定位误差。漏检率与误报率、定位误差、检测时间比较、局部图案分类结果 如下表:
C.Parking-Slot Detection
作者与其它几种停车位检测算法进行了比较,结果如下:
|