OpenCV LBP级联分类器模型XML文件中各种参数的含义是什么?

时间:2016-03-15 09:53:05

标签: c++ xml opencv

我正在尝试在FPGA上实现LBP人脸检测器。为此,我想在OpenCV中训练检测器并在RTL代码中使用该模型。我试图挖掘现有的LBP frontal face model。我还研究了级联分类器,它是一个弱分类器的级联,每个弱分类器都有自己的权重。但是,我无法将我研究的理论与XML文件中的模型清楚地联系起来。 考虑样本阶段形式this模型:

<!-- stage 0 -->
<_>
  <maxWeakCount>3</maxWeakCount>
  <stageThreshold>-0.7520892024040222</stageThreshold>
  <weakClassifiers>
    <!-- tree 0 -->
    <_>
      <internalNodes>
        0 -1 46 -67130709 -21569 -1426120013 -1275125205 -21585
        -16385 587145899 -24005</internalNodes>
      <leafValues>
        -0.6543210148811340 0.8888888955116272</leafValues></_>
    <!-- tree 1 -->
    <_>
      <internalNodes>
        0 -1 13 -163512766 -769593758 -10027009 -262145 -514457854
        -193593353 -524289 -1</internalNodes>
      <leafValues>
        -0.7739216089248657 0.7278633713722229</leafValues></_>
    <!-- tree 2 -->
    <_>
      <internalNodes>
        0 -1 2 -363936790 -893203669 -1337948010 -136907894
        1088782736 -134217726 -741544961 -1590337</internalNodes>
      <leafValues>
        -0.7068563103675842 0.6761534214019775</leafValues></_></weakClassifiers></_>
<!-- stage 1 -->

我的具体问题是:

  1. 数字是多少?我认为数字0和-1对应于树桩的左右节点(如果我错了则纠正我),46指的是特征编号。我不清楚其他7个整数。
  2. 在计算了所有3个LBP功能(此处为46,13和2)之后,我该如何判断该阶段是通过还是失败?
  3. 我研究了LBP功能是8位无符号数(0到255)。但我不明白为什么模型中存在大的+ ve和-ve整数。例如:-67130709 -21569 -1426120013 -1275125205 -21585 -16385 587145899 -24005
  4. 我感谢任何建议。感谢。

1 个答案:

答案 0 :(得分:2)

  1. 你是对的。前两个数字指的是树中节点的索引。如果index是&lt; = 0,则表示它是叶子节点。因此,在您的示例中,它肯定是基于树桩的树。 46是LBP功能的索引。另外8个值是子集掩码。要了解其工作原理,请参阅this代码行(c是LBP功能的值):

    tmp += (subset[c>>5] & (1 << (c & 31))) ? stump.left : stump.right;
    
  2. 为每棵树计算LBP功能时,应计算叶索引(请参阅上面代码行的链接)。然后,您需要在此阶段对所有树中的叶值求和。如果此总和小于<stageThreshold>,则舞台失败。

  3. 见第一点。