4

OpenCV2.3 を使用して、SVM と HOG に基づく人物検出システムを実装しようとしています。しかし、私は立ち往生しました。

ここまで来ました: 画像データベースから HOG 値を計算し、LIBSVM で SVM ベクトルを計算できます。たとえば、それぞれ 3780 の値を持つ 1419 の SVM ベクトルが得られます。

OpenCV は、hog.setSVMDetector() メソッドで 1 つの特徴ベクトルだけを必要とします。したがって、LIBSVM が計算した 1419 個の SVM ベクトルから 1 つの特徴ベクトルを計算する必要があります。

この単一の特徴ベクトルを計算する方法のヒントが 1 つ見つかりました:リンク

「コンポーネント i (i は 0 ~ 3779 の範囲) での検出特徴ベクトルは、i でのサポート ベクターの合計 * そのサポート ベクターのアルファ値から構築されます。たとえば det[i] = sum_j (sv_j[i] * alpha[j])jはサポートの番号です。ベクトルi は、サポート ベクターのコンポーネントの数です。」</p>

これによると、私のルーチンは次のように機能します。最初の SVM ベクトルの最初の要素を取得し、アルファ値で乗算し、アルファ値で乗算された 2 番目の SVM ベクトルの最初の要素と加算します。</ p>

しかし、1419 要素すべてを合計すると、非常に高い値が得られます。

16.0657, -0.351117, 2.73681, 17.5677, -8.10134, 
11.0206, -13.4837, -2.84614, 16.796, 15.0564, 
8.19778, -0.7101, 5.25691, -9.53694, 23.9357,

それらを比較すると、OpenCV サンプルのpeopledetect.cpp (およびOpenCV ソースの hog.cpp)のデフォルト ベクトルと比較できます。

0.05359386f, -0.14721455f, -0.05532170f, 0.05077307f,
0.11547081f, -0.04268804f, 0.04635834f, -0.05468199f, 0.08232084f,
0.10424068f, -0.02294518f, 0.01108519f, 0.01378693f, 0.11193510f,
0.01268418f, 0.08528346f, -0.06309239f, 0.13054633f, 0.08100729f,
-0.05209739f, -0.04315529f, 0.09341384f, 0.11035026f, -0.07596218f,
-0.05517511f, -0.04465296f, 0.02947334f, 0.04555536f,

デフォルトのベクトル値は –1 と +1 の間の境界にありますが、私の値はそれをはるかに超えています。

私の単一の特徴ベクトル ルーチンには調整が必要だと思いますが、アイデアはありますか?

よろしく、

クリストフ

4

1 に答える 1

0

集約されたベクトルの値は高く見えます。http://lnx.mangaitalia.net/trainer/main.cppにある
を使用しました。行の一部が失われ、間違った結果が得られたため、コードから 削除する必要がありました。 ファイルの残りの部分についてはあまり知りません。この関数のみを使用しました。loadSVMfromModelFile()
svinstr.sync();

于 2011-11-01T09:00:38.647 に答える