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 の間の境界にありますが、私の値はそれをはるかに超えています。
私の単一の特徴ベクトル ルーチンには調整が必要だと思いますが、アイデアはありますか?
よろしく、
クリストフ