haar特征人脸检测的4个步骤:
提取人脸的haar-like特征每个haar-like特征使用类似cart的二分类决策树判别区域是否为人脸【两类:人脸 | 非人脸】,每个haar-like特征经过判别训练得到判别阈值构成多个最优弱分类器(且挑选了最优的haar-like特征)多个弱分类器级联构成强分类器【此步实际是在进行多个弱分类投票进行二分类的过程】级联多个强分类器进行人脸检测与分类弱分类器指的是效果比盲猜好的分类器
Haar特征是指把图像划分成多个长方形区域,对这些长方形区域计算像素值的总和,并比较与此长方形区域的其他邻接长方形区域像素总和的差异,并把差异值做为haar-like的特征值
haar-like特征最初有三种类型 haar 后来新增的几个模式 在提取Haar-Like特征的时候,我们利用不同尺寸的不同模式的Haar-like特征对图像进行提取,这就导致提取到大量的特征,且这些特征之间几乎没有相关性,所以我们需要确定对分类最有用的特征 对分类最有用的特征: 拿人脸举例来说,额头的区域总是比眼睛区域亮很多,鼻梁总是比两边的眼睛部分亮很多。因为这些特点的存在,当我们拿下图所示的两种模式提取haar特征,能得到最大的haar特征值 更多模式用于提取人脸特征
每个弱分类器只包含一个Haar-like特征,经过分类训练的每个Haar特征会获得一个阈值,(只有图片提取的该Haar特征值大于阈值,才会判定为人脸)
注:决策树的功能是选择最优分类特征,并分类, 只是对于弱分类器来说,分类只是简单的区分是不是人脸
构造一个最优弱分类器(此部分只会简述cart决策树的做法) 比如构造haar_like特征f1作为弱分类器的阈值,会计算每个样本的f1特征值,然后对所有样本的f1特征值进行排序,然后按顺序依次选择每个样本的f1特征值作为分类阈值,最后比较按照每个样本阈值进行分类的分类误差,选择分类误差最小的作为最终该弱分类器阈值
强分类器的生成: 1.初始化所有样本权重为1/N (N为样本总数) 2.迭代训练N个样本得到第一个最优分类器 3. 如果是非首次的弱分类器,接收了上一弱分类器的把负样本错分为正样本的样本进行训练,那在被训练前,该类样本会被提高权重,然后和被正确分类为正样本的样本一起被用来训练本次的弱分类器 4.将被本次的弱分类器分类为正样本的样本集送入下一弱分类器,循环3,4,直至得到T个最优弱分类器 5.组合T个最优弱分类器得到强分类器
训练好的强分类器的分类是由多个最优弱分类器共同决定的,多个最优弱分类器在进行投票时具有不同的投票权重,最终按权重加和得到分类结果 对于训练一个强分类器最重要的一点,就是当某个分类器判别出该区域或该图像无目标(无人脸),就不进行下一步的分类,直接判定为无目标(无人脸) 如下图假定有三个haar-like特征(f1,f2,f3)
对多个训练好的强分类器进行级联,对人脸图片进行检测。每个强分类器在检测过程按照顺序被称作stage,stage1表示第一个强分类器,下图展示强分类器训练的过程,其中false-postive表示原来是负样本被错分为正样本。
haar人脸检测采用固定图像大小,采用不同尺度的滑动窗口依次滑动整张图像进行检测
人脸检测步骤 1.选取当前滑动窗口对应的图像区域进行检测和分类,把对应的区域放入第一个强分类器,只要强分类器的任意弱分类器判别此区域不含人脸,就结束检测,并滑动窗口至下一区域。若第一个强分类器判别出该部分含有人脸,就会送入下一强分类器进行再检测和分类,【此后的过程和第一个强分类器,检测为无人脸即滑动检测下一区域,若检测为有人脸,则传至下一强分类器判别为有人脸】,如果最后一个强分类器判别为有人脸,则以窗口作为整张图片的人脸检测框。 2.从小到大,尝试不同尺寸的滑动窗口进行检测,并都进行步骤1.
此部分参考Haar Cascade
推荐阅读 https://www.cnblogs.com/BlueFire-py/p/9396837.html