在 MATLAB 中使用 SVM 实现 HOG 特征
Posted
技术标签:
【中文标题】在 MATLAB 中使用 SVM 实现 HOG 特征【英文标题】:HOG Feature Implementation with SVM in MATLAB 【发布时间】:2014-05-18 04:23:52 【问题描述】:我想使用 SVM 基于 HOG 特征进行分类。
我知道 HOG 特征是每个单元格中所有直方图的组合(即它变成一个聚合直方图)。
我使用page 中的 MATLAB 代码为 Dalal-Triggs 变体提取 HOG 特征。
例如,我有尺寸为 384 x 512 的灰度图像,然后我提取了 9 个方向和 8 个像元大小的 HOG 特征。通过这样做,我得到 48 x 64 x 36 功能。
如何制作直方图并将其用于 SVM 分类器?
因为例如,我将有 7 类图像,并且我想进行训练(训练时总图像为 700 个),然后根据训练阶段生成的模型对新数据进行分类。
我读到对于多类,我们可以使用 ONE 与 ALL 训练我们的 SVM,这意味着我必须为我的 7 个类训练 7 个分类器。
所以对于第一班火车,我会考虑将第一班标记为 +1,而最后一班将标记为 0。 而第二班火车,我会考虑将第二班标记为+1,而最后一班将标记为0。依此类推..
例如,我有颜色类别: 红色、绿色、蓝色、黄色、白色、黑色和粉色。
所以对于第一次训练,我只制作了 2 个红色而不是红色的二进制文件。
对于第二次培训,我将标签设为绿色而不是绿色.. 是这样的吗??
训练SVM的语法是:
SVMStruct = svmtrain(Training,Group)
但在这种情况下,我将有 7 个 SVMStruct..
分类/测试的语法
Group = svmclassify(SVMStruct,Sample)
这里怎么声明7个SVMStruct??
是这样吗?? 还是我必须知道其他概念或语法?
对于训练,我将拥有 48 x 64 x 36 的特征,我如何在 SVM 中训练这些特征? 因为正如我所读到的,它们只有 1xN 的特征矩阵..
请帮帮我...
【问题讨论】:
我觉得这个网站可以帮到你:geocities.ws/talh_davidc 【参考方案1】:HOG 和 SVM 是最成功的目标检测算法。要应用这种方法,是的,在将它们输入 SVM 分类器之前,确实必须有两个不同的训练数据集。例如,您想检测一个苹果,因此您必须有两个训练数据集,正图像是图像中包含苹果的图像,负图像是图像中不包含苹果的图像。然后,您将两个训练数据集(正面和负面)的特征分别提取到 HOG 描述符中,并分别对其进行标记(即 1 表示正面,0 表示负面)。然后,将正面和负面的特征向量组合起来,并输入到 SVM 分类器中。
您可以使用 SVM Light 或 LibSVM,这对初学者来说更容易且用户友好。
【讨论】:
请检查一下link【参考方案2】:适用于 MATLAB 的计算机视觉系统工具箱包括 extractHOGFeatures
函数,统计工具箱包括 SVM。这是一个example,介绍如何使用 HOG 和 SVM 对图像进行分类。
【讨论】:
我从谷歌来到这里,你提到的例子正是我想要的。但是我不能加载文章中提到的训练数据集有什么原因吗?我什至安装了计算机视觉工具箱。但是当我发出load('digitDataSet.mat',...
命令时,我被告知不存在这样的文件。我需要查看数据集以了解数据的排列方式,并且它们将相同的排列应用于我的数据集。谢谢
@FarazKhan,你有哪个版本的 Matlab?
MATLAB Version: 8.1.0.604 (R2013a)
@FarazKhan,啊,这就是原因。该示例仅在 R2013b 中与extractHOGFeatures
一起添加。您可能需要升级到最新版本的 R2014a,它包含许多计算机视觉方面的新内容。
对,就是这样。感谢您的澄清。【参考方案3】:
1.我怎样才能使它成为直方图并将其用于 SVM 分类器?
我想要做的一个区别是你已经有了一个定向梯度特征的“直方图”。您现在需要将这些特征作为输入提供给 SVM。为这些特征中的每一个分配标签是很奇怪的,因为一个 HoG 特征可能会出现在另一个标签不同的图像中。
实际上,我们所做的是从这些 HoG 特征中制作另一个称为词袋的直方图,并将它们作为输入提供给 SVM。直觉是,如果两个特征非常相似,您将需要这两个 HoG 特征的一种表示。这减少了输入数据的方差。现在我们为每张图片制作这个新的直方图。
按以下方式创建一个词袋:
将所有 HoG 特征聚类为“单词”。假设你有 1000 个 这些话。
遍历所有 HoG 特征并将 HoG 特征分配给一个单词,如果它 在 bag 中的所有单词中最接近(欧几里得距离)该单词。
计算为袋子中的每个单词分配了多少单词。这是 1XN(N = 包中的单词数) 特征直方图,将给出 作为标记后 SVM 的输入。2。如何使用 SVM 进行多类分类? 如果您将重新训练 SVM,您将获得另一个模型。有两种方法可以使用 SVMTrain 进行多类 SVM
1) 一对一支持向量机
使用以下方式输入每个标签类:
模型 1 输入的示例将是
bag of words features for Image 1, RED
bag of words features Image 2, GREEN
模型 1 输入的示例将是
bag of words features for Image 3, YELLOW
bag of words features Image 2, GREEN
以上是针对每对标签类别完成的。您将拥有 N(N-1)/2 个模型。现在您可以计算 N(N-1)/2 个模型中每个类别的投票数,以找到要分配的标签。
2) 一对一支持向量机
使用以下方式输入每个标签类:
模型 1 输入的示例将是
bag of words features for Image 1, RED
bag of words features for Image 2, NOT RED
模型 1 输入的示例将是
bag of words features for Image 2, GREEN
bag of words features for Image 1, NOT GREEN
以上是对每个标签类做的。您将拥有 N 个模型。现在您可以计算 N 个模型中每个类别的投票数,以找到要分配的标签。
在此处阅读有关类别级别分类的更多信息:http://www.di.ens.fr/willow/events/cvml2013/materials/slides/tuesday/Tue_bof_summer_school_paris_2013.pdf
【讨论】:
以上是关于在 MATLAB 中使用 SVM 实现 HOG 特征的主要内容,如果未能解决你的问题,请参考以下文章
使用可变大小的训练图像 hog 描述符训练 SVM (MATLAB)
图像分类基于matlab HOG+SVM图像分类识别含Matlab源码 2141期
基于SVM支持向量机和HOG特征的交通标志检测算法matlab仿真