AdaBoost人脸检测训练算法 (上)

2024-06-04 16:38

本文主要是介绍AdaBoost人脸检测训练算法 (上),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

http://blog.csdn.net/hqw7286/article/details/5556767



前在实际中应用人脸检测方法多为基于Adaboost学习算法的方法,这种检测方法最初由剑桥大学的两位大牛Paul ViolaMichael Jones[ViolaJones01]提出,并由另一位大牛英特尔公司的Rainer Lienhart[Lienhart02]对这一方法进行了改善。

这里,我先介绍ViolaJones的人脸检测方法,然后再介绍Lienhart的人脸检测算法。

我们可以发现,两种检测方法的大体框架是相同的,只是在Harr-like特征的选取、计算以及AdaBoost的训练算法上有区别。

 

ViolaJones人脸检测方法

 

ViolaJones人脸检测方法是一种基于积分图级联检测器和AdaBoost算法的方法,方法框架可以分为以下三大部分:
    1)使用Harr-like特征表示人脸,使用“积分图”实现特征数值的快速计算;
    
2)使用Adaboost算法挑选出一些最能代表人脸的矩形特征(分类),按照加权投票的方式将弱分类器构造为一个强分类器;
    
3)将训练得到的若干强分类器串联组成一个级联结构的层叠分类器,级联结构能有效地提高分类器的检测速度

 

一、Haar-like矩形特征的特征值的快速计算方法

 

影响AdaBoost人脸检测训练算法速度很重要的两方面是特征选取和特征计算。选取的特征为矩特征为Haar特征,计算的方法为积分图。

 

1Haar-like特征

 

Haar-like特征最早是由Papageorgiou等应用于人脸表示,Viola和Jones在此基础上,使用3种类型4种形式的特征。

3种类型分别为:2-矩形特征、3-矩形特征、4-矩形特征。

Haar特征分为三类:边缘特征、线性特征、中心特征和对角线特征,组合成特征模板。

特征模板内有白色和黑色两种矩形,并定义该模板的特征值为白色矩形像素和减去黑色矩形像素和。

 对于图中的A,  B和D这类特征,特征数值计算公式为:v=Sum-Sum

 而对于C来说,计算公式如下:v=Sum-2*Sum

之所以将黑色区域像素和乘以2,是为了使两种矩形区域中像素数目一致。

 

通过改变特征模板的大小和位置,可在图像子窗口中穷举出大量的特征。

上图的特征模板称为“特征原型”;特征原型在图像子窗口中扩展(平移伸缩)得到的特征称为“矩形特征”;矩形特征的称为特征值”。

假设训练或检测窗口大小为W x H个像素,w , h分别为特征原型的长、宽,所示四种特征原型对应的w /h分别为:2/1,1/2,3/1,2/2。

 

一个haar-like特征在24*24像素图的子检测窗口中的矩形特征数量总计为134736个。

 

2、积分图(Integral Image

 

积分图主要的思想是将图像从起点开始到各个点所形成的矩形区域像素之和作为一个数组的元素保存在内存中,当要计算某个区域的像素和时可以直接索引数组的元素,不用重新计算这个区域的像素和,从而加快了计算。(最近听过屈婉玲老师课的话,应该知道,这有个相应的称呼,叫做动态规划算法)

点(x,y)处的积分图,定义为点(x,y)左上角所有像素和。用公式表示为:

其中,I(x',y')为图像在点(x',y')处的像素值。

为了节约时间,减少重复计算,则积分图可按如下递推公式计算:

其中,ii(x,y)为点(x,y)的积分图,i(x,y)为点(x,y)处的像素值,s(x,y)为点(x,y)的累计行总和。

 

这样就可以进行2种运算:

1)任意矩形区域内像素积分

由图像的积分图可方便快速地计算图像中任意矩形内所有像素灰度积分。

如下图所示,点1的积分图像ii1的值为(其中Sum为求和):

ii1=SumA

同理,点2、点3、点4的积分图像分别为:

ii2=Sum(A)+Sum(B)

ii3=Sum(A)+Sum(C)

ii4=Sum(A)+Sum(B)+Sum(C)+Sum(D)

矩形区域D内的所有像素灰度积分可由矩形端点的积分图像值得到:

        Sum(D)=ii1+ii4-(ii2+ii3)            (1)

 

(2)特征值计算

矩形特征的特征值是两个不同的矩形区域像素和之差。

由(1)式可以计算任意矩形特征的特征值。

上图中,该特征原型的特征值定义为:Sum(A)-Sum(B)

根据(1)式则有:Sum(A)=ii4+ii1-(ii2+ii3)Sum(B)=ii6+ii3-(ii4+ii5)

所以此类特征原型的特征值为:(ii4-ii3)-(ii2-ii1)+(ii4-ii3)-(ii6-ii5)

 

矩形特征的特征值计算,只与此特征矩形的端点的积分图有关,所以不管此特征矩形的尺度变换如何,特征值的计算所消耗的时间都是常量。这样只要遍历图像一次,就可以求得所有子窗口的特征值。

 

二、使用Adaboost算法选取优化的弱分类器和级联结构的层叠分类器

 

在确定了特征形式后,Harr- like特征的数量就取决于训练样本图像矩阵的大小,特征模板在子窗口内任意放置,一种形态称为一种特征,找出所有子窗口的特征是进行弱分类训练的基础。

训练过程分为3个步骤:首先需要提取Haar特征;然后将Haar特征转化成对应的弱分类器;最后从大量的弱分类器中迭代选择出最优弱分类器。

 

1)提取Haar特征

 

常用的Haar特征有4种。

 

当然也可以在这4种特征的基础上设计出更多、更复杂的特征。以大小为24x24像素的训练样本为例,上述4种特征的总个数超过了160000个。

这样庞大的数字给后续的迭代训练工作带来了庞大的计算量,直接导致AdaBoost算法训练过程极为费时,这恰恰是算法需要改进的关键问题之一。

 

2)生成弱分类器

 

AdaBoost的学习算法能从一个很大的特征集中选择很小的一部分关键的特征,从而产生一个极其有效的分类器。

最初的AdaBoost学习算法可用于提高一个简单的分类器(有时又称为弱分类器)的性能,它最终形成的强分类器的训练错误率接近于零,而且具有很好的推广性。

每一个Haar特征都对应着一个弱分类器,每一个弱分类器都是根据它所对应的Haar特征的参数来定义的。利用上述Haar特征的位置信息,对训练样本进行统计就可以得到对应的特征参数。

Viola共定义了180,000种矩形特征,这个数远大于图像中像素的数目。每个特征都能很快计算出来,再通过试验选出一小部分作为特征以形成一个有效的分类器。要得到最终的强分类器,最重要的是如何找到这些特征。

为此起见,每个弱分类器的设计都是从能对正例和反例进行正确分类的所有弱分类器的集合中选择错误率最小的一个。对每个特征而言,弱学习器决定弱分类器的最佳的阈值,使其具有最小的误分样本数。

因此一个弱分类器hj(x)是由一个特征(fj)、一个阈值(θj)和一个指示不等式方向的校验器(pj)构成:

其中x表示图像中一个24 x24像素大小的子窗口。

这篇关于AdaBoost人脸检测训练算法 (上)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1030541

相关文章

SpringBoot使用Apache Tika检测敏感信息

《SpringBoot使用ApacheTika检测敏感信息》ApacheTika是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,下面我们来看看如何使用Ap... 目录Tika 主要特性1. 多格式支持2. 自动文件类型检测3. 文本和元数据提取4. 支持 OCR(光学

Python中的随机森林算法与实战

《Python中的随机森林算法与实战》本文详细介绍了随机森林算法,包括其原理、实现步骤、分类和回归案例,并讨论了其优点和缺点,通过面向对象编程实现了一个简单的随机森林模型,并应用于鸢尾花分类和波士顿房... 目录1、随机森林算法概述2、随机森林的原理3、实现步骤4、分类案例:使用随机森林预测鸢尾花品种4.1

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

康拓展开(hash算法中会用到)

康拓展开是一个全排列到一个自然数的双射(也就是某个全排列与某个自然数一一对应) 公式: X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[1]*0! 其中,a[i]为整数,并且0<=a[i]<i,1<=i<=n。(a[i]在不同应用中的含义不同); 典型应用: 计算当前排列在所有由小到大全排列中的顺序,也就是说求当前排列是第

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

poj 3974 and hdu 3068 最长回文串的O(n)解法(Manacher算法)

求一段字符串中的最长回文串。 因为数据量比较大,用原来的O(n^2)会爆。 小白上的O(n^2)解法代码:TLE啦~ #include<stdio.h>#include<string.h>const int Maxn = 1000000;char s[Maxn];int main(){char e[] = {"END"};while(scanf("%s", s) != EO

烟火目标检测数据集 7800张 烟火检测 带标注 voc yolo

一个包含7800张带标注图像的数据集,专门用于烟火目标检测,是一个非常有价值的资源,尤其对于那些致力于公共安全、事件管理和烟花表演监控等领域的人士而言。下面是对此数据集的一个详细介绍: 数据集名称:烟火目标检测数据集 数据集规模: 图片数量:7800张类别:主要包含烟火类目标,可能还包括其他相关类别,如烟火发射装置、背景等。格式:图像文件通常为JPEG或PNG格式;标注文件可能为X

秋招最新大模型算法面试,熬夜都要肝完它

💥大家在面试大模型LLM这个板块的时候,不知道面试完会不会复盘、总结,做笔记的习惯,这份大模型算法岗面试八股笔记也帮助不少人拿到过offer ✨对于面试大模型算法工程师会有一定的帮助,都附有完整答案,熬夜也要看完,祝大家一臂之力 这份《大模型算法工程师面试题》已经上传CSDN,还有完整版的大模型 AI 学习资料,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费