1. 行人检测算法概述
目标检测现在主要分为以下几个方向:
(2)基于机器学习的方法(现阶段行人检测算法的主流)也是目前行人检测最常用的方法。基于大量样本构建行人检测分类器提取的特征主要包括目标的灰度、边缘、纹理、颜色、梯度直方图等信息,分类器主要有神经网络、SVM、adaboost、深度学习,现在被视为计算机视觉的宠儿.
目前统计机器学习的难点:
目前行人检测基本基于HOG+SVM行人检测算法(Histograms of Oriented Gradients for Human Detection, Navneet Dalel, Bill Triggs, CVPR2005), Navneet Dalel, Bill Triggs, CVPR2005) 发表由法国研究员 Dalal 于 2005 年在 CVPR 发表。 HOG+ 作为经典算法,SVM 也集成到 opencv 中,可以直接调用实现行人检测。
为了解决速度问题,可以使用背景差分法的统计学习行人检测,前提是背景建模方法足够有效(即效果好,速度快)。关联的分类器。(常用的特征有Harry-like、Hog特征、LBP特征、Edgelet特征、CSS特征、COV特征、积分通道特征和CENTRIST特征)。
参考文献:写的概述比较好行人检测简述CSDN排名266 CSDN排名6211,写的还行
内容摘要如下:
2.基于机器学习的方法:人工特征+分类器2.1HOG+SVM
人体有自己的外观特征,我们可以手动设计特征,然后用这个特征训练一个分类器来区分行人和背景。这些特征包括机器学习中常用的颜色、边缘、纹理等特征。使用的分类器包括神经网络、SVM、AdaBoost、随机森林等计算机视觉常用的算法。因为是检测问题,所以一般使用滑动窗口技术,在SIGAI之前的公众号文章《人脸检测算法综述》和《基于深度学习的目标检测算法综述》中都有介绍。
行人检测的第一个里程碑成就是 Navneet Dalal 于 2005 年在 CVPR [5] 中提出的基于 HOG + SVM 的行人检测算法。Navneet Dalal 是之前在行人检测中使用的 INRIA 数据集的创建者。
梯度方向直方图(HOG)是一种边缘特征,它利用边缘的方向和强度信息,后来被广泛应用于车辆检测、车牌检测等视觉对象检测问题。HOG的方法是先计算固定大小图像的梯度,然后划分网格,计算每个点的梯度方向和强度,然后形成网格中所有像素点的梯度方向分布直方图,最后求和它形成了整个直方图特征。
该特征很好地描述了行人的形状和外观信息,比 Haar 特征更强大。此外,该特征对光照变化和少量空间平移不敏感。下图展示了使用HOG特征进行行人检测的过程:
在获得候选区域的HOG特征后,需要使用分类器对该区域进行分类,判断是行人区域还是背景区域。在实现中,使用了线性支持向量机,因为使用非线性核的支持向量机在预测中的计算量太大,与支持向量的个数成正比。如果读者对这个问题感兴趣,可以阅读SIGAI之前关于SVM的文章。
目前OpenCV中的行人检测算法支持HOG+SVM和HOG+Cascade,两者均采用滑动窗口技术,以固定大小的窗口扫描整张图像,然后对每个窗口进行前景和背景的二分类. 为了检测不同大小的行人,还需要对图像进行缩放。
2.2HOG+Adaboost
由于HOG+SVM方案计算量太大,为了提高速度,一些研究人员在人脸检测中参考了VJ[6]的分类器设计思想,将AdaBoost分类器级联策略应用于人体检测。只需将 Haar 特征替换为 HOG 特征即可行人检测输入图片,因为 Haar 特征过于简单,无法描述人体的复杂形状。下图展示了基于级联Cascade分类器的检测过程:
图中每一层的分类器都是AdaBoost算法学习到的强分类器。前几个强分类器在分类器训练时会优先考虑弱分类器,因此可以选择最好的。集成几个弱分类器,全部只需要几个就可以达到预期的效果,计算会很简单,速度会很快,大部分背景窗口会很快被排除掉,留下一小部分候选区域或通过分类器的后续阶段进行判别,整体检测速度有了很大提高。相同条件下的预测时间仅为基于 SVM 方法的十分之一。
2.3 ICF+AdaBoost
HOG特征只关注物体的边缘和形状信息,并没有有效记录目标的表观信息,因此难以处理遮挡问题,而且由于梯度的性质,特征对噪音很敏感。针对这些问题,后来有人提出了积分通道特征(ICF)[7],积分通道特征包括10个通道:
6个方向的梯度直方图,3个LUV颜色通道和1个梯度幅值,如下图所示,这些通道可以高效的计算并捕捉输入图像的不同信息。
在本文中行人检测输入图片,AdaBoost 分类器使用了软级联级联。为了检测不同大小的行人,作者没有进行图像缩放,然后用固定大小的分类器进行扫描,而是训练了几个典型尺度的分类器。对于其他尺度的行人,使用这些典型尺度分类器的预测。结果通过插值来近似,因此不需要对图像进行缩放。这比直接缩放图像更准确,因为附近行人和远处行人的外观非常不同。这个思路在后面的文章中也可以参考。该算法通过GPU加速,实现了实时性和高精度,是当时的巅峰之作。
2.4 DPM+ 潜在 SVM
行人检测的一个主要问题是遮挡问题。为了解决这个问题,出现了一种成分检测的方法。人体被分为头肩、躯干、四肢等部分,分别对这些部分进行检测,然后将结果组合起来。,使用的典型特征仍然是HOG,使用的分类器是SVM和AdaBoost。对于密集和遮挡场景下的行人检测算法,可以阅读[15]。
DPM(Deformable Parts Models)算法在SIGAI之前的文章《基于深度学习的目标检测算法综述》中已经提到过。这是一种基于组件的检测算法。DPM检测中使用的特征是HOG,它独立地对目标不同部分的分量进行建模。根模型和部分模型在DPM中的作用,根模型(Root-Filter)主要是定位物体的潜在区域,获取可能存在的物体的位置,但是物体是否我们期望的确实存在,需要结合组件模型(Part-Filter)Filter)计算后进一步确认,DPM的算法流程如下:
DPM算法在人体检测方面取得了不错的效果,主要有以下几个原因:
基于定向梯度直方图(HOG)的低级特征(具有很强的描述能力)基于可变形组件模型的高效匹配算法采用具有强判别能力的latent-SVM分类器
DPM 算法也有明显的局限性。一是DPM特征计算复杂,计算速度慢(论文[8]提出了多种DPM加速策略,感兴趣的读者可以参考);拉伸和视角变化的物体检测效果较差。这些缺点很大程度上限制了算法的应用场景,这也是基于人工特征+分类器的常见问题。
虽然使用经典机器学习的算法取得了不错的效果,但仍然存在以下问题:
1.对不同外貌、视角和姿势的行人的检测准确率仍然不高
2.提取的特征在特征空间的分布不够紧凑
3.分类器的性能受训练样本影响很大
4.离线训练时的负样本无法覆盖所有真实应用场景
更多基于机器学习的方法,请参考综述文章[10][18][19]。参考文献[10]简要描述了16种常见的行人检测算法,并在6个公共测试库上进行了测试,给出了各种方法的优缺点和适用性。
参考文献 [18] 提出了 Caltech 数据集,该数据集比以前的数据集大 2 个数量级。作者在这个数据集上对比了当时的主要算法,分析了一些失败的原因,并为后续研究指明了方向。
参考文献[19]还比较了过去10年的行人检测算法,总结了各种改进措施,支持未来的研究方向。
3.HOG+SVM环境配置3.1个数据集INRIADATA
来自HOG+SVM的论文,论文中使用的图片经过了归一化处理。
有几种训练和测试选项:
使用 normalized_images 目录下的图片进行训练,或者使用 original_images 目录下的图片 + annotations 获取行人区域进行训练;这些测试都是在 original_images/test/pos 上测试的。
这个数据集来自github搜索关键字:HOG+SVM,或者github搜索关键字:HOG+SVM行人检测,后者star最多,找不到原作者。反正作者已经划分了以下数据集:
3.2算法原理
材料:HOG 特征检测学习笔记,HOG 的 MATLAB 代码。
3.2.1 方向梯度的 HOG 直方图
HOG梯度方向直方图如何计算?
Histogram of Oriented Gradients (HOG) 这篇文章详细介绍了HOG特征是如何提取和计算的,棒极了!
关键图片如下:
其他信息:
CSDN 266
CSDN 3081代码
CSDN C++代码
HOG+SVM参考资料大合集
3.2.2 使用线性SVM进行训练
提取特征+分类器,如果提取了好的特征,用任何分类器都可以得到好的结果。
为什么使用线性 SVM?
另一个问题是何时选择 SVM 或逻辑回归?如图所示:
1. 特征维度 n 非常大:
使用逻辑回归和线性 SVM。
2. 特征维度 n 小,样本量 m 中等:
使用高斯核 SVM。
3. 特征维度n很小,样本数量m很大:
- 可以创建新功能
- 然后使用逻辑回归和无核 SVM
什么是线性 SVM?
左图是一个线性SVM,即不使用核函数,
馈入 SVM 以形成大间距分类器。后者使用高斯核函数,可以获得复杂的曲线边界。
3.3.3代码