概述
Python微信订餐小程序课程视频
https://blog.csdn.net/m0_56069948/article/details/122285951
Python实战量化交易理财系统
https://blog.csdn.net/m0_56069948/article/details/122285941
前言
最近在学习人脸的目标检测任务时,用了Haar人脸检测算法,这个算法实现起来太简洁了,读入个.xml,调用函数就能用。但是深入了解我发现这个算法原理很复杂,也很优秀。究其根源,于是我找了好些篇相关论文,主要读了2001年Paul Viola和Michael Jones在CVPR上发表的一篇可以说是震惊了计算机视觉的文章,《Rapid Objection Dection using a Boosted Cascade of Simple Features》。这个算法最大的特点就是快!在当时,它能够做到实时演示人脸检测效果,这在当时的硬件情况下是非常震惊的,且还具有极高的准确率。同时在2011年,这篇论文在科罗多拉的会议上获得了“十年内影响最为深远的一篇文章”。在我们知道这篇文章有多么的NB之后,接下来我们来细细的品味这篇文章的技术细节。
根据论文Abstract描述,该论文主要有三个巨大贡献:
- 第一个贡献是引入了“积分图”的图像表示方法,它能够加快检测时的计算速度;
- 第二个贡献是提出了一个基于AdaBoost的学习算法,它能够从大量的数据中提取少量且有效的特征来学习一个高效的分类器;
- 第三个贡献是提出了注意力级联的算法,它能够让分类器更多聚焦于object-like区别,而不是与被检测目标无关的背景图像等区域,也是极大的加快了目标检测速度。
总结起来就是,Haar级联算法实际上是使用了boosting算法中的AdaBoost算法,Harr分类器用AdaBoost算法构建了一个强分类器进行级联,而再底层特征特区上采用的是更加高效的矩形特征以及积分图方法,即:
Haar分类器 = Haar-like特征 + 积分图法 + AdaBoost算法 + 级联
1. Haar-like特征提取
注意:由于原论文中对于Haar-like特征的描述过少,很多细节不完整,这部分将会详细介绍论文中没有讲的算法细节。
1.1 基本Haar特征
Haar-like是一种非常经典的特征提取算法,尤其是它与AdaBoost组合使用时对人脸检测有着非常不错的效果。虽然一般提及到Haar-like的时候,都会和AdaBoost、级联分类器、人脸检测、积分图一起出现,但是Haar-like本质上只是一种特征提取算法。它涉及到了三篇经典论文,尤其是第三篇论文,让它快速发展。
最原始的Haar-like特征是在《A general framework for object detection》中提出的,它定义了四个基本特征结构,如下图所示:
可以将这个它们理解成为一个窗口,这个窗口将在图像中做步长为1的滑动,最终遍历整个图像。它的整体遍历过程是:当一次遍历结束后,窗口将在宽度或长度上,窗口将在宽度或长度上成比例的放大,再重新之前遍历的步骤,直到放大到最后一个比例后结束(放大的最大比例一般是与原图像相同大小比例)。
例子:以x3特征为例,在放大+平移过程中白:黑:白面积比始终是1:1:1。首先在红框所示的检测窗口中生成大小为3个像素的最小x3特征;之后分别沿着x和y平移产生了在检测窗口中不同位置的大量最小3像素x3特征;然后把最小x3特征分别沿着x和y放大,再平移,又产生了一系列大一点x3特征;然后继续放大+平移,重复此过程,直到放大后的x3和检测窗口一样大。这样x3就产生了完整的x3系列特征。
同样,通过我们上文中关于Haar-like特征的遍历过程可知,Haar特征可以在检测窗口中由放大+平移产生(黑:白区域面积比始终保持不变)。那么这些通过放大 + 平移的子特征总共有多少个呢?Rainer Lienhart在他的论文中给出了解释:假设检测窗口大小为W∗HW∗HWH,矩阵特征大小为w∗hw∗hwh,X和Y为表示矩形特征在水平和垂直方向能放大的最大比例系数:
X=[Ww]Y=[Hh]X=[Ww]Y=[Hh]X = [frac{W}{w}]
Y = [frac{H}{h}]
其中WWW和HHH是整个图像的宽高,www和hhh是Harr窗口的初始宽高,可以放大的倍数为X⋅YX·YX·Y。
根据以上,在检测窗口Window中,一般矩形特征(upright rectangle)的数量为:
XY(W+1−wX+12)(H+1−hY+12)XY(W+1−wX+12)(H+1−hY+12)XY(W + 1-wfrac{X+1}{2})(H+1-hfrac{Y+1}{2})
以x3的特征(即特征大小的pixel为1x3)为例来解释这个公式:
- 特征框竖直放大1倍,即无放大,竖直方向有(H-h+1)个特征
- 特征框竖直放大2倍,竖直方向有(H - 2h + 1)个特征
- 特征框竖直放大3倍,竖直方向有(H - 3h + 1)个特征
- 如此到竖直放大Y = floor(H/h)倍,竖直方向有1个特征,即(H-Y*h+1)
那么竖直方向总共有:
(H - h + 1) + (H - 2h + 1) + (H - 3h + 1) + … + (H - Y*h + 1) = Y[H + 1 - h(1 + Y)/2]个特征。水平方向同理可得。
考虑到水平和竖直方向缩放是独立的,当x3特征在24*24大小的检测窗口时,此时(W=H=24,w=3,h=1,X=8,Y=24),一共能产生27600个子特征。
1.2 扩展Haar特征
在基本的四个Haar特征基础上,文章《An entended set of Haar-like features for rapid objection detection》将原来的4个特征拓展为14个。这些拓展特征主要增加了旋转性,能够提取到更丰富的边缘信息。比如:如果一张要检测的人脸不是人脸,是一张侧脸的时候,此时基本的四个Haar特征就没法对其进行有效的
最后
以上就是香蕉台灯为你收集整理的使用Harr特征的级联分类器实现目标检测前言1. Haar-like特征提取2. 积分图计算3. AdaBoost4. AdaBoost级联分类器5. 总结6. 参考文献的全部内容,希望文章能够帮你解决使用Harr特征的级联分类器实现目标检测前言1. Haar-like特征提取2. 积分图计算3. AdaBoost4. AdaBoost级联分类器5. 总结6. 参考文献所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复