Как тренировать и прогнозировать, используя мешок слов?

У меня есть папка с изображениями автомобиля со всех сторон. Я хочу использовать подход «мешок слов», чтобы научить систему распознавать машину. После того, как обучение будет завершено, я хочу, чтобы, если дается изображение этой машины, он мог ее распознать.

Я пытался изучить функцию BOW в opencv, чтобы сделать эту работу, и пришел к уровню, когда я не знаю, что делать сейчас, и некоторые рекомендации будут оценены.

Вот мой код, который я использовал для создания мешка слов:

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, они оба используют термины обучать и прогнозировать.

Как мне прогнозировать и тренироваться после этого? Любое руководство будет высоко оценено. Как связать обучение классификатора с моей функцией `bowDE``?


person ipunished    schedule 03.12.2012    source источник
comment
Как вы определили значения для TermCriteria и DictionSize, tc, повторных попыток, флагов?   -  person dephinera    schedule 03.01.2015


Ответы (1)


Ваш следующий шаг — извлечь пакет дескрипторов слов. Вы можете сделать это, используя функцию compute из BOWImgDescriptorExtractor. Что-то типа

 bowDE.compute(img, keypoints, bow_descriptor);

Используя эту функцию, вы создаете дескрипторы, которые затем собираете в матрицу, которая служит входными данными для функций классификатора. Может быть, этот урок может немного помочь вам.

Еще я хотел бы отметить, что для классификации обычно требуется как минимум 2 класса. Поэтому вам также нужны изображения, не содержащие автомобилей, для обучения классификатора.

person sietschie    schedule 04.12.2012