我正在尝试使用线性SVM进行多类对象类别识别。到目前为止,我了解到主要有两种方法——一对所有(OVA)和一对一(OVO)。但我在理解其实现上遇到了困难。我认为使用的步骤是:
- 首先,准备特征描述符,比如使用SIFT。因此,我有一个128XN的特征向量。
- 接下来,为了为特定对象类别(比如汽车)准备SVM分类器模型,我使用50张汽车图片作为正训练集,并从其他类别中随机选取总共50张图片作为负训练集(这一部分正确吗?)。我为所有这些类别(假设有5个)准备这样的模型。
- 接下来,当我有一个输入图像时,我是否需要将图像输入到所有5个模型中,然后检查这些模型的输出值(+1/-1)?我对这一部分感到困惑。
回答:
在一对所有方法中,你需要检查所有5个模型。然后,你可以根据最有信心的值做出决策。LIBSVM
提供概率估计值。
在一对一方法中,你可以采用多数原则。例如,你测试1对2、1对3、1对4和1对5。如果在3个案例中分类为1,那么你就将其分类为1。你对其他4个类别也进行同样的操作。假设其他四个类别的值是[0, 1, 1, 2]
。因此,类别1被选中的次数最多,成为最终的类别。在这种情况下,你也可以进行概率估计的总和。取最大值。这通常有效,除非在一对中分类结果极端错误。例如,在1对4中,它以0.7的信心将4(真实类别是1)分类为4。仅仅因为这个决定,你的概率估计总和可能会大幅增加并给出错误的结果。这个问题可以进行实验性检查。
LIBSVM使用一对一方法。你可以在这里查看原因这里。你也可以阅读这篇论文,他们捍卫一对所有分类方法,并得出结论说它并不一定比一对一差。