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

介绍

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

数据集

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

特征提取

我使用的特征向量如下:

空间特征:除了用于自检的像斑(16x16像素)外啥都没有。

颜色直方图特征:捕获每个像斑的统计颜色信息,通过这种特征向量捕获的汽车颜色通常是非常饱和的。

方向梯度直方图(HOG)特征:捕获每个图像通道的梯度结构,在不同的光线条件下,这种方法表现得还不错。

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

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

训练一个线性支持向量机

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

滑动窗口

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

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

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

全文点击:http://click.aliyun.com/m/12645/

时间: 2024-12-05 18:48:23

车辆追踪算法大PK:SVM+HOGvs.YOLO的相关文章

设计模式之行为类模式大PK

                                    行为类模式大PK 行为类模式包括责任链模式.命令模式.解释器模式.迭代器模式.中介者模式.备忘录模式.观察者模式.状态模式.策略模式.模板方法模式.访问者模式.该组设计模式众多,如下我们着重介绍一下命令模式VS策略模式.状态模式VS策略模式.观察者模式VS责任链模式. 命令模式VS策略模式 命令模式和策略模式类图很相似,只是命令模式多了一个接收者(Receiver)角色,通过确切的Command类调用Receiver类,实现

RQNOJ192 梦幻大PK

题意:有n个人,每个不能和 m[i] 个PK,并知道是哪 m[i] 个,求最大PK数. 题解:核心算法 -> 匈牙利算法 CODE: /* Author: JDD PROG: rqnoj192 梦幻大PK DATE: 2015.9.28 */ #include <cstdio> #include <cstring> #define REP(i, s, n) for(int i = s; i <= n; i ++) #define REP_(i, s, n) for(in

第28章 行为型模式大PK

27.1 策略模式 VS 命令模式 27.1.1 策略模式实现压缩算法 //行为型模式大PK——策略模式和命令模式 //实例:用策略模式实现压缩算法 #include <iostream> #include <string> using namespace std; //抽象压缩算法 class Algorithm { public: //压缩算法 virtual bool compress(string source, string to) = 0; //解压算法 virtual

第29章 跨战区大PK

29.1 策略模式 VS 桥梁模式 29.1.1 策略模式 [编程实验]用策略模式实现邮件发送 (1)有文本和超文本两种格式的邮件,将这两种格式封装成两种不同的发送策略. (2)文本邮件和超文本邮件分别是两种不同格式的邮件的封装.MailServer是一个环境角色,它接收一个MailTemplate对象,并通过sentMail方法将邮件发送出去. //跨战区大PK——策略模式和桥接模式 //实例:用策略模式实现邮件发送 #include <iostream> #include <stri

深度学习之目标检测常用算法原理+实践精讲 YOLO / Faster RCNN / SSD / 文本检测 / 多任务网络

深度学习之目标检测常用算法原理+实践精讲 YOLO / Faster RCNN / SSD / 文本检测 / 多任务网络 资源获取链接:点击这里 第1章 课程介绍 本章节主要介绍课程的主要内容.核心知识点.课程涉及到的应用案例.深度学习算法设计通用流程.适应人群.学习本门课程的前置条件.学习后达到的效果等,帮助大家从整体上了解本门课程的整体脉络. 1-1 课程导学 第2章 目标检测算法基础介绍 本章节主要介绍目标检测算法的基本概念.传统的目标检测算法.目前深度学习目标检测主流方法(one-sta

算法大神之路----排序(冒泡排序法)

冒泡排序法 冒泡排序法又称为交换排序法,是由观察水中冒泡变化构思而成,气泡随着水深压力而改变.气泡在水底时,水压最大,气泡最小,而气泡慢慢浮上水面时,气泡所受压力最小,体积慢慢变大. 冒泡排序比较方式是从第一个元素开始,比较相邻的元素大小,如果大小顺序有误,则对调后进行下一个元素比较.直到所有元素满足关系为止. 冒泡排序法分析 冒泡排序法平均情况下,需要比较(n-1)/2次,时间复杂度为O(n2),最好的情况只需要扫描一次,不用操作,即作n-1次比较,时间复杂度为O(n). 由于冒泡排序为相邻两

RQNOJ PID192 梦幻大PK [2017年6月计划 二分图02]

PID192 / 梦幻大PK ☆ 提交你的代码 查看讨论和题解 你还木有做过哦 我的状态 查看最后一次评测记录 质量 7 题目评价 质量 7 ★★★★★ ★★★★☆ ★★★☆☆ ★★☆☆☆ ★☆☆☆☆ 50% 0% 25% 0% 25% ★ ★ ★ ★ ☆ 通过人数 754 / 2273 通过统计 最短耗时 0ms 最小内存 0KB 匹配 题目标签 类型 匹配 题目描述 难得到了生日,正逢上班里面一年一度的梦幻大PK,分2组对拼.但是由于某种原因,参加PK的第1组中有些人不能和第2组人PK.可能

算法---大整数相加

原文:算法---大整数相加 开通博客开始第一次写发表算法博客.深知一半算法考试都是用C,C++,由于大四开始到今年毕业工作到现在一直从事C#开发,C++用得很少了.链表,指针也只知道一个概念了.用得没以前熟练了.所以后续更新的算法题我都是基于C#语法的.算法主要体现的是解题思路.跟题目一样,本次算法主要实现大数据相加. 解题思路: 1. 将大数据存储到一个链表中,C#中用List<int>来存储,每个节点表示每一位的数字. {1,2,3,4,5} =>12345 和{9,6,5,9,5}

算法大神之路----排序(选择排序法)

选择排序法,顾名思义,就是把特定的数据选择出来进行排序. 选择排序法有两种方式 在所有的数据中,当由大到小排序,那么就将最大值放到第一个位置 如果由小到大排序,那么就将最小值放到第一个位置 以由小到大排序举例,当排序时候,扫描整个数据,拿第一个依次与其他做比较,如果其他数据比第一个大,或者相等,那么就不交换,如果其他数据比第一个数小,那么就交换二者的位置,扫描结束后,则从第二个数开始,依次扫描. 方法分析 无论是最坏还是最好情况,甚至是平均情况下,都需要对全部数据进行扫描,找到最大或最小值,因此