3

OpenCV には、サンプルのマトリックスを取り込んで SVM をトレーニングする CvSVM クラスがあります。行列は 2D で、行にサンプルがあります。

ビデオ フィードから方向勾配 (HOG) のヒストグラムを生成する独自の方法を作成しました。これを行うために、各チャネルが方向ビンに対応する HOG を格納する 9 チャネルのマ​​トリックスを作成しました。最終的に、タイプ の 40x30 マトリックスができましたCV_32FC(9)

また、HOG の視覚化を行い、機能しています。

この行列を OpenCV SVM に入力する方法がわかりません。これを平坦化すると、SVM が 1D 入力データから 9D 超平面を学習する方法がわからないからです。

4

1 に答える 1

4

SVM は、特徴ベクトルごとに常に 1 行のデータを取り込みます。したがって、特徴ベクトルの次元は行の長さです。2D データを扱っている場合、特徴ベクトルごとに 2 つの項目があります。2D データの例は、次の Web ページにあります。

http://www.csie.ntu.edu.tw/~cjlin/libsvm/

OpenCV の同等のデモのコードhttp://sites.google.com/site/btabibian/labbook/svmusingopencv

要点は、ヒストグラムを 9 ビン セルの 2D と考えている場合でも、特徴ベクトルは実際にはこれを平坦化したものであるということです。したがって、長い特徴ベクトルにフラット化するのは正しいことです。私の結果は、長さ 2304 (16x16x9) の特徴ベクトルで、小さなテスト セットで 100% の予測精度が得られました (つまり、おそらく 100% よりわずかに低いですが、非常にうまく機能しています)。

これが機能する理由は、SVM が特徴ベクトルのアイテムごとの重みのシステムに取り組んでいるためです。したがって、問題の次元とは何の関係もありません。超平面は常に特徴ベクトルと同じ次元にあります。それを見る別の方法は、超平面を忘れて、特徴ベクトルの各項目の重みの束として見ることです。この場合、アイテムごとに 1 つの重み付けが必要であり、各アイテムにその重み付けを乗算して結果を出力します。

于 2011-07-21T23:02:00.400 に答える