web-dev-qa-db-ja.com

言葉の袋を使用してトレーニングおよび予測する方法は?

あらゆる角度からの車の画像のフォルダがあります。言葉の袋のアプローチを使用して、車を認識するシステムをトレーニングしたいと思います。トレーニングが終わったら、その車の画像が与えられれば、それを認識できるようにしたいと思います。

私はこれを機能させるためにopencvでBOW関数を学習しようとしてきましたが、今何をすべきかわからないレベルに達しました。いくつかのガイダンスをいただければ幸いです。

これが私が言葉の袋を作るために使用した私のコードです:

Ptr<FeatureDetector> features = FeatureDetector::create("SIFT");
    Ptr<DescriptorExtractor> descriptors = DescriptorExtractor::create("SIFT");
    Ptr<DescriptorMatcher> matcher = DescriptorMatcher::create("FlannBased");

    //defining terms for bowkmeans trainer
    TermCriteria tc(MAX_ITER + EPS, 10, 0.001);
    int dictionarySize = 1000;
    int retries = 1;
    int flags = KMEANS_PP_CENTERS;
    BOWKMeansTrainer bowTrainer(dictionarySize, tc, retries, flags);

    BOWImgDescriptorExtractor bowDE(descriptors, matcher);

    //training data now
    Mat features;
    Mat img = imread("c:\\1.jpg", 0);
    Mat img2 = imread("c:\\2.jpg", 0);
    vector<KeyPoint> keypoints, keypoints2;
    features->detect(img, keypoints);
    features->detect(img2,keypoints2);
    descriptor->compute(img, keypoints, features);
    Mat features2;
    descripto->compute(img2, keypoints2, features2);
    bowTrainer.add(features);
    bowTrainer.add(features2);

    Mat dictionary = bowTrainer.cluster();
    bowDE.setVocabulary(dictionary);

これはすべて BOWドキュメント に基づいています。

この段階で私のシステムは訓練されていると思います。次のステップは予測です。

これは私が何をすべきかわからないところです。 SVMまたはNormalBayesClassifierを使用する場合、どちらもtrainおよびpredictという用語を使用します。

この後、どのように予測してトレーニングしますか?どんなガイダンスでも大歓迎です。分類器のトレーニングを `bowDE``関数に接続するにはどうすればよいですか?

14
ipunished

次のステップは、Word記述子の実際のバッグを抽出することです。これは、BOWImgDescriptorExtractorのcompute関数を使用して実行できます。何かのようなもの

 bowDE.compute(img, keypoints, bow_descriptor);

この関数を使用して記述子を作成し、それを分類子関数の入力として機能する行列に収集します。多分 this チュートリアルはあなたを少しガイドすることができます。

私が言及したいもう一つのことは、分類のためにあなたは通常少なくとも2つのクラスを必要とするということです。したがって、分類器をトレーニングするために、車を含まない画像も必要です。

15
sietschie