如何使用词袋训练和预测?

Posted

技术标签:

【中文标题】如何使用词袋训练和预测?【英文标题】:How to train and predict using bag of words? 【发布时间】:2012-11-21 07:08:24 【问题描述】:

我有一个包含各个角度的汽车图像的文件夹。我想使用词袋方法来训练系统识别汽车。训练完成后,我希望如果给出那辆车的图像,它应该能够识别它。

为了完成这项工作,我一直在尝试学习 opencv 中的 BOW 函数,并且已经达到了我现在不知道该怎么做的水平,不胜感激。

这是我用来制作单词袋的代码:

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 documentation。

我认为在这个阶段我的系统已经过训练。下一步就是预测。

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

在此之后我如何预测和训练?任何指导将不胜感激。如何将分类器的训练连接到我的 `bowDE` 函数?

【问题讨论】:

您是如何确定 TermCriteria 和 dictionarySize、tc、retries、flags 的值的? 【参考方案1】:

下一步是提取单词描述符的实际包。您可以使用 BOWImgDescriptorExtractor 中的 compute 函数来执行此操作。类似的东西

 bowDE.compute(img, keypoints, bow_descriptor);

使用此函数,您可以创建描述符,然后将这些描述符收集到一个矩阵中,该矩阵用作分类器函数的输入。或许this教程可以给你一点指导。

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

【讨论】:

以上是关于如何使用词袋训练和预测?的主要内容,如果未能解决你的问题,请参考以下文章

R语言构建文本分类模型并使用LIME进行模型解释实战:文本数据预处理构建词袋模型构建xgboost文本分类模型基于文本训练数据以及模型构建LIME解释器解释多个测试语料的预测结果并可视化

如何在 scikit learn 中将特定课程与我的词袋配对

词袋训练样本

如何使用随机森林训练和预测模型?

如何转换自定义矢量化器以预测分类?

在 matlab 上配置和训练后,如何使用神经网络运行预测?