人脸检测源码解析——1、训练参数

来源:互联网 发布:linux漏洞挖掘 编辑:程序博客网 时间:2024/05/16 00:54

        在后面的章节中我们将对opencv2.4.9版本的Haar特征训练级联分类器的流程进行解析。打开OpenCV解决方案,找到applications/opencv_traincascade项目,训练的主要代码都在该项目中。

        打开traincascade.cpp文件,训练程序是一个命令行程序,用来设置训练的数据源和一些必要参数。二话不说先运行一把看看,编译项目运行打印如下:

<span style="font-family:Courier New;font-size:14px;">Usage: traincascade.exe  -data<cascade_dir_name>  -vec<vec_file_name>  -bg<background_file_name>  [-numPos<number_of_positive_samples = 2000>]  [-numNeg<number_of_negative_samples = 1000>] [-numStages <number_of_stages = 20>] [-precalcValBufSize <precalculated_vals_buffer_size_in_Mb = 256>] [-precalcIdxBufSize <precalculated_idxs_buffer_size_in_Mb = 256>] [-baseFormatSave]--cascadeParams-- [-stageType <BOOST(default)>] [-featureType <{HAAR(default), LBP, HOG, DOI}>]  [-w<sampleWidth = 24>]  [-h<sampleHeight = 24>]--boostParams--  [-bt<{DAB, RAB, LB, GAB(default)}>] [-minHitRate <min_hit_rate> = 0.995>] [-maxFalseAlarmRate <max_false_alarm_rate = 0.5>] [-weightTrimRate <weight_trim_rate = 0.95>] [-maxDepth <max_depth_of_weak_tree = 1>] [-maxWeakCount <max_weak_tree_count = 100>]--haarFeatureParams--  [-mode<BASIC(default) | CORE | ALL--lbpFeatureParams----HOGFeatureParams----DOIFeatureParams--</span>

Haar训练参数

参数

作用

默认值

data

训练出来分类器数据的存放目录,训练完成会在该目录下生成cascade.xml文件,记录级联分类器的相关信息

 

vec

正样本数据集,由opencv附带的工具createsamples生成,把正样本的图片以vec文件的格式保存起来,包含整个正样本集的全部图片

 

bg

负样本图像的文件名列表,是一个文件每行存放了一个可以用作负样本的图片文件路径。需要负样本时,训练程序会自动读取列表中的图片,扣取需要大小的块作为负样本

 

numPos

训练一个弱分类器使用的正样本数目。不能超过vec文件包含的样本数目。

2000

numNeg

训练弱分类器的负样本数目。

2000

numStages

指定最大训练多少个层级,也就是强分类器H的个数。

14

featureType

指定使用何种特征,目前我们使用默认值Haar特征

HAAR

h

训练使用样本图像的高度,如果原始图像尺寸不一致则会缩放到该大小

24

w

训练图像的宽度

24

minHitRate

强分类器H的最小Recall值,后面我们称它为HitRate。

0.995

maxFalseAlarmRate

强分类器H的最大虚警率

0.5

weightTrimRate

boosting的过程中,更新权值后,进行下一个弱分类器训练时,可以把权值小的一部分去掉,这个值就是设置保留的比例。例如设置0.95,则保留权值高的前面95%的样本,后面的5%权值小的会被trim掉。

0.95

maxDepth

弱分类器CART树的最大深度

1

mode

使用haar特征的类型,如果设置为BASIC,则只使用5种基本特征Haar_x2 Haar_x3 Haar_y2 Haar_y3 Haar_x2_y2;如果设置为CORE,则还会使用Haar_x4 Haar_y4 Haar_point等3种特征;如果设置为ALL,则会使用tiled的特征,也就是全部类型的特征。

BASIC

 

        Traincascade.cpp文件的代码很简单,只包含一个main函数,收集命令行输入参数付给相应的变量,然后将参数传递给到CvCascadeClassifier::train函数执行。

   classifier.train( cascadeDirName,                      vecName,                     bgName,                      numPos, numNeg,                      precalcValBufSize,precalcIdxBufSize,                      numStages,                      cascadeParams,                     *featureParams[cascadeParams.featureType],                      stageParams,                      baseFormatSave );


1 0