Machine learning 定义一组(初始)类Haar特征

Machine learning 定义一组(初始)类Haar特征,machine-learning,computer-vision,haar-classifier,cascade-classifier,Machine Learning,Computer Vision,Haar Classifier,Cascade Classifier,当涉及到级联分类器(使用类似haar的特征)时,我总是读到像AdaBoosting这样的方法用于选择“最佳”特征进行检测。然而,这只有在有一些初始特性集开始提升时才有效 给定24x24像素的图像,有162336个可能的haar特征。我可能错了,但我不认为像openCV这样的库最初是针对所有这些特性进行测试的 所以我的问题是初始特征是如何选择的,或者它们是如何生成的?对于功能的初始数量是否有任何指导原则 如果最初使用了所有162336功能。它们是如何产生的 我想你对这个话题很熟悉 首先手动选择特征

当涉及到级联分类器(使用类似haar的特征)时,我总是读到像AdaBoosting这样的方法用于选择“最佳”特征进行检测。然而,这只有在有一些初始特性集开始提升时才有效

给定24x24像素的图像,有162336个可能的haar特征。我可能错了,但我不认为像openCV这样的库最初是针对所有这些特性进行测试的

所以我的问题是初始特征是如何选择的,或者它们是如何生成的?对于功能的初始数量是否有任何指导原则


如果最初使用了所有162336功能。它们是如何产生的

我想你对这个话题很熟悉

首先手动选择特征类型(例如矩形a)。这给了你一个面具,你可以用它来训练你的弱分类器。为了避免逐像素移动遮罩和重新训练(这将花费大量的时间,并且没有更好的精度),可以指定每个训练过的弱分类器在x和y方向上移动的特征量。跳转的大小取决于数据大小。目标是使遮罩能够移入和移出检测到的对象。特征的大小也可以是可变的

在使用各自的特征(即掩码位置)训练多个分类器后,您将像往常一样继续进行AdaBoost和级联训练

特征/弱分类器的数量在很大程度上取决于您的数据和实验设置(即您使用的分类器类型)。您需要对参数进行扩展测试,以了解哪种类型的特性工作得最好(矩形/圆形/俄罗斯方块类对象等)。我两年前就做过这项工作,我们花了相当长的时间来评估哪些特性和特性生成启发式方法产生了最好的结果

如果您想从某个地方开始,只需从4个Viola/Jones原始功能中选择一个,然后训练一个分类器,将其应用于(0,0)。用(x,0)训练下一个分类器。下一个是(2x,0)…(0,y),(0,2y),(0,4y),。。(x,y)、(x,2y)等。。。
看看会发生什么。最有可能的情况是,您会看到,可以使用较少的弱分类器,也就是说,您可以继续增加确定遮罩滑动方式的x/y步长值。你也可以让面膜生长或者做其他事情来节省时间。这种“惰性”特征生成工作的原因是AdaBoost:只要这些特征使分类器略优于random,AdaBoost就会将这些分类器组合成一个有意义的分类器。

从你的问题中,我能够理解你想知道162336个特征是什么

摘自《中提琴琼斯》的4部原创作品()

通过改变4个原始特征的大小及其在24*24输入图像上的位置,我们可以生成162336个特征

例如,考虑两个矩形彼此相邻的原始特征之一。 让我们考虑每个矩形的大小是1像素。最初,如果24*24图像的(0,0)上存在一个矩形,则将其视为一个特征&现在,如果将其水平移动一个像素(到(1,0)),则当其位置更改为(1,0)时,将其视为第二个特征。通过这种方式,u可以将其水平移动到(22,0),生成23个特征。类似地,如果沿垂直轴从(0,0)移动到(0,23),则u可以生成24个特征。现在,如果您在覆盖每个位置的图像上移动(例如(1,1),(1,2)…(22,23)),那么您可以生成24*23=552个特征

现在我们考虑每个矩形的宽度是2像素,高度是1像素。最初,如果一个矩形出现在(0,0)上,并沿水平轴移动到(20,0),如上所述,那么我们可以有21个特征,因为它的高度是相同的,如果我们沿垂直轴从(0,0)移动到(0,23),我们可以有24个特征。因此,如果我们移动以覆盖图像上的每个位置,那么我们可以拥有24*21=504个特征

这样,如果我们将每个矩形的宽度增加一个像素,使每个矩形的高度在每次覆盖整个图像时保持为1个像素,使其宽度从1个像素变为24个像素,则得到的特征数=24*(23+21+19……3+1)

现在,如果我们考虑每个矩形的宽度为1像素,高度为2像素。最初,如果一个矩形出现在(0,0)上,并沿水平轴移动到(23,0),那么我们可以有23个特征,因为它的宽度是1像素,因为它的高度是2像素,如果我们沿垂直轴从(0,0)移动到(0,22),那么我们可以有23个特征。因此,如果我们移动以覆盖图像上的每个位置,那么我们可以拥有23*23=529个特征

类似地,如果我们将每个矩形的宽度增加一个像素,每次覆盖整个图像时将每个矩形的高度保持为2个像素,使其宽度从1个像素变为24个像素,则得到的特征数=23*(23+21+19……3+1)

现在,若我们在将每个矩形的宽度从1像素更改为24像素后,将每个矩形的高度增加1像素,直到每个矩形的高度变为24像素,那个么

特征数量=24*(23+21+19…..3+1)+23*(23+21+19…..3+1)+22*(23+21+19…..3+1)+2*(23+21+19…..3+1)+1*(23+21+19…..3+1)

现在,如果我们考虑第二个琼斯的原始特征,它有两个长方形,上面有一个长方形(矩形是垂直排列的),因为这类似于第一个堇青色琼斯的原始特征,它也将有< /P> 特征数量=43200

同样地,如果我们遵循上述过程,从第三个原始中提琴-琼斯特征中,我们得到了三个沿水平方向排列的矩形

特征数量=24*(22+19+16+4+1)+23*(22+19+16+4+1)+22*(22+19+16+4+1)+2*(22+19+16+4+1)+1*(22+19+16+4+1)

现在,如果我们考虑另一个具有垂直排列的3个矩形的特征(即另一个矩形),则得到

数目
            = 43,200 features
            =27,600
           = 20,736
                                     = 1,62,336 features
bool isStageTrained = tempStage->train( (CvFeatureEvaluator*)featureEvaluator, curNumSamples,
  _precalcValBufSize, _precalcIdxBufSize, *((CvCascadeBoostParams*)stageParams) );