Opencv:使用快速关键点和简要功能训练SVM

时间:2014-12-30 13:01:59

标签: python opencv svm

我想训练SVM进行物体检测。此时我有一个python脚本,可以检测FAST关键点并在该位置提取BRIEF功能。

现在我不知道如何使用这些描述符来训练SVM。

请你告诉我:

  1. 如何使用描述符训练SVM(据我所知,这些描述符应该是我的列车数据)?

  2. 我使用的标签是什么以及如何获得它们?

1 个答案:

答案 0 :(得分:2)

要训练SVM,您需要一个带有功能的矩阵X和带有标签的矢量y。它应该看起来像3个图像和两个功能:

>>> from sklearn import svm
>>> X = [[0, 0],   <- negative 0
         [1, 3],   <- positive 1
          2, 5]]   <- negative 0
>>> y = [0,   
         1,
         0]
>>> model = svm.SVC()
>>> model.fit(X, y) 

训练集将包含多个图像,每个图像都是Xy的一行。

标签:

对于标签y,您需要正面和负面的示例(0或1):

  

正面样本

     

您可以通过两种方式指定阳性样本。一种方法是指定   较大图像中的矩形区域。区域包含对象   出于兴趣。另一种方法是裁剪出感兴趣的对象   从图像中将其另存为单独的图像。然后,您可以指定   该区域是整个图像。你也可以产生更积极的   通过添加旋转或噪声或通过变化来从现有样本中取样   亮度或对比度。

     

否定样本

     

不包含感兴趣对象的图片。

     

[here]

稍加编辑

特征矩阵X:

在这里你可以发挥创意,但我会提一个简单的想法。制作height * width个功能,每个图像的每个像素一个,但除了在FAST关键点周围的一个小区域外,它们全部为0。最后,您的X矩阵将具有维度(n_imagesheight*width)。

另一个常用的想法是Bag of Words。 X矩阵必须具有固定数量的要素/列,关键点的数量是可变的。这是一个表示问题,但可以解决它们在具有固定数量的箱的直方图中的分组。有关详细信息,请参阅示例this paper

您必须参考专业文献,提出更多方法来合并Brief功能,但我希望这会让您了解如何开始使用。