如何使用词袋模型进行训练和预测?

我有一个包含从各个角度拍摄的汽车图片的文件夹。我想使用词袋模型来训练系统识别这辆汽车。训练完成后,如果给出一张该车的图片,系统应该能够识别它。

为了实现这一点,我一直在学习OpenCV中的BOW函数,现在我已经到了不知道该怎么做的阶段,任何指导都会被非常感激。

以下是我用来创建词袋的代码:

Ptr<FeatureDetector> features = FeatureDetector::create("SIFT");    Ptr<DescriptorExtractor> descriptors = DescriptorExtractor::create("SIFT");    Ptr<DescriptorMatcher> matcher = DescriptorMatcher::create("FlannBased");    //定义bowkmeans训练器的术语    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);    //现在是训练数据    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文档的。

我认为此时我的系统已经训练好了。下一步是预测。

这是我不知道该怎么做的部分。如果我使用SVMNormalBayesClassifier,它们都使用训练和预测这两个术语。

在这一点之后,我该如何预测和训练?任何指导都会被非常感激。我该如何将分类器的训练与我的`bowDE`函数连接起来?


回答:

您的下一步是提取实际的词袋描述符。您可以使用BOWImgDescriptorExtractor中的compute函数来实现这一点。比如说

 bowDE.compute(img, keypoints, bow_descriptor);

使用这个函数,您可以创建描述符,然后将它们收集到一个矩阵中,该矩阵作为分类器函数的输入。也许这个教程可以为您提供一些指导。

我想提到的另一件事是,对于分类,您通常需要至少两个类别。所以您还需要一些不包含汽车的图片来训练分类器。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注