トピックに軽く触れた過去の私自身の回答を参照してください。ただし、XML カスケード形式については説明していません。
1 つのステージと 3 つの機能のみを持つカスケードの例をわかりやすくするために変更した偽の を見てみましょう。
<!-- stage 0 -->
<_>
<maxWeakCount>3</maxWeakCount>
<stageThreshold>-0.75</stageThreshold>
<weakClassifiers>
<!-- tree 0 -->
<_>
<internalNodes>
0 -1 3 -67130709 -21569 -1426120013 -1275125205 -21585
-16385 587145899 -24005</internalNodes>
<leafValues>
-0.65 0.88</leafValues></_>
<!-- tree 1 -->
<_>
<internalNodes>
0 -1 0 -163512766 -769593758 -10027009 -262145 -514457854
-193593353 -524289 -1</internalNodes>
<leafValues>
-0.77 0.72</leafValues></_>
<!-- tree 2 -->
<_>
<internalNodes>
0 -1 2 -363936790 -893203669 -1337948010 -136907894
1088782736 -134217726 -741544961 -1590337</internalNodes>
<leafValues>
-0.71 0.68</leafValues></_></weakClassifiers></_>
あと少し……。
<features>
<_>
<rect>
0 0 3 5</rect></_>
<_>
<rect>
0 0 4 2</rect></_>
<_>
<rect>
0 0 6 3</rect></_>
<_>
<rect>
0 1 4 3</rect></_>
<_>
<rect>
0 1 3 3</rect></_>
...
最初にステージのタグを見てみましょう:
- ステージの
maxWeakCount
は、ステージ内の弱分類器の数であり、コメントで a<!-- tree -->
と呼ばれるものと、LBP 機能と呼ばれるものです。
- この例では、ステージ 0 の LBP 特徴の数は です
3
。
- これは、少なくともステージを通過するため
stageThreshold
に機能の重みを合計する必要があるものです。
- この例では、ステージのしきい値は
-0.75
です。
LBP 機能を説明するタグに目を向けると、次のようになります。
- は
internalNodes
11 個の整数の配列です。最初の 2 つは、LBP カスケードでは意味がありません。3 番目は、XML ファイルの最後にある sの<features>
テーブルへのインデックスです (Aはフィーチャのジオメトリを記述します)。最後の 8 つの値は 8 つの 32 ビット値で、以前の回答で説明した 256 ビット LUT を一緒に構成します。この LUT はトレーニング プロセスによって計算されますが、私自身は完全には理解していません。
<rect>
<rect>
- この例では、ステージの最初の機能は 、4 つの整数で記述されている
3
四角形を参照しています。 0 1 4 3
- は
leafValues
、フィーチャに関連付けられた 2 つの重み (合格/不合格) です。機能評価中に選択されたビットに応じて、internalNodes
これら 2 つの重みのいずれかが合計に追加されます。この合計は、ステージの と比較され<stageThreshold>
ます。次に、bool stagePassed = (sum >= stageThreshold - EPS);
はEPS
1e-5 であり、ステージが成功したか失敗したかを判断します。重みもトレーニング プロセスによって決定されます。
- この例では、最初のフィーチャの不合格の重みは
-0.65
で、合格の重みは 0.88
です。
最後に<feature>
タグです。<rect>
これは、フィーチャのジオメトリを表す 4 つの整数を含むタグの配列で構成されます。処理ウィンドウ (あなたの場合は 24x24) が与えられると、最初の 2 つの整数は処理ウィンドウ内の整数ピクセル オフセットを表し、次の 2 つの整数は LBP 機能に必要な 9 つのうちの 1 つのサブ長方形のx
幅y
と高さを表します評価される。
<rect> ft.x ft.y ft.width ft.height </rect>
本質的に、処理ウィンドウpW.width
x内にあるタグは、xpW.height
に顔が存在するかどうかをチェックします...pW.x
pW.y

LBP を評価するには、点で積分イメージを読み取り、9 つのサブ長方形の積分を計算するためにp[0..15]
使用するだけで十分です。中央のサブ長方形 R4 は、R0 から時計回りに他の 8 つのサブ長方形と比較され、8 ビットの LBP が生成されます (ビットはパックされています [msb 01258763 lsb]) p[BR]+p[TL]-p[TR]-p[BL]
。
次に、この 8 ビット LBP は、フィーチャの (2^8 = 256) ビット LUT ( ) へのインデックスとして使用され、<internalNodes>
1 つのビットが選択されます。このビットが 1 の場合、特徴は顔と矛盾しています。0 の場合、顔と一致します。次に、適切な重み ( <leafNode>
) が返され、他のすべてのフィーチャの重みが追加されて、ステージ全体の合計が生成されます。次に、これを比較し<stageThreshold>
て、ステージが成功したか失敗したかを判断します。
十分に説明できていないことが他にある場合は、明確にすることができます。