0

runAtメソッドの開いている CV ドキュメント、およびdetectMultiScale メソッドの場合。文書化されていない不思議な「重み」出力パラメーターがあります。

私の 2 段階の分類器を試してみると、次のような値が吐き出されることがわかりました。

-2.093535
-2.715030
2.000000   // Positive values seem to be output when the classifier was successful
0.034417

また、ソースコードを調べたところ、groupRectanglesメソッドが重みを使用していることがわかりました。

void groupRectangles(vector<Rect>& rectList, 
                     int groupThreshold, 
                     double eps, 
                     vector<int>* weights, 
                     vector<double>* levelWeights);

分類器がオブジェクトを見つけたことをどれだけ確実に示すかを示す何らかのパラメーターだと思いますが、詳細はわかりません。

  • 最小値と最大値は?
  • 正の値と負の値は何を意味しますか?
  • それは線形ですか、それとも指数関数的ですか?
  • 分類器の段階に関連していますか?
4

1 に答える 1

0

私はcascadedetect source codeからそれを理解しました。sum重みの表記を使用します。

sumコード (以下) は、変数に追加する特定のステージのツリーを反復処理します。続行するには、ステージの終了時に合計がステージのしきい値 (負の値の場合もある) よりも大きくなければなりません。合計は、新しい各ステージの開始時にゼロにリセットされます。

したがって、重み出力パラメーターは次のいずれかです。

  • 失敗したステージのしきい値を超えなかった値。
  • または .. 分類子の最終段階を通過した値。

それが何を意味するのか、まだ絶対的に理解できていません。

inline int predictOrderedStump( CascadeClassifier& cascade, Ptr<FeatureEvaluator> &_featureEvaluator, double& sum )
{
    int nodeOfs = 0, leafOfs = 0;
    FEval& featureEvaluator = (FEval&)*_featureEvaluator;
    float* cascadeLeaves = &cascade.data.leaves[0];
    CascadeClassifier::Data::DTreeNode* cascadeNodes = &cascade.data.nodes[0];
    CascadeClassifier::Data::Stage* cascadeStages = &cascade.data.stages[0];

    int nstages = (int)cascade.data.stages.size();
    for( int stageIdx = 0; stageIdx < nstages; stageIdx++ )
    {
        CascadeClassifier::Data::Stage& stage = cascadeStages[stageIdx];
        sum = 0.0;

        int ntrees = stage.ntrees;
        for( int i = 0; i < ntrees; i++, nodeOfs++, leafOfs+= 2 )
        {
            CascadeClassifier::Data::DTreeNode& node = cascadeNodes[nodeOfs];
            double value = featureEvaluator(node.featureIdx);
            sum += cascadeLeaves[ value < node.threshold ? leafOfs : leafOfs + 1 ];
        }

        if( sum < stage.threshold )
            return -stageIdx;
    }

    return 1;
}
于 2013-10-22T21:33:53.337 に答える