3

我已经使用 opencv_trainedcascade.exe 训练了面孔。我有一系列不同阶段的 xml 文件。每个 xml 文件都有内部节点和 leafVlaues,其中一个如下所示。

<?xml version="1.0"?>
<opencv_storage>
<stage0>
  <maxWeakCount>3</maxWeakCount>
  <stageThreshold>-1.3019366264343262e+000</stageThreshold>
  <weakClassifiers>
    <_>
      <internalNodes>
        0 -1 2711 -2099201 -2623493 -774797061 -2162625 -827343685
        -5535541 -1163949377 -21761</internalNodes>
      <leafValues>
        -9.2679738998413086e-001 6.0445684194564819e-001</leafValues></_>
    <_>
      <internalNodes>
        0 -1 1533 -252379683 -203697739 1410462197 1435881947 -74449473
        -1147414357 1510080511 -1</internalNodes>
      <leafValues>
        -9.1606438159942627e-001 6.2200444936752319e-001</leafValues></_>
    <_>
      <internalNodes>
        0 -1 917 -42468780 -11479728 -745548289 -2371181 -23070497
        -552607093 -74777633 -536871937</internalNodes>
      <leafValues>
        -9.2716777324676514e-001 5.4092508554458618e-001</leafValues></_></weakClassifiers></stage0>
</opencv_storage>

我的查询是(1)这些stageThreshold、internalNodes 和leafValues 是什么意思?(2)在实际的人脸检测中,它们在级联分类器中是如何使用的,我读了几篇关于Adaboost算法的论文。但我不是很明白。谢谢

4

1 回答 1

5

在挖掘了 detection_based_tracker.cpp 之后,现在我明白了 internalNodes、leafValues 和 stagethreshold 是什么以及它们是如何使用的。当我们查看 lbpcascade_frontalface.xml 时,我们会看到一个矩形列表。这些是经过训练的人脸图像的矩形(即这些区域具有不同的特征,可用于区分人脸和非人脸图像)。对于 lbpcascade_frontalface.xml 有 139 个矩形。每个矩形的 x,y 点乘以一个常数,得到三个额外的矩形,所以一个矩形实际上代表四个矩形。

然后我会解释什么是internalNode。

<internalNodes>
            0 -1 13 -163512766 -769593758 -10027009 -262145 -514457854
            -193593353 -524289 -1</internalNodes>

前两个数字 0 -1 代表左右。我认为它们代表左叶值和右叶值。第三个是特征索引。如果我们将这 139 个矩形放入一个数组中,则该特征索引指的是数组索引。这意味着要表示哪个矩形。最后八个数字表示从四个矩形中减去角点。这些是根据积分图像计算的,因此数字很大。

但是我不太确定如何计算leafValues,但是将这些leafValues 的总和与stageThreshold 进行比较以决定人脸还是非人脸。

这就是我通过调试代码所理解的。如果有人解释了如何计算叶子值,那将是我查询的完整解决方案。谢谢

于 2014-09-19T14:05:56.283 回答