主要内容

开始使用级联对象探测器

为什么火车探测器?

vision.CascadeObjectDetector系统对象有几个pretrained分类器检测额的脸,轮廓的脸,鼻子,眼睛,上半身。然而,这些分类器为特定应用程序并不总是足够的。计算机视觉的工具箱™提供了trainCascadeObjectDetector训练一个自定义函数分类器。

什么样的对象你能发现吗?

计算机视觉的工具箱级联对象检测器可以检测对象类别的长宽比不发生显著的变化。对象的比例仍固定包括脸,停车标志,和汽车从一边。

vision.CascadeObjectDetector系统对象在图像通过滑动窗口检测对象的形象。然后探测器使用级联分类器决定是否窗口包含感兴趣的对象。窗口的大小变化来检测对象在不同的尺度上,但它的长宽比是固定的。出平面旋转探测器非常敏感,因为长宽比的变化对大多数3 d对象。因此,您需要培训对象的每个方向的探测器。训练一个探测器来处理所有方向不会工作。

级联分类器是如何工作的呢?

级联分类器由阶段,每个阶段是一个薄弱的学习者。疲软的学习者是简单的分类器决定树桩。每个阶段都是使用技术提高培训。提高能够培养一个高度精确的分类器通过加权平均决策由弱的学习者。

每个阶段的分类标签定义的区域的当前位置滑动窗口或正面或负面。积极的表明一个对象和被发现表明你没有对象被发现。如果标签是负的,这个地区的分类完成,探测器幻灯片窗口到下一个位置。如果标签是正的,分类器通过该地区的下一个阶段。探测器的报道对象发现在当前窗口位置当最后阶段分类与积极的地区。

设计各阶段拒绝负样本尽可能快。windows的假设是,绝大多数不包含感兴趣的对象。相反,真正的优点是罕见的,值得花时间来验证。

  • 一个真阳性发生在一个积极的样本正确分类。

  • 一个假阳性负样本时发生误分为积极的。

  • 一个假阴性发生在一个正样本错误地分类为负。

级联中工作得很好,每一个阶段必须有低假阴性率。如果一个阶段不正确标签对象为负数,分类停止,你不能纠正错误。然而,每个阶段可以有较高的假阳性率。即使探测器不正确标签的物体看作是积极的,你可以纠正错误在随后的阶段。

级联分类器的整体假阳性率 f 年代 ,在那里 f 是假阳性率每阶段范围(0 1),然后呢 年代 是数量的阶段。同样,整个真阳性率 t 年代 ,在那里 t 是真正的每阶段积极率范围(0 1]。因此,添加更多的阶段降低了整体假阳性率,但同时也降低了整体真阳性率。

创建一个级联分类器使用trainCascadeObjectDetector

级联分类器的训练需要一组的阳性样本和一系列的负面形象。必须提供一套积极的感兴趣的图像区域指定作为正样本。您可以使用图片标志与边界框标签感兴趣的对象。图片标志输出表用于阳性样本。您还必须提供一个设置的负面形象的功能自动生成负样本。实现可接受的检测精度,设置阶段,功能类型,和其他函数参数。

在设置参数时注意事项

选择函数参数的优化阶段,假阳性率,真积极率、功能使用培训的类型。当你设置参数,考虑这些权衡。

条件 考虑
一个大训练集(在成千上万)。 增加数量的阶段,为每个阶段设定较高的假阳性率。
一个小训练集。 减少数量的阶段,为每个阶段设定较低的误判率。
减少丢失对象的概率。 真阳性率增加。然而,高真阳性率可以阻止你实现每阶段所需的误判率,使探测器更可能产生错误的检测。
减少错误的检测。 增加的数量每阶段阶段或减少误警率。

功能类型可用于培训

选择功能,适合你所需要的类型的对象检测。的trainCascadeObjectDetector金宝app支持三种类型的特点:哈尔,局部二进制模式(LBP),和面向梯度直方图(猪)。哈尔和LBP特征常常被用于检测面临因为他们适合代表精细纹理。猪的特性通常是用来检测对象(如人们和汽车。他们是有用的捕捉对象的整体形状。例如,在下面的可视化猪的特性,你可以看到自行车的轮廓。

你可能需要运行trainCascadeObjectDetector多次函数来调整参数。为了节省时间,您可以使用枸杞多糖或猪特性数据的一个小子集。训练一个检测器使用哈雾特性所花的时间要更长一些。之后,您可以运行哈雾特性是否准确性提高。

供应正样本

创建积极的样品,您可以使用图片标志应用。图像贴标签机提供了一种简便的方法将积极的样品通过交互指定矩形区域(roi)的利益。

您还可以指定手动两种方式中的一种积极的样本。一种方法是在更大的图像指定矩形区域。感兴趣的区域包含的对象。另一种方法是作物的对象感兴趣的图像并将其保存为一个单独的图像。然后,您可以指定区域是整个图像。你也可以产生更多的积极的现有的样本通过添加旋转或噪音,或通过改变亮度或对比度。

供应负面形象

负样本并不显式地指定。相反,trainCascadeObjectDetector函数自动生成负样本用户提供的负面形象,不包含感兴趣的对象。前培训每一个新阶段,功能运行探测器组成的阶段已经训练有素的负面形象。检测到任何对象从这些图像是假阳性,这是作为负样本。通过这种方式,每个新阶段的级联由前一阶段的训练是正确的错误。

随着越来越多的阶段被添加,探测器的总体误判率降低,导致代负样本更加困难。出于这个原因,它有助于提供尽可能多的负面形象。改善训练精度,提供负面形象包含背景通常与感兴趣的对象相关联。也包括负面形象包含物体相似的外表感兴趣的对象。举个例子,如果你正在训练一个停车标志探测器,包括负面形象包含路标和形状类似于一个停车标志。

选择阶段的数量

之间有一个权衡更少的假阳性率较低阶段每个阶段或多个阶段每阶段有较高的假阳性率。假阳性率较低阶段更为复杂,因为它们含有更多的弱的学习者。假阳性率较高的阶段包含更少弱的学习者。一般来说,最好是有更多的简单的阶段,因为在每个阶段的总体假阳性率降低成倍增长。例如,如果在每个阶段假阳性率为50%,然后整个假阳性率的级联分类器两个阶段是25%。有三个阶段,它就变成了12.5%,等等。然而,阶段的数量越大,分类器的训练数据量越大。同时,增加阶段的数量增加了假阴性率。这增加的结果是更大的机会拒绝一个积极样本的错误。设置假阳性率(FalseAlarmRate和数量的阶段,NumCascadeStages)来产生一个可接受的假阳性率。然后您可以调整这两个参数实验。

训练有时可以提前终止。例如,假设训练停止后七个阶段,即使你将阶段的数量参数设置为20。功能可能无法产生足够的负样本。如果你再次运行功能和设置阶段到7的数量,你不得到相同的结果。结果之间的阶段不同,因为数量的正负样本用于每个阶段是重新计算的新阶段。

训练时间的探测器

训练一个好的探测器需要成千上万的训练样本。大量的训练数据可能需要数小时甚至数天的过程。在培训过程中,函数显示时间训练MATLAB中的每个阶段®命令窗口。培训时间取决于您指定的类型特征。使用哈雾特性需要更长的时间比使用枸杞多糖或猪的特性。

故障排除

如果你的积极的样品吗?

trainCascadeObjectDetector函数自动决定的数量正样本训练每个阶段使用。数量是基于积极的用户提供的样品的总数和的值TruePositiveRateNumCascadeStages参数。

可用积极用来训练样本的数量取决于每个阶段真阳性率。指定的百分比速度正样本函数可以分类为负。如果一个样本被归为负的任何阶段,它永远无法达到后续阶段。例如,假设您设置TruePositiveRate0.9,和所有可用的样本用于训练第一阶段。在这种情况下,10%的阳性样品被拒绝作为底片,只有积极的样本总数的90%可用于培训第二阶段。如果继续训练,那么每个阶段与越来越少的训练样本。每个后续阶段必须解决一个越来越困难的用更少的阳性样本分类问题。与每个阶段获得样本较少,后期可能会overfit数据。

理想情况下,使用相同数量的样本训练每个阶段。,积极用来训练样本的数量每个阶段必须小于总数可用的阳性样本。唯一的例外是当的价值TruePositiveRate次阳性样本总数小于1,不拒绝为阴性阳性样本。

函数计算阳性样品使用的数量在每个阶段使用以下公式:

正样本的数量=地板上(totalPositiveSamples/ (1 + (NumCascadeStages- 1)* (1 -TruePositiveRate)))

这个计算不保证相同数量的正样本可供每个阶段。原因是不可能肯定地预测有多少积极的样本将被拒绝否定。训练还在继续,只要积极的样本的数量可以训练阶段的数量大于10%的样本函数确定自动使用前面的公式。如果没有足够的正样本训练停止和功能问题一个警告。函数还输出阶段的分类器组成,它训练了。如果训练停止,您可以添加更多的积极的样本。或者,您可以增加TruePositiveRate。减少阶段的数量也可以工作,但是这样的降低也会导致更高的总体误警率。

怎么做如果你的负样本?

函数计算每一阶段使用负样本的数量。这个计算是通过增加积极的样本的数量在每个阶段使用的价值NegativeSamplesFactor

与积极的样品一样,不能保证数量计算的负样本总是可用的特定阶段。的trainCascadeObjectDetector函数产生的负样本负面形象。然而,随着每一个新的阶段,级联分类器的总体误警率减少,使它不太可能找到负样本。

培训持续只要可用负样本的数量来训练阶段大于10%的计算数量的负样本。如果没有足够的负样本,训练停止和功能问题一个警告。它输出阶段组成的分类器训练了。当训练结束时,最好的方法是增加更多的负面形象。或者,您可以减少阶段或增加假阳性的数量。

例子

火车一个五级停车标志探测器

火车一个五级停车标志探测器真阳性率下降

训练Ten-Stage停车标志探测器

列车停车标志探测器

加载正从垫样品数据文件。文件包含地面真理,指定为表边框几个对象的类别。grount真相是标签和出口图片标志应用程序。

负载(“stopSignsAndCars.mat”);

前缀的fullpath停车标志图像。

stopSigns = fullfile (toolboxdir (“愿景”),“visiondata”stopSignsAndCars {: 1});

创建数据存储负载的地面实况数据停止的迹象。

imd = imageDatastore (stopSigns);建筑物= boxLabelDatastore (stopSignsAndCars (:, 2));

结合图片和盒子标签数据存储。

positiveInstances =结合(imd,建筑物);

添加图片文件夹路径到MATLAB路径。

imDir = fullfile (matlabroot,“工具箱”,“愿景”,“visiondata”,“stopSignImages”);目录(imDir);

指定一个文件夹为负面形象。

negativeFolder = fullfile (matlabroot,“工具箱”,“愿景”,“visiondata”,“nonStopSigns”);

创建一个imageDatastore对象包含负面形象。

negativeImages = imageDatastore (negativeFolder);

火车一个级联对象探测器“stopSignDetector.xml”使用猪的特性。注意:命令可以花费几分钟。

trainCascadeObjectDetector (“stopSignDetector.xml”,negativeFolder positiveInstances FalseAlarmRate = 0.01, NumCascadeStages = 3);
自动设置ObjectTrainingSize(35岁,32)使用最多42 42积极的样品每阶段使用最多84负样本的第1阶段——cascadeParams训练阶段3 [........................................................................)使用42积极和84 -样品时间训练阶段1:1秒培训第二阶段3 [........................................................................)使用42积极和84 -样品时间训练阶段2:0秒3的3[........................................................................训练阶段)使用42积极和84 -样品时间训练阶段3:2秒培训完成

使用新训练的分类器来检测一个停车标志形象。

探测器= vision.CascadeObjectDetector (“stopSignDetector.xml”);

阅读测试图像。

img = imread (“stopSignTest.jpg”);

检测到一个停车标志在测试图像。

bbox =步骤(检测器,img);

插入边界框的矩形,并返回标记图像。

detectedImg = insertObjectAnnotation (img,“矩形”bbox,“停车标志”);

显示检测到停车标志。

图;imshow (detectedImg);
警告:MATLAB禁用一些高级图形渲染功能,切换到软件OpenGL。的更多信息,请点击< a href = " matlab: opengl(问题)" > < / >。

删除的图像文件夹路径。

rmpath (imDir);

相关的话题

外部网站