我正在尝试在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 -->
我的具体问题是:
我感谢任何建议。感谢。
答案 0 :(得分:2)
你是对的。前两个数字指的是树中节点的索引。如果index是&lt; = 0,则表示它是叶子节点。因此,在您的示例中,它肯定是基于树桩的树。 46
是LBP功能的索引。另外8个值是子集掩码。要了解其工作原理,请参阅this代码行(c
是LBP功能的值):
tmp += (subset[c>>5] & (1 << (c & 31))) ? stump.left : stump.right;
为每棵树计算LBP功能时,应计算叶索引(请参阅上面代码行的链接)。然后,您需要在此阶段对所有树中的叶值求和。如果此总和小于<stageThreshold>
,则舞台失败。
见第一点。