Как обучать и прогнозировать использование мешка слов? - программирование
Подтвердить что ты не робот

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

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

Я пытаюсь изучить функцию 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, они оба используют термины train и pred.

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

4b9b3361

Ответ 1

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

 bowDE.compute(img, keypoints, bow_descriptor);

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

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