使用增强级联的弱分类器包括两个主要阶段:训练和检测阶段。对象检测教程中有描述使用基于 HAAR 或 LBP 模型的检测阶段。这里主要介绍训练增强分类器级联所需的功能,包括:准备训练数据、执行实际模型训练、可视化训练。
目录
一、训练数据准备
1、负样本
2、正样本
3、命令行参数
4、标注工具
二、级联训练
1、通用参数
2、级联参数
3、增强分类器参数
4、Haar-like特征参数
三、可视化级联分类器
一、训练数据准备
为了训练增强的弱分类器级联,需要一组正样本(包含想要检测的实际对象)和一组负样本(包含不想检测的所有内容)。负样本集合必须手动准备,而正样本集是使用 opencv_createsamples 应用程序创建的。
1、负样本
负样本取自任意图像,不包含要检测的对象。这些从中生成样本的图像应该放置于独立的文件中,每行包含一个图像路径。负样本图像也称为背景样本或背景图像。
所描述的图像可能具有不同的大小。但是,每个图像都应该等于或大于所需的训练窗口大小。
目录结构:
/img
img1.jpg
img2.jpg
bg.txt
bg.txt主要是指定图像路径:
img/img1.jpg
img/img2.jpg
2、正样本
正样本由 opencv_createsamples 应用程序创建。增强过程使用它们来定义模型在尝试查找我们感兴趣的对象内容。支持两种生成正样本数据集的方法,建议采用第二种方法。
- 从单个正样本图像生成一系列正样本图像。
- 自己提供所有正样本,只使用该工具将它们剪切出来,调整它们的大小并将它们放入 opencv 所需的二进制格式。
3、命令行参数
命令行包括正样本路径、负样本路径、输出路径、样本宽高等,具体如下:
- -vec <vec_file_name>: 训练结果输出路径;
- -img <image_file_name>: 正样本路径;
- -bg <background_file_name>: 负样本路径;
- -num <number_of_samples>: 要生成的正样本数;
- -bgcolor <background_color>: 背景色,即透明色;
- -inv: 如果指定,颜色将反转;
- -randinv: 如果指定,颜色将随机反转;
-
-maxxangle <max_x_rotation_angle>
: 朝向 x 轴的最大旋转角度,单位弧度; -
-maxxangle <max_y_rotation_angle>
: 朝向 y 轴的最大旋转角度,单位弧度; -
-maxxangle <max_z_rotation_angle>
: 朝向 z 轴的最大旋转角度,单位弧度; - -show: 调试选项;
- -w: 输出样本的宽度;
- -h: 输出样本的高度;
当以这种方式运行 opencv_createsamples 时,以下过程用于创建样本对象实例:给定的源图像围绕所有三个轴随机旋转。所选角度受-maxxangle
,-maxyangle
和-maxzangle限制
。白噪声被添加到前景的强度中。如果指定-inv
,则前景像素强度会反转。最后,将获得的图像放置到背景描述文件中的任意背景上,调整宽高为-w
和-h,
并存储到由命令行指定路径-vec
。
正样本也可以从先前标记的图像集合中获得,这是构建稳定对象模型时所需的方式。这个集合是由一个类似于背景描述文件的文本文件来描述的。该文件的每一行对应一个图像。该行的第一个元素是文件名,然后是对象注释的数量,然后是描述对象边界矩形坐标(x、y、宽度、高度)的数字,描述文件如下。
目录结构:
/img
img1.jpg
img2.jpg
info.dat
info.dat中图像1包含一个矩形坐标,图像2包含2个矩形坐标,具体如下:
img/img1.jpg 1 140 100 45 45
img/img2.jpg 2 100 200 50 50 50 30 25 25
4、标注工具
OpenCV3.x以后,提供用于生成文件的开源注释工具-info,相关参数如下:
- --annotations(必选): txt文件注释的路径,在里面存储注释;
- --images(必选): 包含图像文件夹的路径;
- --maxWindowHeight: 如果输入图像的高度大于这里限制的高度,会调整图像大小;
- --resizeFactor:用于调整图像大小的因子;
命令行示例如下:文章来源地址https://www.toymoban.com/news/detail-536425.html
opencv_annotation --annotations=/xxx/annotations/file.txt --images=/xxx/image/
二、级联训练
在准备好正样本和负样本后,对弱分类器进行级联训练。opencv_traincascade命令按照功能用途划分。
1、通用参数
通用参数包括正负样本路径、正负样本数量、分类器输出路径、训练的级联阶段数,具体如下:
- -data <cascade_dir_name>: 分类器的输出路径,文件夹需要提前创建;
- -vec <vec_file_name>: 正样本文件路径;
- -bg <background_file_name>: 负样本文件路径;
- -numStages <number_of_stages>: 级联训练的阶段数;
-
-precalcValBufSize:
预先计算的特征值的缓冲区大小(以 Mb 为单位); -
-precalcIdxBufSize
:预先计算的特征索引的缓冲区大小(以 Mb 为单位); -
-numThreads <max_number_of_threads>
:训练使用的最大线程数; -
-acceptanceRatioBreakValue
:用于确定模型应保持学习的精度以及何时停止。默认为-1,禁用此功能。
2、级联参数
级联参数包括阶段类型、特征类型、样本宽高,具体如下:
-
-stageType <BOOST(默认)>
: 阶段类型; -
-featureType<{HAAR(默认), LBP}>
: 特征类型:HAAR(Haar-like 特征),LBP(局部二进制模式); -
-w <sampleWidth>
:训练样本的宽度(以像素为单位); -
-h <sampleHeight>
:训练样本的高度(以像素为单位);
3、增强分类器参数
增强分类器参数包括分类器类型、最小命中率、最大误差率,具体如下:
-
-bt <{DAB, RAB, LB, GAB(默认)}>
:增强分类器的类型:DAB(Discrete AdaBoost),RAB (Real AdaBoost),LB(LogitBoost),GAB(Gentle AdaBoost); -
-minHitRate
:分类器每个阶段的最小期望命中率; -
-maxFalseAlarmRate
:分类器每个阶段的最大期望误差率; -
-weightTrimRate
:是否使用修正权重,建议值为 0.95; -
-maxDepth <max_depth_of_weak_tree>
:弱树的最大深度,建议值为1; -
-maxWeakCount <max_weak_tree_count>
:每个级联阶段的弱树的最大数量;
4、Haar-like特征参数
Haar-like特征参数主要是指定特征集类型,具体如下:
-
-mode <BASIC(默认) | CORE | ALL>
:选择训练中使用的 Haar 特征集的类型。其中BASIC 仅使用直立功能,而 ALL 使用直立和 45 度旋转功能集;
三、可视化级联分类器
可视化级联分类器用于在训练过程中,看到实时训练数据视图。OpenCV提供opencv_visualisation应用程序,相关命令如下:文章来源:https://www.toymoban.com/news/detail-536425.html
- --image(必选): 图像模型的路径;
- --model(必选): 训练模型的路径;
- --data(可选): 如果提供提前创建的数据文件夹,将存储每个阶段结果;
命令行示例如下:
opencv_visualisation --image=/data/object.png --model=/data/model.xml --data=/data/result/
到了这里,关于OpenCV的级联分类器训练的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!