opencv目标检测器训练的资料整理

概述

opencv自带的分类器是adaboost分类器算法思想是通过迭代训练弱分类器得到一个强分类器。每次迭代得到局部最优的分类器,然后将局部最优的分类器权值相加最后得到一个可用的强分类器。具体的原理可参考《浅析人脸检测之Haar分类器方法》

在windows下编译opencv之后,在build\x64\vc14\bin目录下回有opencv_createsamples.exe和opencv_traincascade.exe这两个可执行文件,分别用于创建训练样本和训练。关于训练的方法请参考下方资料里的链接。

目前可以选择haar-like或者LBP特征的训练。根据下方《Training a better Haar and LBP cascade based Eye Detector using OpenCV》里的说法,在大规模训练之后,眼睛检测的准确率可以达到99%(Haar )和95%(LBP )。我没有人脸的数据,但是如果真的大规模训练的话,人脸的检测准确率应该也差不多。根据作者的说法,opencv自带的人眼检测模型,准确率只有89%。

当然,opencv提供了预训练好的人脸检测和眼睛检测的模型。这些模型文件在opencv的源码目录的data子目录下面。关于调用oepncv进行人脸识别,可参考前面的博客《python-opencv 使用LBP特征检测人脸》

LBP特征用于检测的原理

这段摘抄自《图像特征提取三大法宝:HOG特征,LBP特征,Haar特征》。

显而易见的是,上述提取的LBP算子在每个像素点都可以得到一个LBP“编码”,那么,对一幅图像(记录的是每个像素点的灰度值)提取其原始的LBP算子之后,得到的原始LBP特征依然是“一幅图片”(记录的是每个像素点的LBP值)。

LBP的应用中,如纹理分类、人脸分析等,一般都不将LBP图谱作为特征向量用于分类识别,而是采用LBP特征谱的统计直方图作为特征向量用于分类识别。

因为,从上面的分析我们可以看出,这个“特征”跟位置信息是紧密相关的。直接对两幅图片提取这种“特征”,并进行判别分析的话,会因为“位置没有对准”而产生很大的误差。后来,研究人员发现,可以将一幅图片划分为若干的子区域,对每个子区域内的每个像素点都提取LBP特征,然后,在每个子区域内建立LBP特征的统计直方图。如此一来,每个子区域,就可以用一个统计直方图来进行描述;整个图片就由若干个统计直方图组成;

个人理解:对LBP处理后的图进行方向梯度识别

参考资料

  • 这个博客还是非常详细的:浅析人脸检测之Haar分类器方法
  • OpenCV训练自己的人脸检测级连分类器并测试

  • opencv利用Cascade Classifier训练人脸检测器

  • 基础学习笔记之opencv(3):haartraining生成.xml文件过程
  • OpenCV 之 HaarTraining 算法剖析
  • Training a better Haar and LBP cascade based Eye Detector using OpenCV
  • 图像特征提取三大法宝:HOG特征,LBP特征,Haar特征

你可能感兴趣的:(目标检测,opencv,机器学习,DL/ML/AI,人脸识别,机器视觉,这就是opencv)