Opencv物体检测---级量分类器训练

介绍

使用级联分类器的工作包括两个主要阶段:训练和检测。 检测阶段在一般OpenCV文档的objdetect模块的文档中描述。 文档提供了有关级联分类器的一些基本信息。 当前指南描述了如何训练级联分类器:准备训练数据和运行训练应用程序。

OpenCV中有两个用于训练级联分类器的应用程序:opencv_haartraining和opencv_traincascade。 opencv_traincascade是一个较新的版本,根据OpenCV 2.x API用C ++编写。 但这两个应用程序的主要区别在于opencv_traincascade支持Haar和(Local Binary Patterns)功能。 与Haar功能相比,LBP功能是整数,因此使用LBP进行训练和检测的速度比使用Haar功能快几倍。 关于LBP和Haar检测质量,它取决于培训:首先是培训数据集的质量和训练参数。 可以训练基于LBP的分类器,其将提供与基于Haar的分类器几乎相同的质量。

opencv_traincascade和opencv_haartraining以不同的文件格式存储训练好的分类器。 注意,较新的级联检测接口支持这两种格式。 opencv_traincascade可以以旧格式保存(导出)经过训练的级联。 但opencv_traincascade和opencv_haartraining无法加载(导入)另一种格式的分类器,以便在中断后进行进一步的训练。

还有一些与训练相关的辅助操作:

  • opencv_createsamples用于准备正样本和测试样本的训练数据集。 opencv_createsamples以opencv_haartraining和opencv_traincascade应用程序都支持的格式生成肯定样本的数据集。 输出是一个* .vec扩展名的文件,它是一个包含图像的二进制格式。
  • opencv_performance可用于评估分类器的质量,但仅适用于opencv_haartraining的训练。 它采用标记图像的集合,运行分类器并报告性能,即找到的对象的数量,错过的对象的数量,错误警报的数量和其他信息。

训练数据的前期准备

对于培训,我们需要一组样本。 有两种类型的样本:阴性和阳性。 负样本对应于非对象图像。 正样本对应于具有检测到的对象的图像。 必须手动准备一组负样本,而使用opencv_createsamples实用程序创建一组正样本。

从任意图像中取出负样本。 这些图像不得包含检测到的对象。 负样本在特殊文件中枚举。 它是一个文本文件,其中每行包含负样本图像的图像文件名(相对于描述文件的目录)。 必须手动创建此文件。 请注意,负样本和样本图像也称为背景样本或背景图像,在本文档中可互换使用。 所描述的图像可以具有不同的尺寸。 但是每个图像应该(但不是非常)大于训练窗口大小,因为这些图像用于将负图像子采样到训练大小。

正面样本由opencv_createsamples实用程序创建。 它们可以从具有对象的单个图像或从先前标记的图像的集合创建。

请注意,在将其提供给上述实用程序之前,您需要一个大型正数样本数据集,因为它仅应用透视变换。 例如,对于像OpenCV图标这样的绝对单一对象,您可能只需要一个正样本,但是您需要为面部定义数百甚至数千个正样本。 在面部的情况下,你应该考虑所有种族和年龄组,情绪和胡子风格。

因此,单个对象图像可能包含公司商标。 然后通过随机旋转从给定的对象图像创建大量正样本,改变徽标强度以及将徽标放置在任意背景上。 随机性的数量和范围可以通过opencv_createsamples实用程序的命令行参数来控制。

常用的命令参数:

Opencv物体检测---级量分类器训练_第1张图片Opencv物体检测---级量分类器训练_第2张图片

以下过程用于创建样本对象实例:源图像围绕所有三个轴随机旋转。 选择的角度受限于我的最大角度。 然后像素的强度来自[bg_color-bg_color_threshold; bg_color + bg_color_threshold]范围被解释为透明。 白噪声被添加到前景的强度。 如果指定-inv键,则反转前景像素强度。 如果指定了-randinv键,则算法随机选择是否应将反演应用于此样本。 最后,将获得的图像放置在背景描述文件的任意背景上,调整大小为-w和-h指定的所需大小,并存储到由-vec命令行选项指定的vec文件中。

也可以从先前标记的图像的集合中获得阳性样本。 此集合由类似于背景描述文件的文本文件描述。 该文件的每一行对应一个图像。 该行的第一个元素是文件名。 接下来是对象实例的数量。 以下数字是对齐矩形(x,y,宽度,高度)的对象的坐标。

为了从这样的集合中创建正样本,应该指定-info参数而不是`-img`:

标记图像集合的描述文件。

在这种情况下,样本创建方案如下。 对象实例取自图像。 然后将它们调整为目标样本大小并存储在输出vec文件中。 没有应用失真,因此唯一影响的参数是-w,-h,-show和-num。

opencv_createsamples实用程序可用于检查存储在正样本文件中的样本。 为此,只应指定-vec,-w和-h参数。

请注意,对于训练,如何生成带有正样本的vec文件无关紧要。 但opencv_createsamples实用程序是收集/创建OpenCV提供的正样本矢量文件的唯一方法。

级联训练

按目的分组的opencv_traincascade应用程序的命令行参数:

命令参数

Opencv物体检测---级量分类器训练_第3张图片

级联参数

Opencv物体检测---级量分类器训练_第4张图片

提升分类器参数

Opencv物体检测---级量分类器训练_第5张图片

类似哈尔的特征参数

本地二进制模式参数

加载二进制模式不需要参数。

在opencv_traincascade应用程序完成其工作后,训练好的级联将保存在文件夹中的cascade.xml文件中,该文件夹作为-data参数传递。 此文件夹中的其他文件是针对中断培训的情况创建的,因此您可以在完成培训后删除它们。

你可能感兴趣的:(OpenCV教程)