【问题标题】:Read svm data and retrain with more data?读取 svm 数据并用更多数据重新训练?
【发布时间】:2014-10-07 01:23:28
【问题描述】:

我正在实现面部表情识别并使用 SVM 对给定的表情进行分类。 当我训练时,我使用这个命令行

svm.train(myFeatureVector,myLabels,Mat(),Mat(), myParameters);
svm.save("myClassifier.yml");

稍后我会预测使用

response = svm.predict(incomingFeatureVector);

但是当我想训练不止一次时(退出程序并重新开始),它似乎覆盖了我之前的 svm 文件。有什么办法可以读取以前的 svm 文件并向其中添加更多数据(然后重新保存等)?我查了on this openCV documentation,一无所获。然而,当我读到on this page;有一个名为 CvSVM::read 的方法。我不知道它的作用/如何实现它。

希望任何人都可以帮助我:(

【问题讨论】:

  • 不,重新训练 SVM 是不可能的。在线 SVM 有不同的库可用,但 OpenCV 不是其中之一。
  • 你确定吗?所以没有任何解决方案吗? :(
  • 就像我提到的,一些在线学习库是可用的。 OpenCV 的 SVM 不支持这一点,它所基于的 LibSVM 也不支持。

标签: c++ opencv svm


【解决方案1】:

您尝试做的是增量学习,但不幸的是支持向量机是一种批处理算法,因此如果您想添加更多数据,您必须再次使用整个集合重新训练。

有在线学习替代品,例如 Pegasos SVM,但我不知道在 OpenCV 上实现了什么

【讨论】:

  • 我认为这是我目前可以使用的最佳方法。但这会很麻烦,因为这意味着要训练更多的数据,需要更多的时间来训练(到目前为止它少于一分钟..但如果我能重新训练它仍然会很棒。)
猜你喜欢
  • 2014-05-18
  • 2015-09-26
  • 2019-07-12
  • 2016-08-09
  • 2015-08-14
  • 2012-02-21
  • 2014-11-03
  • 2015-06-24
  • 2014-02-21
相关资源
最近更新 更多