3

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

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

我知道在 BOW 中我必须用非类(可乐)训练和测试一个类(汽车),我在 bow_descriptor 向量中创建的仅用于类汽车,所以我有只属于汽车的样本的向量. 以下是我在训练和测试系统时遇到的问题。

1- 我应该将 bow_descriptor 的向量一半用于 class(cola) ,其余用于 non-class(cola) ,还是我必须为 non-class(cola) 创建一个新的 bow_descriptor ?

2-我需要做多类分类,在完成第一个类(汽车)系统后,我需要训练一个新类(公共汽车+火车等),我应该为每个人创建一个新的训练模型吗, 或者可以和之前的培训一起做培训程序(即培训班BUS,与班车在同一系统中培训)?

4

1 回答 1

1

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

关于多类 SVM:

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

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

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

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

于 2013-04-25T14:15:54.967 回答