使用具有关键点的 SVM
Use a SVM with Key Points
所以我遇到了与此 post 中讨论的相同的问题。
Training of SVM classifier using SIFT features
我阅读了很多关于此的教程和 posts,但我对词袋模型、如何将我的描述符放入其中以及如何使用它训练 SVM 有一些理解问题。
在我当前项目的前一步中,我使用了 HOG+SVM,如果我的训练矩阵,每张图像都是一行。在我提取我的 HOG 描述符之前,我将图像重新调整为描述符的大小,所以我所有的行都具有相同的长度。
现在我想使用二进制描述符。例如,如果我在图像中检测到 36 个关键点并对其进行描述,我将得到一个 36x250 矩阵。对于另一个图像,一个 29x250 矩阵。现在我想我必须使用 OpenCV 中的 Bag of Words 方法为我的 SVM 构建字典。
所以我从关键点中提取描述符并将它们添加到我的 BOW 中,之后我将它聚类成一个词汇表,现在我退出了。
我读了很多教程和 posts,但我没有得到这一步。
有人可以解释一下之后发生了什么吗?
我的数据是如何存储的?
BOWImgDescriptorExtractor 是如何工作的?
我是否将负样本和正样本放入 BOW?
如果这个问题已经被问了一百遍了,我很抱歉,但我不是专业的程序员,如果所有东西都集中在几个函数中并且每个人都说这很简单,我经常会遇到问题。
感谢您的帮助。
这比我认为您想象的要容易。为了方便阅读,我会分步写出来给大家看。
- 从你的训练集中获取所有的例子并应用 HOG 来获得特征——你完全忘记了 class 是什么只是确保你有来自每个 class 的例子。
- 然后您提取所有这些特征并使用聚类算法创建一个词袋 - 因此您将拥有 25 个 "visual words" 而不是 1000 个特征。
- 现在,当您训练算法时,您再次从每个图像中提取 HOG 特征,但您会发现哪个 "word" 最接近使用距离函数 - 通常是 L1 或 L2。现在,每个图像不再由 hog 表示,而是由您通常编号为 1-n 的单词表示。
- 将数据输入 svm 进行训练:)
- 当你去测试时,你再次提取 HOG,转换成 BOW,并将这个新的表示和模型输入到你的测试函数中。
希望对您有所帮助!
所以我遇到了与此 post 中讨论的相同的问题。
Training of SVM classifier using SIFT features
我阅读了很多关于此的教程和 posts,但我对词袋模型、如何将我的描述符放入其中以及如何使用它训练 SVM 有一些理解问题。
在我当前项目的前一步中,我使用了 HOG+SVM,如果我的训练矩阵,每张图像都是一行。在我提取我的 HOG 描述符之前,我将图像重新调整为描述符的大小,所以我所有的行都具有相同的长度。
现在我想使用二进制描述符。例如,如果我在图像中检测到 36 个关键点并对其进行描述,我将得到一个 36x250 矩阵。对于另一个图像,一个 29x250 矩阵。现在我想我必须使用 OpenCV 中的 Bag of Words 方法为我的 SVM 构建字典。
所以我从关键点中提取描述符并将它们添加到我的 BOW 中,之后我将它聚类成一个词汇表,现在我退出了。 我读了很多教程和 posts,但我没有得到这一步。
有人可以解释一下之后发生了什么吗? 我的数据是如何存储的? BOWImgDescriptorExtractor 是如何工作的? 我是否将负样本和正样本放入 BOW?
如果这个问题已经被问了一百遍了,我很抱歉,但我不是专业的程序员,如果所有东西都集中在几个函数中并且每个人都说这很简单,我经常会遇到问题。
感谢您的帮助。
这比我认为您想象的要容易。为了方便阅读,我会分步写出来给大家看。
- 从你的训练集中获取所有的例子并应用 HOG 来获得特征——你完全忘记了 class 是什么只是确保你有来自每个 class 的例子。
- 然后您提取所有这些特征并使用聚类算法创建一个词袋 - 因此您将拥有 25 个 "visual words" 而不是 1000 个特征。
- 现在,当您训练算法时,您再次从每个图像中提取 HOG 特征,但您会发现哪个 "word" 最接近使用距离函数 - 通常是 L1 或 L2。现在,每个图像不再由 hog 表示,而是由您通常编号为 1-n 的单词表示。
- 将数据输入 svm 进行训练:)
- 当你去测试时,你再次提取 HOG,转换成 BOW,并将这个新的表示和模型输入到你的测试函数中。
希望对您有所帮助!