2015年2月23日月曜日

OpenCV3.0betaで、HOG+SVMの辞書を作成

OpenCV 3.0 betaのサンプルのcppにtrain_HOG.cppがあるのを見つけた。
中を見てみると自分でHOGの辞書を作ることができるようだ

ソースの内容は大きく分けると

データの読み込み
ファイルリストを読み込みpositive, negativeの画像を読み込む。

ただし、この部分はINRIAデータに依存した記述になっている。
また、INRIAデータの解釈を間違っており、サンプルのままでは、よくない結果となるよ予想される。INRIAの画像は、4方に16画素のマージンが含まれており、実際の画像は、64x128が正しい

特徴量の計算
各画像のHOG特徴量を計算し、gradient_lstに格納している
hog.compute( gray, descriptors, Size( 8, 8 ), Size( 0, 0 ), location );

const vector<Point>& locationsに座標が格納されている場合は、その座標で計算する
locations.sizeが0の場合、決められた座標で計算する

SVMによる学習
SVM::Params paramsにパラメータをセットし、
Ptr<SVM> svm = StatModel::train<SVM>(train_data, ROW_SAMPLE, Mat(labels), params);
で学習を行なう

3.0はいろいろ問題があるので、2.4.10でビルドできないか試したところ、読み込みと特徴量のところは問題がなかったが、2.4.10では、mlクラスはないので、この部分を自分でlibLinearに置き換えれば、2.4.10で自分の辞書ができそうである。

2.4.10のHOGのソースの場所
opencv2410/modules/objdetect/src/hog.cpp

3.0のpython版による手書き数字識別のチュートリアル
OCR of Hand-written Data using SVM

0 件のコメント:

コメントを投稿