我想训练SVM进行物体检测。此时我有一个python脚本,可以检测FAST关键点并在该位置提取BRIEF功能。
现在我不知道如何使用这些描述符来训练SVM。
请你告诉我:
如何使用描述符训练SVM(据我所知,这些描述符应该是我的列车数据)?
我使用的标签是什么以及如何获得它们?
答案 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)
训练集将包含多个图像,每个图像都是X
和y
的一行。
对于标签y
,您需要正面和负面的示例(0或1):
正面样本
您可以通过两种方式指定阳性样本。一种方法是指定 较大图像中的矩形区域。区域包含对象 出于兴趣。另一种方法是裁剪出感兴趣的对象 从图像中将其另存为单独的图像。然后,您可以指定 该区域是整个图像。你也可以产生更积极的 通过添加旋转或噪声或通过变化来从现有样本中取样 亮度或对比度。
否定样本
不包含感兴趣对象的图片。
[从here]
稍加编辑
在这里你可以发挥创意,但我会提一个简单的想法。制作height * width
个功能,每个图像的每个像素一个,但除了在FAST关键点周围的一个小区域外,它们全部为0。最后,您的X
矩阵将具有维度(n_images
,height*width
)。
另一个常用的想法是Bag of Words。 X
矩阵必须具有固定数量的要素/列,关键点的数量是可变的。这是一个表示问题,但可以解决它们在具有固定数量的箱的直方图中的分组。有关详细信息,请参阅示例this paper。
您必须参考专业文献,提出更多方法来合并Brief功能,但我希望这会让您了解如何开始使用。