解开车辆检测算法之谜

电子说

1.3w人已加入

描述

车辆检测看似神秘,其实本质上是通过数学公式计算出图像指定区域的像素特征,然后根据相应的特征判断物体所属的类别。目标检测方法一般可分为特征提取和类别确定两个步骤,常用的支持向量机(SVM)和方向梯度直方图(HOG)方法相互配合使用。

本文将介绍常用的车辆检测算法,重点从以下几个方面来揭开这些算法背后的奥秘,让读者对机器学习的过程有一个清晰的认识。

应用场景概览

HOG特征计算详解

SVM 工作流程概述

比较与总结

应用场景概览

车辆检测技术在现实世界中得到广泛应用,如下例所示。我们定期驾驶的私家车有时会配备一个或多个车载后视摄像头。当另一辆车即将从后方一定距离内通过时,该系统将被激活。一旦检测到车辆后方有车辆,就会发出警报并提示驾驶员减速(图 1)。另一个例子可以在与自动驾驶领域相关的应用中找到,在该应用中,周围汽车的位置被用来分析它们的速度、距离和其他因素,然后自动调整汽车的路径作为响应。

车辆检测系统还广泛用于交通控制和道路状况监测(图 2)。例如,图中的系统被放置在隧道口,统计特定时间段内每天的车流量,并适当执行相应的限制政策,从而减少交通事故的发生,并为司机提供交通拥堵或畅通的信息。这允许司机选择避免交通的最佳路线。此外,交通流量统计也可以用于机场或火车站的停车场,通过大数据分析来判断车位是否供不应求,以便工作人员做出相应的响应和分配资源。

车辆检测系统产生的信号可以与其他技术相结合来检测给定交通信号周围的交通流量,工作人员可以利用大数据和人工智能来计算和确定交通信号灯的合理时间间隔。

联合 HOG 和 SVM 算法

(40 − 16) / 8 + 1 = 4

一种使用HOG结合SVM的行人检测方法最初是由法国研究员Dalal于2005年在美国加州圣地亚哥举行的计算机视觉与模式识别会议上提出的。现在HOG+SVM的方法已经发展到可以检测各种行人。对象,包括车辆和车道的位置。

HOG 特征计算

1. HOG是一种局部特征提取算法,因此即使提取更多的特征,该算法也达不到在包含复杂背景的大图像中检测目标的目的。需要对图像进行裁剪才能获取目标对象。实验证明,作为目标物体的车辆必须占图像的80%以上才能获得良好的效果。裁剪后的局部图像被分成块,每个块都被提取出由单个细胞组成的特征。

(在每个图像中,多个像素形成一个单元格,多个单元格组成一个块。)

下面以图3为例说明HOG特征计算过程。

首先对整张图片进行裁剪,得到一张40px x 40px的图片,之后我们必须定义如下变量:

汽车

图 3:为了说明块在裁剪图像中的移动,此图显示 4 个单元格形成一个边长为 16px 的块,然后图像被裁剪以获得 40px x 40px 的长和宽。相应的步长为 1,表示一次移动一个像素。(来源:为贸泽创作的原创艺术作品)

我们定义运动步长s,如:s =1。

我们进一步以像素为单位定义单元格大小,例如:8 x 8。

我们进一步定义块大小,例如:每个块由 2 x 2 = 4 个单元格组成。

最后,我们定义bin的个数,根据需要设置值,比如:bin = 9。每个bin用来存储计算出的直方图梯度方向的累加值,下面会进一步说明。

2. 对输入图像和颜色进行标准化处理,以减少光影对图像中物体检测精度的干扰,通过伽玛校正,将图像转为灰度(伽玛校正原理为出于本文的目的而忽略)。

3.计算梯度的大小。

以属于cell的部分块为例说明计算方法(图4),像素值为25时计算中点的公式如下所示。

汽车

图 4:单个单元格的部分块大小和像素值。(来源:为贸泽创作的原创艺术作品)

使用基于卷积核方法的合理定义,我们可以通过实验证明 [-1, 0, 1] 效果最好。卷积核[-1,0,1]可以理解为一个矩阵,用于计算每个像素的梯度幅度方向。因此,我们可以对水平(x轴正向,向右)使用[-1,0,1],对垂直(y轴正向,向上)使用[-1,0,1]T来进行水平以及图像区域中每个像素的垂直梯度分量计算。两者的平方和和根号给出了该点梯度的方向,因此使用的公式如下:

汽车

因此像素值为25的点的水平方向计算如下图5所示:

汽车

图 5:计算像素值为 25 的中点水平方向的像素值。(来源:为贸泽创作的原创作品)

公式:

汽车

因此,像素值为25的点的垂直方向计算如图6所示:

汽车

图 6:计算像素值为 25 的中点水平方向的像素值。(来源:为贸泽创作的原创作品)

公式:    

汽车  

4. 相应的梯度方向使用以下公式计算:

汽车

5. 通过对每个单元格中的所有像素重复计算过程中的步骤3至4并求和,我们得到每个单元格在九个梯度方向上的梯度积分图(图7)。

6. 我们求解图像块的 HOG 特征,这意味着我们将包含的单元格特征连接在一起。

7. 然后我们求解整个图像的 HOG 特征,这意味着我们连接包含的图像块特征。

8.特征维度的计算方法:

上例中的块在 x 和 y 方向上各移动了四步:

(40-16)/8+1=4

每个块包括四个单元格:

2*2=4

特征维度计算公式:

汽车

因此,为当前图像示例计算的特征维度对应于 576。

9. 然后我们对获得的梯度向量进行归一化。归一化的关键目标是防止过度拟合,这会导致训练集分类良好但测试集检测率极低,这种情况对于我们的目的来说显然是不可接受的。使用我们用于机器学习特征归一化的相同方法,如果我们获得分布在 (0, 200) 之间的特征值,例如,我们需要防止 200 以下的数字影响特征的整体分布(模型会偏离从整体趋势去拟合200,导致过拟合),所以我们需要将特征分布归一化到一定区间。Dalal 在他的论文中提到,使用 L2-norm 获得的结果非常令人满意。

(这里,0、200代表特征值的取值范围)

10. 特征连同相应的标签被发送到 SVM 以训练分类器。

直方图梯度方向和 Bin 值

Dalal 在他的论文中提到,“这一步的目的是为局部图像区域提供函数量化梯度方向的指示,同时保持对图像中检测到的对象的外观保持较弱的灵敏度。 “

根据梯度的方向将梯度大小插入到相应的bin中,定义方向有两种可能的方法。

无符号方法适用于车辆或其他物体检测,而有符号方法已被实验证明不适用于车辆或其他物体检测。然而,当图像被放大、缩小或旋转时,这种方法会很有用,之后像素会返回到它们的原始位置。请参阅参考资料中包含的第五个链接以获得更深入的了解。

1. 无符号:(0, π)

下面我们仔细看看无符号插值。

在这篇文章中,我们将使用三个表格来解释插值是如何进行的。在每个表中,第一行显示计算的振幅,第二行指定 bin 的方向值,该值是通过将 180 度除以定义的 bin 数获得的。第三行显示 bin 序号,从 0 开始。

图像可以根据需要分成尽可能多的箱子。例如,当分为九个bins时,即使用每个cell有九个方向的梯度直方图时,每个bins覆盖20度的区域。振幅(上面计算的)被插入到每个 bin 中,每个 bin 中振幅的最终总和对应于直方图的垂直轴,而水平轴对应于 bin 值的范围,在本例中为 (0, 8) .

插值法:

如果像素的振幅为 80 度,方向为 20 度,则将这些值插入到表 1蓝色区域中的相应位置。

表 1:如果像素的振幅为 80,方向为 20 度,则插入相应位置的值。

汽车

如果振幅为80度,方向为10度,则将这些值分别插入表2中蓝色区域的两个位置。

表 2:如果像素的振幅为 80,方向为 10 度,则插入相应位置的值。

汽车

如果振幅为60度,方向为165度,则将这些值分别插入表3中蓝色区域的两个位置。

(180 度和 0 度在方向上是等效的,所以振幅以每个 1:3 的比例插入两个 bin 中)

表3:振幅为60,方向为165度时对应位置插入的值。

汽车

上表1为方向值与bin对应值完全相同时采用的插值方法,表2为方向值落在两个bin值之间时采用的插值方法,表3显示方向值大于最大 bin 值时使用的插值方法。根据三种方法在以单元格为度量单位进行计算时的原理,遍历后累加一个单元格中所有像素点的幅值。例如,在上面的示例中,我们在 bin 0 处获得了 40 和 15 的两个振幅值,因此我们的 bin 0 直方图到目前为止已经累积到 55。从 bin 1 到 8 的每个单元格的振幅在同样的方式。我们最终得到了类似于下图的直方图(图 7),横坐标 X 表示梯度方向,纵坐标 Y 表示梯度幅度。

汽车

图 7:梯度直方图示例:横轴对应 bin 数,纵轴对应计算出的振幅。对应于图的纵轴的数字仅用于说明目的。例如,将上面三个表中的bin 1幅度值相加得到80 + 40 + 0 = 120作为最终结果,我们得到直方图纵坐标为120。随着我们继续计算 bin 1 的值,该值将不断累加。(来源:为贸泽创作的原创艺术作品)

实验结果表明,当使用九个箱子进行目标检测和单向插值时,可以获得最好的结果。

2. 有符号:(0, 2π)

当在方向值前加上正负号时,如果同时定义了九个bin,则分配给每个bin的角度范围为:(0, π/9°)。例如,对于第二个 bin,它有一个正值插值到 20-40 范围内(蓝色区域),负值应该插值到 200-220 范围内(蓝色区域)。(图8)

汽车

图 8:在有符号插值中,每个扇区代表一个 bin 覆盖角范围值。红色对应一号 bin,涵盖 0 到 20 度。按顺时针方向移动,绿色标记 340–360 度的终点。蓝色区域表示两个方向上对应的 bin。(来源:为贸泽创作的原创艺术作品)

SVM 工作流程概述

SVM(支持向量机)通过一个超平面将空间中的两个类分开,二维空间可以简单理解为求y且y满足的空间:

汽车

y 值决定样本是分类为阳性还是阴性。然而,为了确定最优超平面,这里我们引入支持向量和最大间隔。我们的目标是找到一个超平面,使最靠近超平面的点之间的距离最大(图 9)。

汽车

图9:红线对应超平面,虚线两边的点为支持向量,计算值为1(正类)或-1(负类)。蓝色点对应正样本,绿色点对应负样本。目标是找到显示虚线之间最大距离的值,因为较大的距离表示更好的二元分类模型。(来源:维基百科)

由于真实情况下呈现的数据非常复杂,有时会根据需要引入核函数,以便将低维映射到高维,并通过找到最优超平面使线性不可分的数据(图 10 )线性可分。

汽车

图10:红圈中的点在二维空间中与蓝圈中的点线性不可分,因此需要一个核函数将这些点映射到更高维的坐标系中。(来源:为贸泽创作的原创艺术作品)

SVM 计算量大且训练耗时,因为要为每个点计算与其他所有点的相似性。因此,支持向量机适合训练数据量较小的二元分类模型,如果涉及多个类别,通常会单独训练多个模型。此外,由台湾大学教授开发的两个开源工具现在非常受科学家欢迎。第一个是 LibSVM,另一个是 Liblinear,它是基于 SVM 技术针对大量数据开发的。

SVM 对参数极其敏感。在 LibSVM 或 LibLinear 的训练过程中,密切关注惩罚项 C 和权重因子 w 非常重要。C为惩罚项,越大表示训练过程中的分类效果越好。但是,当C过大时,会出现过拟合,即训练样本分类准确率极高,而测试准确率极低。不可避免地会存在远离集合中心集群的数据点,C 的大小表明我们愿意丢弃这些异常值。较大的 C 值表示我们不愿意丢弃这些异常值,因此该模型特别适合训练集而不是测试集。W,即权重,代表正负样本的系数,如果我们想要检测更多的目标,我们可以增加正样本权重。但是,这样做会导致误检率(FP)特别高。反之,增加负样本权重会降低误检率(FP),但目标检出率(TP)自然也会降低。

笔者做了一个简单的实验发现,使用百万数据点和1152维特征,在运行Windows 10的情况下,使用两个CPU和60G RAM,开启18个线程进行训练需要20分钟。因此,建议要么使用 Liblinear 库在非常大的语料库上进行训练或增加可用的计算机内存。

比较与总结

在本文中,我们重点了解车辆检测背景下的特征计算,并简要探讨了 SVM 分类策略。当HOG特征用于车辆检测时,建议使用9个bin中1000维以上特征的无符号插值,并且必须对不均匀的特征分布进行归一化。对于SVM,可以根据需要选择核函数,必要时可以使用LibSVM库基于非常大量的数据训练模型。SVM 将低维空间映射到高维空间的核函数机制有效地解决了线性不可分性问题。SVM 的计算复杂度由支持向量的数量决定,最终的决策函数幸运地由少量的支持向量决定。SVM 也有其局限性。如果不使用 LiBSVM/Liblinear 开源库,单独使用 SVM 时处理大量数据会非常困难。这是因为SVM计算过程涉及矩阵计算,行数和列数由样本数决定。因此,大样本在计算过程中会消耗大量的时间和空间。同样,在实践中,选择是否利用 HOG 应该基于对技术优缺点的双向考虑。这些优点和缺点总结在这里供读者参考。SVM 也有其局限性。如果不使用 LiBSVM/Liblinear 开源库,单独使用 SVM 时处理大量数据会非常困难。这是因为SVM计算过程涉及矩阵计算,行数和列数由样本数决定。因此,大样本在计算过程中会消耗大量的时间和空间。同样,在实践中,选择是否利用 HOG 应该基于对技术优缺点的双向考虑。这些优点和缺点总结在这里供读者参考。SVM 也有其局限性。如果不使用 LiBSVM/Liblinear 开源库,单独使用 SVM 时处理大量数据会非常困难。这是因为SVM计算过程涉及矩阵计算,行数和列数由样本数决定。因此,大样本在计算过程中会消耗大量的时间和空间。同样,在实践中,选择是否利用 HOG 应该基于对技术优缺点的双向考虑。这些优点和缺点总结在这里供读者参考。这是因为SVM计算过程涉及矩阵计算,行数和列数由样本数决定。因此,大样本在计算过程中会消耗大量的时间和空间。同样,在实践中,选择是否利用 HOG 应该基于对技术优缺点的双向考虑。这些优点和缺点总结在这里供读者参考。这是因为SVM计算过程涉及矩阵计算,行数和列数由样本数决定。因此,大样本在计算过程中会消耗大量的时间和空间。同样,在实践中,选择是否利用 HOG 应该基于对技术优缺点的双向考虑。这些优点和缺点总结在这里供读者参考。的优点和缺点。这些优点和缺点总结在这里供读者参考。的优点和缺点。这些优点和缺点总结在这里供读者参考。

优点:HOG是以局部为单位进行的,可以更好的捕捉局部的形状信息,同时忽略光照、颜色等因素。例如,在车辆检测过程中可以忽略汽车的颜色,从而减少所需的特征维度数量,并且由于该技术对光的敏感度较弱,即使在视线被部分遮挡的情况下仍然可以检测到车辆。

缺点:HOG不太擅长处理遮挡,车辆方向的变化不易察觉。由于梯度的性质,HOG对噪声相当敏感,所以在block和cells被分割成局部区域单元后,在实践中往往需要进行高斯平滑来去除噪声。特征维度(cell、block、step size)的确定要求很高,在实践中需要多次尝试才能获得最优解。

我希望本文能让您更清楚地了解车辆检测的最新技术水平。结合SVM和HOG虽然计算量大,但相应的成本低,模型的训练可以在标准CPU上完成,这使得这种方法在中小型产品开发公司中非常流行。例如,车载摄像头等小部件的开发和输出可能会继续产生更好的性价比,同时还能确保可接受的可用性水平。

审核编辑 hhy

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分