【问题标题】:SVM training to infer point position with respect to two other points in a videoSVM 训练以推断视频中相对于其他两个点的点位置
【发布时间】:2013-08-20 08:03:04
【问题描述】:

我想用 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 应该预测随机点是否在想要的位置。

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

谢谢

【问题讨论】:

  • 我不明白为什么要使用机器学习来推断图像中一个点相对于所需点相关的另外两个点的位置。你能解释一下吗?
  • 想要的点遵循从视频到视频相似的轨迹,所以我想使用机器学习根据我知道的两个相关点的位置来推断该轨迹中的位置

标签: visual-c++ opencv svm training-data


【解决方案1】:

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

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

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

(point_1, point_2) -> point_3

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

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

简而言之:

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

如果你还是不明白,我推荐一个来自斯坦福大学的好视频: http://www.youtube.com/watch?v=5RLRKkzYWuQ

【讨论】:

  • 很好的解释。我对训练有疑问,有没有什么方法可以训练神经网络来定义点的出现???
猜你喜欢
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 2016-01-28
  • 1970-01-01
  • 1970-01-01
  • 2017-03-14
  • 1970-01-01
相关资源
最近更新 更多