描述

介绍一篇车位检测的文章,是一种端到端的网络结构,在实际使用中很有效。是韩国人发表的期刊文章,最近发现韩国人一些成果真是不错,写的也很清晰。
原文名称:End-to-End Trainable One-Stage Parking Slot Detection Integrating Global and Local Information
翻译:集成全局和局部信息的端到端可训练的单步骤车位检测
和以前一样,还是会用正常字体尽量还原文章的描述。带颜色和深色字体属于理解部分。
文章中出现的“junction”,我都翻译成了角点,意思其实就是车位线的那个交叉点,在这里说明。

摘要

本文提出了一种针对AVM图像的端到端可训练的单阶段车位检测方法。该方法利用卷积神经网络(CNN)同时获取全局信息(车位的入口、类型和占用情况)和局部信息(车位角点junction的位置和方向),并将其整合到车位的属性检测中。该方法将AVM图像划分为网格,并进行基于cnn的特征提取。对于网格的每个单元,通过对提取的特征图进行卷积滤波,得到车位的全局和局部信息。最终的检测结果是通过非最大抑制(NMS)将车位的全局和局部信息相结合而得到的。由于该方法使用完全卷积网络获取车位的大部分信息,不需要区域提议阶段,因此是一种端到端可训练的单阶段检测器。在实验中,使用公共数据集对该方法进行了定量评估,在每秒处理60帧的情况下,该方法的查全率和查准率均为99.77%,类型分类准确率为100%,占用分类准确率为99.31%,优于先前的方法。

这是一种应用在AVM图像上的端到端车位检测方法,输入是AVM图像,输出直接就是包含各种属性的车位信息。

Introduction

停车是自动驾驶里的关键一步,而车位检测是自动停车系统的第一步。车位检测一般有四种方法:基于可行驶区域、基于车位标识的、基于用户界面的、基于基础设施的四种方法。前两种方法研究得比较多。基于可行驶区域的,通过附近停放的车辆来检测空车位。当车辆停的位置都挺好时,这种方法效果很好,但这种方法依赖于车辆的存在及位姿。这个缺点可以通过基于车位标识的方法来提高。基于车位标识的方法,通过识别地面上的停车标记,来检测空车位。它可以在不考虑停放车辆是否存在和姿态的情况下检测车位,但该方法的性能取决于车位标志的视觉清晰状态。这种方法大部分,都是找到特点颜色的线、角点或像素,根据预定的车位标记的几何约束将他们组合在一起。

怎么找车位有四种方法:可行驶区域、车位标识检测、用户交互指定、基础设施帮助。显然前两种属于技术范畴,第一种是基于可行驶区域的,因此就需要依赖于前后车的停放状态,为方法带来了不确定性。因此本文主要讨论基于车位标识检测的,它的优点就是不依赖车的停放情况,而是依赖于地面标识的。缺点就是,要求标识在视觉上是清晰的。传统的一些方法是检测一些视觉要素并用几何特征将它们约束在一起,从而找到车位

当然了,我们要用深度学习的目标检测来解决车位检测的问题,会比传统方法具有更强的鲁棒性和更高的检测性能。基于深度学习的方法可以分为两种:第一种方法是基于深度学习伴随传统规则。这种方法用深度学习找到车位入口点,在用人工设计的几何规则匹对来生成一个个车位。这种方法可以根据车位入口位置精确估计停车位的位置,但由于是人工设计的几何规则,无法用于端到端训练。第二种方法是基于深度学习的通用目标检测,来检测车位。这种方法可以端到端训练,但没有现存的目标检测器是用于车位检测的。车位检测需要准确的车位及方向,对APA系统来说很关键,现有方法做不到。

两种深度学习方法:第一种是深度学习检测车位角点,再用设计的几何规则根据角点得到车位,这种方法没法端到端训练。第二种方法,端到端检测,把车位当成一个目标来检测,这要求目标检测的同时要得到车位角点、车位方向等信息,需要重新设计一个目标检测网络。

本文提出了一种新的方法,利用CNN同时获取全局信息(车位入口、类型和占用情况)和局部信息(角点的位置和方向),将两者进行整合得到车位。图1显示了三种车位的车位、入口和角点的定义。

三种车位类型的展示,蓝色就是车位,绿色代表车位入口,红色代表交叉点(本文统称为角点)

本方法将一幅环视AVM图像分割成网格,并进行基于CNN的特征提取。对于网格中的每个cell,通过对提取的特征图进行卷积滤波,得到车位的全局和局部信息。全局信息包括入口位置、类型和停车位占用情况,其中包括每个单元格的中心点。局部信息由每个单元中包含的角点的位置和方向组成。全局信息中的入口位置,和局部信息中的角点位置,表示相同的信息,但是角点位置比入口位置更加精确。这是因为,在全局信息提取过程中,每个cell都要估计离它很远的入口位置,但是在局部信息提取过程中,每个cell只用估计位于它内部的角点。虽然入口位置不如角点位置精确,但由于入口位置包含两个角点的配对信息,所以我们也要去计算入口位置。通过基于角点的NMS(非极大抑制)算法,将车位的全局信息和局部信息相结合,得到了最终的检测结果。由于完全使用了卷积神经网络来获取车位的大部分信息,而不需要经过区域筛选阶段,因此本方法是一个端到端可训练的单步骤检测器。最终结果像素误差为1.02,方向误差为0.18°

贡献有三点:1.整合了车位的全局和局部信息,有较高检测率和定位精度。2.采用了全卷积神经网络和单阶段检测策略,可以端到端训练并快速检测车位3.不需要设计几何规则和参数,因为这些规则是网络训练出来的4.可以从AVM中提取车位的大部分属性,包括位置、方向、类型和占用率。

本算法的概要:用神经网络提取了AVM图像中的特征,得到一个特征图。再用一些不同的卷积核,提取了两种特征信息:global特征和local特征。再将特征整合在一起,并用非极大值抑制,得到车位信息。在这个过程中,没有任何人为设计的几何特征信息,因此可以端到端训练并推理。

II.RELATED RESEARCH相关研究

依旧略去

III.PROPOSED METHOD本算法

A.Network Architecture网络结构

本文提出的网络结构如下图。

网络的输入是416×416像素的彩色AVM图像。提取特征用的网络是VGG16网络。作者说更复杂更新的网络也用过,在车位检测上的效果差不多,并且提到VGG网络也可以根据应用环境替换成其他网络。VGG16网络使用到pool5层,因此得到的Feature map维数是13×13×512。全局信息和局部信息都是只应用一个卷积层来提取的(9个3×3×512的滤波器提取全局信息,5个3×3×512的滤波器提取局部信息),降低了计算成本。本文获得的全局信息和局部信息,分别用13×13×9张量和13×13×5张量来表示,再基于NMS进行整合,得到图(f)表示的最终车位检测结果。

网络结构很简洁。使用VGG-16得到13×13×512的特征图。接下来用9个大小为3×3×512的卷积核,得到13×13×9的全局特征,用5个大小为3×3×512的卷积核,得到13×13×5的局部特征。再将全局特征和局部特征结合,得到最后的车位

B.Information Extractors and Network Outputs

global和local信息分别用13×13×9张量和13×13×5张量来表示,意味着该方法将输入图像划分为了13×13的cell,并获得每个单元的全局和局部信息。每个cell都要去提取包括cell中心的车位全局信息,同时也要去提取cell中角点的信息。提出这种架构的原因是,车位内的cell包含车位的总体信息,而包含角点的cell中存在角点的详细位置信息。由于每个cell用于获取一个车位的全局信息和一个角点的局部信息,因此将cell的大小,要设置为比车位的最小尺寸和两个角点之间的距离,还要更小。这样一个车位会至少包含一个cell,一个cell最多只能包含一个角点。

VGG16后得到的特征图尺寸为13×13×512,得到的全局信息也维持了13×13这个大小,意味着整张AVM图被分为了13×13个小格子(不理解可以去学习卷积神经网络的原理)。13这个值的选取,在实际不同应用中可以更改,相应的网络尺寸也要进行调整。原则:小格子的大小选取,最多只能包含一个车位角点,不能超过车位的宽度。





图3和图4给出了信息提取器和网络输出的详细描述。为了便于理解,图中划分成了5×5,实际应该是13×13的。全局信息输出的13×13×9张量,分为了4个张量:13×13×1、13×13×4、13×13×3、13×13×1。

作者为了理解方便,在图上只画了5个格子,实际上应该有13个。全局和局部特征卷积后,用了sigmoid和softmax处理,用sigmoid处理是为了得到一个浮点值,softmax是为了得到分类值

图3(a),计算了cell中心包含在任意车位内的可能性,这是通过对图2(c)的特征应用了1个3×3×512的滤波器,然后使用sigmoid函数获得的,因此它是一个13×13×1的张量。图3(a)的底部显示了其可视化表现。在图中,cell的中心点如果在任何一个车位内,数值大(图中画成了绿色),其他位置数值小(图中是灰色)。

全局特征1:每个格子会计算出一个概率值,代表这个格子有是否有可能在某一个车位里。

图3(b),计算了从cell中心到成对角点的相对距离,成对角点代表着包含着该cell的停车位入口的位置。这是通过对特征应用4个3×3×512的滤波器,然后利用sigmoid函数得到的,因此它是一个13×13×4的张量。图3(b)显示了其视觉表现,在图中仅绘制了位于车位内的单元的结果,一对两个红色箭头代表两个2D向量,将cell中心,及包含着该cell的车位的两个角点,连接在了一起。由于需要四个值来代表每个单元的两个2D向量,因此张量的维度是13×13×4。基于这两个二维向量,可以粗略估计每个车位的位置。

全局特征2:每个格子会计算出4个浮点值,该格子是位于某个车位中的,(x1,y1)代表中心点到其中一个角点的距离,(x2,y2)代表中心点到另一个角点的距离。这个距离是像素距离,例如4.7个像素。

在图3(c)中,获得包含该cell的车位的类型。通过对特征应用3个3×3×512过滤器来获得,然后利用softmax,因此是由13×13×3张量来表示的。本文将停车位分为三种:垂直、平行和倾斜三种类型,并用独热编码(one-hot)表示。图3(c)将其可视化了,蓝色、品红和红色,分别代表垂直、平行和斜车位。
置。

全局特征3:每个格子会计算出1个分类值,该格子是位于某个车位中的,分类值是一个3维的独热编码,(1,0,0)代表垂直车位,(0,1,0)代表水平车位,(0,0,1)代表斜列车位。

图3(d)中,获得了包含cell的车位的占用情况,这是通过对特征应用1个3×3×512的滤波器获得的,然后使用sigmoid函数,因此是由13×13×1的张量表示。图3(d)可视化了其表现,中心位于已占用车位内的cell值会较大(紫色),中心位于空车位的cell值会较小(黄色)。

全局特征4:每个格子会计算出1个浮点值,该格子是位于某个车位中的,浮点值代表该车位多大可能是被占据的

结合图3(a)-(d)所示的全局信息,可以得到图3(e)所示的车位检测的中间步骤的结果。在图3(e)中,蓝色、品红和红色分别表示垂直、平行和倾斜的停车位,实线和虚线分别表示空闲和占用的停车位。如图3(a)-(d)所示,对于垂直和倾斜的车位,由于每个车位包含两个单元格,因此生成两个候选车位;对于平行的车位,由于包含三个单元格,因此生成三个候选车位。该方法对每个位于车位内的候选cell,都生成对应的一个车位。需要注意的是,通过全局信息提取得到的车位类型和占用情况是准确的,但其位置是不准确的。这是因为成对连接的角点位置是从远离这些角点的cell中估计出来的。从自动泊车系统的角度来看,检测结果的定位精度非常重要,因为需要根据检测到的位置对车辆进行控制。因此,本文提取了包含角点的精确位置和方位等局部信息,并利用这些信息来提高车位的定位精度。

我们可以把图3当成某次推理的结果,所以最终垂直的cell有2个,水平的cell有3个,都好理解。斜列车位的cell也只有2个,因为是要看cell的中心点是否在车位中。 全局的信息其实挺丰富了,为何还要局部信息?真正做过泊车的都知道,车位需要非常精准。如图3中斜列车位包含的两个cell,会发现其中一个cell离实际角点还比较远。相当于用与角点毫无关系的图像特征,去回归出角点特征,那么这个cell得到的结论势必不那么准确,因此也会影响车位检测的效果。这就是要用局部特征的意义



局部信息提取器及其输出(13×13×5张量)分为三部分(13×13×1、13×13×2、13×13×2张量),如图4第一、二行所示。在图4(a)中,计算了cell包含角点的可能性。这是通过对图2(c)所示的特征映射应用1个3×3×512滤波器,然后使用sigmoid函数获得的,因此它由一个13×13×1张量表示。图4(a)的底部显示了其可视化表示。在该图中,包含角点的cell具有较大的值(绿色),否则具有较小的值(灰色)。

局部特征1:每个格子会计算出一个概率值,代表这个格子中是否包含了一个车位角点的概率

在图4(b)中,计算了从cell中心到该cell中包含的角点的相对位置。这是通过对特征映射应用2个3×3×512过滤器来获得的,然后是sigmoid函数,因此它由13×13×2张量表示。图4(b)的底部显示了其可视化表示。在该图中,只绘制了从包含角点的cell获得的结果。蓝色箭头表示将cell中心连接到该cell包含着的角点,两者之间形成一个2D向量。

局部特征2:每个格子会计算出2个浮点值,该格子包含了某个车位的某一个角点,浮点值代表cell中心点到角点的像素距离

在图4(c)中,计算了在cell内的角点的方向。这是通过对特征映射应用两个3×3×512过滤器来获得的,然后是sigmoid函数,因此它由13×13×2张量表示。图4(c)的底部显示了其可视化表示。红色箭头表示二维矢量,表示在该cell内的角点的方向。该向量只进行方向上的估计和使用。

局部特征3:每个格子会计算出2个浮点值,该格子包含了某个车位的某一个角点,浮点值代表一个方向(实际上就是为包含的那个角点,回归出一个角度)

上面说过,一个cell最多包含一个角点

结合图4(A)-(c)所示的整个局部信息,可以得到图4(d)所示的结检测结果。在图4(d)中,紫色的叉和线分别表示检测到的角点的位置和方向。值得注意的是,在局部信息提取中获得的角点位置比在全局信息提取中获得的结点位置更准确。这是因为在局部信息提取期间,从包含角点的cell来估计角点的位置,但在全局信息提取期间,从远离角点的单元估计角点的位置。因此,该方法利用局部信息提取获得的角点精确位置,提高全局信息提取获得的车位定位精度。

C.Integration of Global and Local Information全局信息和局部信息的结合


最终车位检测结果是综合全局和局部信息得出的。信息集成由基于角点的NMS来简单操作。在这一步中,如果在全局信息提取中得到的角点(全局角点)存在于局部信息提取中得到的角点(局部角点)附近,由于局部角点的位置比全局角点的位置更精确,全局角点被局部角点取代。通过基于角点的NMS,将全局信息的slot与局部信息的角点进行匹配,使全局信息与局部信息融合在一起。结合后,对于垂直或平行的停车位,设置车位的方向为相对于两车位入口连接线的90°,对于倾斜的停车槽,设置两个路口方向的平均值。图5(a)和(b)分别显示了全局和局部信息,图5(c)显示了基于角点的NMS结果。在图5(c)中,黑色的叉代表全局角点替换为局部角点。一个倾斜车位的两个全局交叉点(图5(a)中的红线)被位于图5(c)附近的两个局部交叉点所取代,而另一个倾斜车位的两个全局交叉点(图5(a)中的红线)没有被图5(c)所示的局部交叉点所取代,因为局部交叉点不在其附近。两个垂直泊位(图5(a)中的蓝线)的所有全局角点都被局部角点取代,因此它们的位置变得相同(如图5(c)所示)。图中×2表示两个泊位重叠。两个平行车位的全局连接点(图5(a)中的两条品红色线)被局部连接点取代,因此它们的位置变得相同(如图5(c)所示)。但在另一个水平停车位的情况下(图5(a)中品红色下线),如图5(c)所示,只有一个全局交叉点被附近的局部交叉点取代。在角点NMS之后,又进行了车位的NMS。这一步首先消除了所有全局连接点没有被局部连接点取代的停车槽。在图5(c)中,去掉一个倾斜的泊位(上面画红线的)和一个平行的泊位(下面画品红线的)。如果存在重叠车位,则只选择图3(a)中计算出的可能性最大的车位。图5(d)为基于车位NMS后的最终车位检测结果。

全局和局部信息结合的过程
1. 全局特征综合起来,得到若干个具备一对角点位置已知、类型已知、占据状态已知的框。此时垂直车位和水平车位的角度由于各自性质,是角点连线的垂线。斜列车位角度暂时未知
2. 局部特征综合起来,得到若干个位置更加精确,角度方向已知的,没有匹配关系的角点特征
3. Junction-based的NMS:全局特征的那些成对出现的角点,如果谁的附近有局部特征的角点,就替换成局部特征角点的值。
4. Slot-based的NMS:全局特征的那些成对出现的角点,如果谁的两个角点中,其中一个或两个仍旧是全局特征值的,要舍弃。如果两个车位完全重叠,取全局特征1概率值更大的那个保留

简单说:就是保留全局特征成对关系等属性的同时,将角点位置信息和车位角度,利用最近的局部信息。

D.Training训练

使用ImageNet上预训练的权值初始化特征提取器,使用Xavier统一初始化器初始化用于提取全局和局部信息的14个卷积滤波器。所有权重均采用Adam优化器进行优化,其学习率、β1、β2和ε分别为10-4、0.9、0.999和10-8。该网络被训练了100次,batch大小被设置为24。图6显示了所提网络的训练过程。如图6(g)所示,车位的ground truth分为七个部分。用四部分作为全局信息的真值,用三部分作为局部信息的真值。将这些ground truth与网络输出(图6(e)中的全局和局部信息)进行比较,以计算图6(f)所示的损失。

最终的损失是通过图6(g)中对应于七个ground truth七个损失的加权和来计算的。4个loss (loss_{sp}loss_{sxy}loss_{st}loss_{so})表示全局信息,3个loss (loss_{jp}loss_{jxy}loss_{jv})表示局部信息。其中w_{sp}w_{sxy}w_{st}w_{so}w_{jp}w_{jxy}w_{jy}​分别是7个损失的权重,根据它们在训练数据集中的大小,分别在实验中设置为40、170、0.05、3、300、3000和1000。每项损失将逐一详细说明。需要注意的是,所有的损失都是考虑到所有的网络输出都在0到1之间来设计的。公式如下:

1.全局信息损失——cell是否在一个车位内

cell中心位于任何停车位的可能性的损失,loss_{sp}计算为

其中sp^{i}_{true}是第i个单元的中心包含在任何停车位中,可能性的ground truth。如果包含,则设置为1,如果不包含则设置为0。假设输入图像被划分为S×S个cells。sp^{i}_{pred}是网络对sp^{i}_{true}的预测结果。I^i_{slot}表示第i个cell的中心是否包含在任何停车位中,如果包含则设为1,如果不包含则设为0。\lambda_{slot}​的增加,是为了补偿在停车槽中包含的cell数量和不在停车槽中的cell数量之间的不平衡。根据训练数据集中这些数字的比率,将其设置为0.2。

不难看出,当\lambda_{slot}设置为1时,无论cell是否在车位内的loss都被同等看待了。文章设置为0.2,意味着整个网络更看中在车位内的cell的预测损失

2.全局信息损失——cell中心到一对入口角点的相对位置

从cell中心到成对角点的相对位置的损失,loss_{sxy}计算为

式中(sx1^i_{true}, sy1^i_{true})和(sx2^i_{true}sx2^i_{true})是两个2D向量,表示从第i个cell中心到包含第i个cell在内的停车位成对角点的相对位置的ground truth。这些值除以L_{max}并归一化为-1到1之间的值。L_{max}设置为车位标记的最大长度,在本文章的值为7m×PPM(单位:像素),PPM代表每米代表像素,由AVM图像校准程序计算。(sx1^i_{pred}, sy1^i_{pred})和(sx2^i_{pred}sx2^i_{pred})分别是网络对(sx1^i_{true}, sy1^i_{true})和(sx2^i_{true}sx2^i_{true})的预测结果。由于它们在0到1之间,我们将它们减去0.5,再乘以2,使它们在-1到+1之间,这是相应的ground truth的范围。

3.全局信息损失——车位类型

车位类型的损失,loss_{st}用了分类交叉熵的计算公式,如下

其中st^i_{true},是包含第i个cell中心的停车位类型为c(1,2,3)的概率的ground truth。这是用one-hot编码表示的。也就是说,如果停车槽的类型为垂直、平行或倾斜,则(st^i_{true,1}, st^i_{true,2}, st^i_{true,3})分别设置为(1,0,0)、(0,1,0)或(0,0,1),也就是st^i_{pred,c}代表网络的预测结果。\lambda_{st,c},是为了补偿不同类型停车位中cell数量的不平衡而添加的。\lambda_{st,1}\lambda_{st,2}\lambda_{st,3}根据这些数字在训练数据集中的比例分别设置为1.76,2.86和31.65。

可以看出垂直车位的cell数量很多,水平车位的cell数量次之,斜列车位的cell数量最少

4.全局信息损失——车位是否占用

车位占用的损失,loss_{so}如下

其中,so^i_{true}是包含第i个cell的车位占用率的ground truth。如果占用,则设置为1,如果空闲,则设置为0。因此,so^i_{pred}是网络对so^i_{true}的预测结果。I^i_{occ}表示第i个cell的中心是否包含在已占用的停车位中,如果包含则设置为1,如果不包含则设置为0。I^i_{vac}表示第i个cell的中心是否包含在空闲的停车位中,如果包含则设为1,如果不包含则设为0。\lambda_{occ}\lambda_{vac}的加入是为了补偿已占用车位的cell数量与空闲车位的cell数量之间的不平衡。根据这些数字在训练数据集中的比例,它们分别被设置为1.55和3.30。

5.局部信息损失——cell是否包含车位角点

cell是否包含一个角点的可能性损失,loss_{jp}公式为

其中jp^i_{true}是第i个cell包含角点的可能性的ground truth。如果包含则设置为1,如果不包含则设置为0。jp^i_{pred}是网络对jp^i_{true}的预测结果。表示第i个cell是否包含连接,如果包含则设置为1,如果不包含则设置为0。\lambda_{junc}的增加是为了弥补包含角点的cell数量和不包含角点的cell数量之间的不平衡。根据这些数字在训练数据集中的比例,它被设置为0.02。

6.局部信息损失——cell中心到cell包含的角点的距离损失

cell中心到cell包含的角点的距离损失,loss_{jxy}如下

其中(jx^i_{true}, jy^i_{true})是一个2D向量,表示从第i个cell中心到第i个cell中包含的角点的相对位置的ground truth。这些值除以W_{cell}H_{cell} ,可以归一化为-0.5和+0.5之间的值。因为输入(416×416像素)被分成13×13单元,所以W_{cell}H_{cell}都是32。(jx^i_{pred}, jy^i_{pred})是网络对(jx^i_{true}, jy^i_{true})的预测结果。由于它们在0和1之间,我们从它们中减去0.5使它们在-0.5和+0.5之间,这是相应的ground truth的范围。

6.局部信息损失——cell中角点的方向损失

cell中角点的方向损失,loss_{jv}​如下

其中(jvx^i_{true}, jvy^i_{true})是一个2D向量,代表第i个cell中的角点的方向的ground truth。(jvx^i_{pred}, jvy^i_{pred})是网络对(jvx^i_{true}, jvy^i_{true})的预测结果。由于它们在0到1之间,我们将它们减去0.5,再乘以2,使它们在-1到+1之间,这是相应的ground truth的范围。