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

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

Я пытался изучить функцию лука в 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);

Это все основано на лук документации.

Я думаю, что на этом этапе моя система обучена. и следующий шаг-предсказание.

здесь я не знаю, что делать. Если я использую SVM или NormalBayesClassifier Они оба используют термины train и predict.

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

1 ответов


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

 bowDE.compute(img, keypoints, bow_descriptor);

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

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