Как тренироваться и предсказывать, используя мешок слов?
у меня есть папка изображений автомобиля со всех сторон. Я хочу использовать подход "мешок слов" для обучения системы распознаванию автомобиля. Как только тренировка будет закончена, я хочу, чтобы если изображение этого автомобиля дано, оно могло его распознать.
Я пытался изучить функцию лука в 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 классы. Поэтому вам также нужны некоторые изображения, которые не содержат автомобилей для обучения классификатора.