我已经实现了Bag Of Words,一切都很顺利。但是,我对一些步骤和如何实现它感到困惑。
我可以在Bag of words中创建bow描述符作为创建示例的最后一步,如下所示bowDE.compute(img, keypoints, bow_descriptor);
..问题是我对接下来的步骤感到困惑。
我知道在BOW中,我必须用非类(可乐)训练和测试类(汽车),我在bow_descriptor vector中创建的内容仅用于类car,因此我有仅属于汽车的样本向量。以下是我训练和测试系统的问题。
1-我应该将bow_descriptor的向量的一半用于类(cola),其余部分用于非类(cola),还是必须为非类(cola)创建一个新的bow_descriptor ?
2-我需要做多类分类,在完成类(汽车)的第一个系统后,我需要训练一个新的类(公交车+火车等),我是为每一个都创建一个新的训练模型,还是是否可以在以前的培训中进行培训程序(即在同一系统中培训班级BUS,与班级car一起培训)?
为所有类创建一个对象还是为每个类创建一个对象并不重要,只要为所有类使用相同的字典即可。只创建一个对象可能更经济。但提取的图像描述符应该是相同的。
关于多类svm:
您使用了SVM标签。我假设你想用SVM。确实存在使用支持向量机显式地进行多类分类的方法,更常见的是训练几个二进制支持向量机并将它们组合起来以获得多类结果。
您可以使用1-vs-1设置,其中每个类对训练一个SVM。对于测试,您可以在每个SVM上评估您的测试示例。在这些决斗中赢得最多的班级将成为你的最终结果。
另一种流行的方法是1-vs-all svm。在这里,每个类训练一个SVM,其中当前类的样本标记为正,所有其他样本标记为负。在测试中,得分最高的类获胜。
所以,如果你想使用1-vs-1的设置,你可能能够重用一些二进制svm当你添加新的类。对于1 vs all设置是不可能的,因为您需要将新类添加到每个SVM的负样本中。