关于opencv中训练级联分类器所使用opencv_createsamples.exe和opencv_traincascade.exe的参数的详细说明

关于如何训练分类器来识别一个新目标,可以看这里
重点注意事项:
OpenCV中有两个程序可以训练级联分类器: opencv_haartraining and opencv_traincascade。opencv_traincascade 是一个新程序,使用OpenCV 2.x API 以C++ 编写。这二者主要的区别是 opencv_traincascade 支持 Haar [Viola2001] 和 LBP [Liao2007] (Local Binary Patterns) 两种特征,并易于增加其他的特征。与Haar特征相比,LBP特征是整数特征,因此训练和检测过程都会比Haar特征快几倍。LBP和Haar特征用于检测的准确率,是依赖训练过程中的训练数据的质量和训练参数。训练一个与基于Haar特征同样准确度的LBP的分类器是可能的。
opencv_traincascade and opencv_haartraining 所输出的分类器文件格式并不相同。注意,新的级联检测接口(参考 objdetect 模块中的 CascadeClassifier 类)支持这两种格式。 opencv_traincascade 可以旧格式导出选练好的级联分类器。但是在训练过程被中断后再重启训练过程, opencv_traincascade and opencv_haartraining 不能装载与中断前不同的文件格式。
opencv_traincascade 程序使用TBB来处理多线程。如果希望使用多核并行运算加速,请使用TBB来编译OpenCV。
还有一些与训练相关的辅助程序。
opencv_createsamples 用来准备训练用的正样本数据和测试数据。 opencv_createsamples 能够生成能被 opencv_haartraining 和 opencv_traincascade 程序支持的正样本数据。它的输出为以 *.vec 为扩展名的文件,该文件以二进制方式存储图像。
opencv_performance 可以用来评估分类器的质量,但只能评估 opencv_haartraining 输出的分类器。它读入一组标注好的图像,运行分类器并报告性能,如检测到物体的数目,漏检的数目,误检的数目,以及其他信息。
既然 opencv_haartraining 是一个将被弃用的程序,下面将不再介绍,而会主要介绍 opencv_traincascade 。 opencv_createsamples 程序用来为 opencv_traincascade 准备训练样本,因此也会介绍它。
opencv_createsamples.exe参数的说明:
命令行参数:


-vec <vec_file_name>
	输出文件,内含用于训练的正样本。他应该有一个.vec文件扩展名。

-info <file_name>
	这是指定输入示例集合的文件的名字,包括文件名和在图像中示例目标的位置(例如自己创建的.dat
	文件)。

-img <image_file_name>
	这是-info的替代(必须提供其中一个)。使用-img,你可以提供单个裁剪的正向示例。在使用-img的
	模式中,将产生多个输出,且都来自于这一个输入。

-bg <background_file_name>
	背景图像的描述文件,文件中包含一系列的图像文件名,这些图像将被随机选作物体的背景。

-num <number_of_samples>
	生成的正样本的数目。

-bgcolor <background_color>
	背景颜色(目前为灰度图);背景颜色表示透明颜色。因为图像压缩可造成颜色偏差,颜色的容差
	可以由 -bgthresh 指定。所有处于 bgcolor-bgthresh 和 bgcolor+bgthresh 之间的像素都被设置为
	透明像素。

-bgthresh <background_color_threshold>

-inv
	如果指定该标志,前景图像的颜色将翻转。

-randinv
	如果指定该标志,颜色将随机地翻转。

-maxidev <max_intensity_deviation>
	前景样本里像素的亮度梯度的最大值。

-maxxangle <max_x_rotation_angle>
	X轴最大旋转角度,必须以弧度为单位。

-maxyangle <max_y_rotation_angle>
	Y轴最大旋转角度,必须以弧度为单位。

-maxzangle <max_z_rotation_angle>
	Z轴最大旋转角度,必须以弧度为单位。

-show
	很有用的调试选项。如果指定该选项,每个样本都将被显示。如果按下 Esc 键,程序将继续创建样
	本但不再显示。

-w <sample_width>
	输出样本的宽度(以像素为单位)。

-h <sample_height>
	输出样本的高度(以像素为单位)。

opencv_createsamples 也可以用来查看和检查保存于vec正样本文件中的正样本。这时只需指定 -vec , -w 和 -h 三个参数则可。 opencv_createsamples 将逐一显示正样本图像。
一个vec文件的例子位于 opencv/data/vec_files/trainingfaces_24-24.vec 。它可用来训练人脸分类器,窗口大小为: -w 24 -h 24 。

opencv_traincascade.exe参数的说明:
下面是 opencv_traincascade 的命令行参数,以用途分组介绍:


通用参数:
	-data <cascade_dir_name>
		目录名,如不存在训练程序会创建它,用于存放训练好的分类器。

	-vec <vec_file_name>
		包含正样本的vec文件名(由 opencv_createsamples 程序生成)。

	-bg <background_file_name>
		背景描述文件,也就是包含负样本文件名的那个描述文件。

	-numPos <number_of_positive_samples>
		每级分类器训练时所用的正样本数目,通常小于所提供的示例的数量。

	-numNeg <number_of_negative_samples>
		每级分类器训练时所用的负样本数目,可以大于 -bg 指定的图片数目。

	-numStages <number_of_stages>
		训练的分类器的级数。

	-precalcValBufSize <precalculated_vals_buffer_size_in_Mb>
		缓存大小,用于存储预先计算的特征值(feature values),单位为MB。

	-precalcIdxBufSize <precalculated_idxs_buffer_size_in_Mb>
		缓存大小,用于存储预先计算的特征索引(feature indices),单位为MB。内存越大,训练时间越短。

	-baseFormatSave
		这个参数仅在使用Haar特征时有效。如果指定这个参数,那么级联分类器将以老的格式存储。

级联参数:
	-stageType <BOOST(default)>
		级别(stage)参数。目前只支持将BOOST分类器作为级别的类型。

	-featureType<{HAAR(default), LBP}>
		特征的类型: HAAR - 类Haar特征; LBP - 局部纹理模式特征。

	-w <sampleWidth>
	-h <sampleHeight>
		训练样本的尺寸(单位为像素)。必须跟训练样本创建(使用 opencv_createsamples 程序创建)
		时的尺寸保持一致。

Boosted分类器参数:
	-bt <{DAB, RAB, LB, GAB(default)}>
		Boosted分类器的类型: DAB - Discrete AdaBoost, RAB - Real AdaBoost, LB - LogitBoost, 
		GAB - Gentle AdaBoost。

	-minHitRate <min_hit_rate>
		分类器的每一级希望得到的最小检测率。总的检测率大约为 min_hit_rate^number_of_stages。
		默认值为0.995对应于99.5%。

	-maxFalseAlarmRate <max_false_alarm_rate>
		分类器的每一级希望得到的最大误检率。总的误检率大约max_false_alarm_rate^number_of_stages.
		默认值0.50对应于50%。

	-weightTrimRate <weight_trim_rate>
		Specifies whether trimming should be used and its weight. 一个还不错的数值是0.95。

	-maxDepth <max_depth_of_weak_tree>
		弱分类器树最大的深度。注意,这不是级联器的深度。一个还不错的数值是1,是二叉树(stumps)。

	-maxWeakCount <max_weak_tree_count>
		每一级中的弱分类器的最大数目。类似-maxDepth,参数-maxWeakCount被直接传递给级联分类
		器的boosting,同时设置可以用于形成每一个强分类器(即,分类器的每一阶段)的弱级联器的最大
		数量。这个参数的默认值是100,但是这并不意味着弱分类器一定会使用这个数。

类Haar特征参数:
	-mode <BASIC (default) | CORE | ALL>
		参数-mode与类Haar特征一起使用,选择训练过程中使用的Haar特征的类型。 BASIC 只使用右上
		特征, ALL 使用所有右上特征和45度旋转特征。

LBP特征参数:
	LBP特征无参数。

当 opencv_traincascade 程序训练结束以后,训练好的级联分类器将存储于文件cascade.xml中,这个文件位于 -data 指定的目录中。这个目录中的其他文件是训练的中间结果,当训练程序被中断后,再重新运行训练程序将读入之前的训练结果,而不需从头重新训练。训练结束后,你可以删除这些中间文件。

如果在使用这两个程序时遇见问题,部分问题及解决办法见这里

本文转载至:级联分类器训练

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值