1

我想用 opencv c++ 训练一个 SVM,以便推断图像中一个点相对于所需点相关的另外两个点的位置。

基本上我有整个视频中三个点的轨迹,我想用这些轨迹作为 SVM 的训练数据。

我是机器学习技术的新手,经过一些阅读后,我想我已经理解 SVM 将返回一个布尔结果(如果同时满足某些条件,则为 true,否则为 false)。就我而言,我需要图像中的位置作为结果。

我不确定我应该如何组织训练集,我正在考虑做这样的事情:

T1 T2 T3 标签=1

其中 T1 T2 和 T3 包含属于我认为正确的三个轨迹的所有点;

T1 T2 T4 标签=-1

其中 T1 和 T2 与之前相同,而 T4 包含不位于轨迹 T3 上的随机点。

一旦我用来自不同视频的不同轨迹训练了 SVM,我想通过三个点:P1(x,y) 和 P2(x,y) 对应于时间 t 的 T1 和 T2 以及随机点 P(x,y ),SVM 应该预测随机点是否在想要的位置。

如果这种方法是错误的,任何人都可以向我解释,为什么?

谢谢

4

1 回答 1

0

这种方法是错误的,主要是因为你的问题不是二元分类问题。这是一个回归问题。您想要的输出是value,而不是二进制数,因此训练 SVM 或任何其他二进制分类器是个坏主意。分类问题是搜索从您的输入数据到一些有限(和小)的可能标签集(如“真”和“假”,或“猫”、“狗”或“脸”)的映射。另一方面,回归是寻求从输入数据到(可能是多维的)实值空间的映射,因此您正在寻找实际而不是标签。就您而言-您寻求坐标,这是(我想)两个实数。如果您将问题建模为二进制分类,则:

  • 没有创建训练集的明智方法(您只有“正面”示例,您可以通过获取不正确的点来生成“负面”示例,但大多数都是,最好训练一个类SVM,但如前所述 - 它根本不是分类问题)
  • 实际测试将非常复杂,因为您必须询问每一点“这是一个正确的答案吗?”

相反,您应该使用表单数据训练任何回归模型

(point_1, point_2) -> point_3

所以模型可以找到一个函数,将你的两个输入点映射到一个输出点。此任务有许多可能的模型:

  • 线性回归
  • 神经网络
  • SVR(支持向量回归)

简而言之:

  • 你的输出是一个标签,来自有限集的离散值 - >分类器
  • 你的输出是一个连续值-> 回归模型

如果你还不清楚,我建议斯坦福大学的一个好视频: http ://www.youtube.com/watch?v=5RLRKkzYWuQ

于 2013-08-23T16:31:52.163 回答