车辆追踪算法大PK:SVM+HOG vs. YOLO

作者:Kaspar Sakmann

6144ebeb12abf6f496cef169ce72952e5dd369ec

Twitter

Facebook


介绍

       对于Udacity(优达学城)自动驾驶汽车纳米学位的汽车检测和跟踪项目,如果使用传统的计算机可视化技术将是一个挑战,就像方向梯度直方图(Histogramof Oriented Gradients,HOG)和其它特征组合在一起在视频里跟踪汽车一样,理想的解决方案应该是实时运行的,如>30FPS,我曾经使用线性SVM来处理视频,在一台i7CPU计算机上得到的结果只有可怜的3FPS。最后我使用YOLO来处理视频终于通过了Udacity的项目,YOLO是一个超快的用于对象检测的卷积神经网络,如果你的GPU够快(我当时使用的是GTX1080),视频处理的速度可以达到65FPS,比我用SVM+HOG的方法足足快20倍。

6cba4625f0e5356d7cbb62f14375d93bf589b318

使用YOLO来处理Udacity汽车跟踪项目视频在检测汽车时表现优异

数据集

        我使用了KITTIGTI数据集,以及来自项目训练仓库的一些其它数据,只有两类数据:有车的和没有车的,GTI数据从视频流获得,因此所有图像都完全是随机的,然后被分为训练和测试数据集,在训练和测试数据集之间建立相关关系,我将每个数据源30%的数据集作为验证和测试数据集,所有图像都被重置为64x64像素的大小,以便于特征的提取。

特征提取

    我使用的特征向量如下:

  • 空间特征:除了用于自检的像斑(16x16像素)外啥都没有。
  • 颜色直方图特征:捕获每个像斑的统计颜色信息,通过这种特征向量捕获的汽车颜色通常是非常饱和的。
  • 方向梯度直方图(HOG)特征:捕获每个图像通道的梯度结构,在不同的光线条件下,这种方法表现得还不错。

这篇博客里有关于HOG特征的详细描述,其思想始终是,在一个直方图里,在一个图像上聚集梯度,让特征向量在不同视角和光线条件下变得更加稳定。下面是HOG特征应用于有车的和没车的图像上时的可视化呈现。

788fe993a12cd1308a5872c244c1aa328230625f

HOG特征,从左边开始的4列:训练数据和它们在HLS颜色空间里的通道,右边3列:每个通道HOG向量的可视化效果

    最后一个特征向量包含前面3个不同方法提取的特征,因此有必要对每一个特征进行计量,防止因取值范围不同导致某一特征占主导地位,我使用了scikit学习包中的Standard.Scaler函数,通过移动平均值和按比例缩放到单位方差来标准化特征。

训练一个线性支持向量机

        和其它分类和检测问题不同,检测汽车需要强实时,因此,要在高准确性和速度之间取得平衡,影响性能最主要的两个参数是特征向量的长度和汽车检测算法,线性SVM在速度和准确性之间提供了最好的折中方案,比随机森林(快但准确性不够)和非线性SVM(rbf内核,非常慢)的表现要好得多。最后测试时使用了一个包含6156个特征的特征向量,准确性超过了98.5%,但仍然有将近1.5%的像斑时不时的晃眼,特别是车道线、事故故障和栏杆。

0c4169bbf6d451f058af84f5ead72b96dfcb3aeb

尽管有98.5%的的准确性,仍然有像斑分类错误

滑动窗口

          通常情况下,汽车检测和摄像机使用滑动窗口扫描图像一帧一帧记录类似,对每个窗口而言,通过计算特征向量并输入到分类器中,汽车在不同距离出现时,有必要搜索多个尺度,通常会有100多个特征向量需要提取,然后输入到分类器中,对每一帧图像进行处理。下面是正面检测大约150个窗口的例子,不出意外,仍然会有一些失误。

02038cc502c512c31e658b7692247500bdd01196

        为了过滤掉误判结果,我一直跟着检测窗口直到最后30帧,只考虑被准确识别的图像,最后有超过15次检测被记录下来,我用热图来呈现最终结果,可以看到噪点大大减少,如下:

369800a9d27ba14c263525adaf5087b3a93b7829

左图:一帧的所有检测窗口。右图:最后30帧的热图

    通过热图的阈值,包含所有非零值的热图最小矩形边界框就可以确定下来。

8cc7c663ecee5333e6ef268331506db6757aa1ea

左图:15次检测生成了关键的热图阈值。右图:画出边界矩形的最终效果

    在视频中应用全部通道后,围绕汽车画出的矩形边界如下所示:

视频链接

与YOLO比较及结论

    从2005年开始,使用HOG特征和线性SVM是最佳选择,直到最近,出现了非常快速的对象检测神经网络,对象检测速度可以达到准实时。我下载了暗网(darknet)仓库里的代码,使用YOLO处理项目视频,只需要稍稍修改一下代码,允许直接保存视频,结果相当让人吃惊,检测时并没有使用滑动窗口,但速度仍然非常快,一帧图像通过网络时只需要被处理一次,因此称之为YOLO--“youonly look once”。

视频链接

    用神经网络来处理一整幅图像与提取每个像斑的特征向量然后用SVM来处理相比,前者的代价更大,但是,对一幅图像来说,这种方法只需要处理一次,而SVM+HOG方案需要处理大约150次。上面大家看到的视频,我还没有进行过优化,如减少图像或定义兴趣区域,或者针对汽车做特定训练。在准确性相当时,YOLO比SVM+HOG要快20多倍,检测阈值可以被设置为任意置信水平,我保留默认值(50%),并且除了汽车之外不再检测其它对象,这让我相当兴奋,我将在另一个独立项目中进一步验证汽车检测的可能性。


     以上为译文。

    文章原标题《Vehicle tracking using a support vector machine vs. YOLO》,作者:Kaspar Sakmann,译者:耕牛的人,校核:主题曲(身形)。

    文章为简译,更为详细的内容,请查看 原文
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值