如何使用svmlight模型文件使用c ++检测opencv中的对象

时间:2015-03-11 09:31:57

标签: c++ opencv model object-detection svmlight

我正在使用OpenCV,C ++并尝试检测图像中的对象。直到现在我做了什么。

来自小图片(108x64)补丁的

1。我提取了所需的6200(来自一个补丁)功能。然后我用svmLight格式在train.txt和test.txt文件中编写了这些功能。

.2 然后我将train.txt提供给svmLight并获得了模型文件。使用此模型文件,我可以测试分类精度,约为90%。到目前为止,我已经在Ubuntu和OpenCV以及C ++中完成了。它是命令行训练和测试两者。

3. 现在我想使用训练期间生成的模型文件从原始图像(480x640)中检测对象。

但问题是我不知道如何使用模型文件从原始图像中检测对象(640x480)。我想要非常基本/基本的东西,如何使用简单的滑动窗口(108x64)和svmLight或(LatentSVM或cvSVM)使用此模型文件进行检测。 Plz不告诉我,我应该调整原始图像(图像金字塔)以获得良好的准确度,我应该使用ADM(Active Deformable Model / Snake)。不要告诉我局部最大值抑制去除额外的矩形框。只需告诉我如何检测(逐步完成实现)并获取矩形框。在此先感谢,等待专家回复。

1 个答案:

答案 0 :(得分:0)

感谢上帝,我做到了。 我在物体检测项目中的用途

  1. 首先我实现了特征提取部分。因此,使用小图像补丁我提取所需的特征并将其写入SVMLight格式的train.txt文件中。我用C ++很容易。我使用了10个图像补丁,所以我在.txt文件中写了10行,带有适当的标签(1或-1),每个特征向量的维度为6200(因此train.txt文件中的每一行都有6200索引和相应的值)。
  2. 第二个以同样的方式生成test.txt文件。这里标签不是必需的,但是你需要把0作为标签而不是1或-1

    1. 我得到了SVMLight的可执行文件。这么简单我在Ubuntu中使用 $。/ svm_learn train.txt model.txt 命令。在此之后我得到了模型文件。

    2. 我的分类为 $。/ svm_classify test.txt model.txt predict.txt 命令,它显示了准确性和精确度/召回率。我有95%的准确率。这取决于您用于培训的样本数量。后来我使用800正面和800负面然后我有97%的准确率。我很高兴 。

  3. 直到我在这里。我得到了结果,非常高兴。但在那之后我不知道该怎么做以及怎么做。然后我读了很多文件和文章,使用这个模型文件作为原始图像中的检测对象(大小512x512)。主要的是我不知道如何使用Modelfile。在阅读了很多关于互联网和堆栈溢出的文章后,我真的很困惑。但是在stackoverflow中的某处我读取了从SVMLight获取代码并将其与您的应用程序集成。我也一样。

    所以现在来解决我在问题中提出的上述问题。

    1. 首先我下载了​​SVMLight源代码。试图理解它。然后我得出结论,在我的应用程序中只使用svm_classify模块。然后我将选定的代码片段从svm_classify.c复制到我的应用程序,或者你可以说我在我的应用程序中集成/合并了svm_classify.c。
    2. 不要担心Modelfile svm_classify加载它并将为您完成所有工作。

      1. 然后,您将获得每个小检测窗口或输入向量或test.txt中每一行的处理值(变量)。变量名称是“dist”。如果它是+ ve,则对象存在于检测窗口或test_input_vector中,否则对象不存在。
      2. 注意: SVMLight只能用于非商业用途。我用它作为政府大学的研究,M-tech项目(非商业)。如果我避免任何规则,请告诉我。

        如果有人有疑问。非常欢迎。