一袋词训练样本

时间:2013-04-25 12:34:22

标签: opencv image-processing computer-vision svm object-recognition

我已经实施了Bag Of Words,一切顺利。但是,我对一些步骤以及如何实现它感到困惑。

我可以创建弓形描述符作为创建样本的单词包中的最后一步,如此处所示bowDE.compute(img, keypoints, bow_descriptor); ..事情是我对后续步骤感到困惑。

我知道在BOW中我必须用非类(可乐)训练和测试一个类(汽车),我在bow_descriptor矢量中创建的仅用于类车,所以我有仅适用于样本的矢量去车。以下是我培训系统和测试它的问题。

1-我应该为类(可乐)制作一半的bow_descriptor向量,其余用于非类(可乐),或者我必须为非类(可乐)创建一个新的bow_descriptor?< / p>

2-我需要做多级分类,在完成第一个班级(汽车)系统后,我需要训练一个新的班级(公共汽车+火车等),我应该创建一个新的训练模型他们每个人,或 可以用以前的训练进行训练程序(即训练班巴士,在同一系统中训练班车)?

1 个答案:

答案 0 :(得分:1)

无论是为所有类创建一个对象还是为每个类创建一个对象都无关紧要,只要您对所有类使用相同的字典即可。 仅创建一个对象可能更经济。但是提取的图像描述符应该是相同的。

关于多类SVM:

您使用了SVM标记。所以我假设你想使用SVM。存在使用SVM明确地进行多类分类的方法,更常见的是训练几个二进制SVM并将它们组合以获得多类结果。

您可以使用1对1设置,每个类对训练一个SVM。为了测试,您可以在每个SVM上评估测试示例。最经常赢得决赛的班级将成为你的最终结果。

另一种流行的方法是1-vs-all SVM。在这里,您可以为每个类训练一个SVM,其中当前类的样本标记为正,所有其他样本标记为负。在测试期间,得分最高的班级获胜。

因此,如果要使用1-vs-1设置,则可以在添加新类时重用某些二进制SVM。 1-vs-All设置是不可能的,因为您需要将新类添加到每个SVM的负样本中。