【问题标题】:Understanding an linear classification SVM了解线性分类 SVM
【发布时间】:2015-09-06 20:59:28
【问题描述】:

我试图了解线性分类 SVM 的工作原理(如用于 HOG people detection 的 SVM)。我觉得我遗漏了一个重要的部分,我害怕我找不到一个清晰的描述来更好地理解它。我知道有现成的实现,最后我可能最终会使用其中一个,但我想了解我在做什么。

据我了解,SVM 接受了许多特征向量和正确分类的训练。在训练之后,SVM 被完全定义为一组超平面(维数是特征向量的长度),通常是一个非常小的数字。我希望(天真地?)我训练有素的 SVM 是这样的:

ax >=b: 0
ax < b: 1

其中 x 是特征向量,ax = b 是超平面。在这里我遇到了问题,因为:

  1. 我不明白aforementioned paper 他们如何最终得到一个经过训练的 1.7GB 的 SVM。我的应该是 (64 bit/float * (length of feature vector + 1))。
  2. 使用此 SVM 进行分类很简单,一个点积和一个比较。尽管我似乎找不到太多关于使用 SVM 进行匹配需要多长时间的信息,但人们似乎正在寻找快速实现。

我确信在某些时候我误解了我所读的内容,但是我想知道我的想法哪里出错了。我想我只是陷入了错误的心态,因为我对 SVM 的了解越多,我就越能看到上述描述得到证实,这不可能是正确的。

【问题讨论】:

    标签: machine-learning computer-vision svm


    【解决方案1】:

    线性支持向量机是一般软边距核支持向量机的一种特殊情况,其中模型可以表示为单个权重向量 w 和一个偏置 b,因此分类由 y = w'*x+b 完成(这是决策值;您可以将其设为零,就像您所做的那样,或者选择另一个值来权衡精度/召回率)。在一般情况下,模型由它的支持向量及其权重来描述,因此它的大小取决于找到的 SV 的数量,并且可能非常大。

    一些软件库,比如libsvm,没有专门的代码来处理线性SVM分类,所以模型表示和分类功能在内存和运行时间方面效率低下。但是,您可以通过使用存储的 SV 权重计算所有 SV 的加权和,轻松地将模型表示转换为上述线性分类器。然后,您可以编写自己的线性分类函数,使用任何您想让它快速运行的方法(例如矢量化代码)

    【讨论】:

      【解决方案2】:

      在论文中看起来他们需要 1.7 GB 的 RAM 来训练分类器。为此,他们必须加载大约 14000 个 64x128 RGB 图像补丁。当它们使用整数存储时,最终大约为 1.5 GB。

      一旦分类器计算正确,只需要一个权重向量来检查给定样本在超平面的哪一侧。

      【讨论】:

      • 谢谢,这是有道理的,+1 用于解释 ~1.7GB。
      • 尽管它达到了 ~1.7GB,但要将图像存储在 RAM 中(每种颜色也不用 4 个字节)是没有意义的。 SVM 在大约 15k 个图像上进行训练,每个图像具有 3780 个特征(9 个 bin * 7 个块/行 * 15 行 * 4 个单元/块),因此大约有 5000 万个特征。我可以看到在训练期间使用 30 字节/功能听起来不可信(找不到有关 SVMLight 内存使用的任何信息)。不过,答案的第二部分是我需要的。
      猜你喜欢
      • 2017-09-08
      • 2011-04-29
      • 2017-11-20
      • 2015-11-03
      • 1970-01-01
      • 1970-01-01
      • 2020-03-16
      • 2016-08-05
      • 2015-12-30
      相关资源
      最近更新 更多