0

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

1.从小图像(108x64)补丁中,我提取了所需的 6200(来自一个补丁)特征。然后我在 svmLight 格式的 train.txt 和 test.txt 文件中编写了这些功能。

.2然后我将 train.txt 给 svmLight 并得到模型文件。使用这个模型文件,我可以测试大约 90% 的分类准确度。到目前为止,我已经在 Ubuntu、OpenCV 和 C++ 中完成了。它是命令行培训和测试。

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

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

4

1 回答 1

0

感谢上帝,我做到了。我在对象检测项目中拥有的东西

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

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

    2. 我做了分类$./svm_classify test.txt model.txt predict.txt command ,它显示了准确率和精度/召回率。我得到了 95% 的准确率。这将取决于您用于训练的样本数量。后来我使用了 800 个正数和 800 个负数,然后我得到了 97% 的准确率。我很高兴 。

直到这里我做到了。我得到了结果,非常高兴。但在那之后我不知道该怎么做和怎么做。然后我阅读了很多文档和文章,以使用这个模型文件来检测原始图像中的对象(尺寸 512x512)。主要我不知道如何使用 Modelfile 。在阅读了 Internet 和 stackoverflow 中的大量文章后,我真的很困惑。但是我在stackoverflow的某个地方读到了从SVMLight获取代码并将其与您的应用程序集成。我也是。

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

  1. 首先我下载 SVMLight 源代码。试图理解它。然后我得出结论,在我的 Application 中只使用 svm_classify 模块。然后我将选定的一段代码从 svm_classify.c 复制到我的应用程序,或者你可以说我在我的应用程序中集成/合并了 svm_classify.c。

不用担心 Modelfile svm_classify 会加载它,它会为您完成所有工作。

  1. 然后,您将获得每个小检测窗口或输入向量或 test.txt 中每一行的处理值(变量)。变量名是“dist”。如果它是 +ve 则对象存在于检测窗口或 test_input_vector 中,否则对象不存在。

注意: SVMLight 仅可免费用于非商业用途。我将它用作政府大学的研究、M-tech 项目(非商业)。如果我避免任何规则,请告诉我。

如果有人有疑问。最受欢迎的。

于 2015-03-13T14:43:15.530 回答