我想使用 SVM 基于 HOG 特征进行分类。
我理解 HOG 特征是每个单元格中所有直方图的组合(即它成为一个聚合直方图)。
我在此 page 中使用 MATLAB 代码提取 HOG 特征对于Dalal-Triggs 变体。
例如,我有一个大小为 384 x 512 的灰度图像,然后我在 9 个方向和一个单元格大小为 8 处提取 HOG 特征。通过这样做,我得到 48 x 64 x 36强>特征。
如何将其制作成直方图并将其用于 SVM 分类器?
因为例如,我将有 7 类图像并且我想进行训练(用于训练的图像总数为 700),然后根据训练阶段生成的模型对新数据进行分类。
我读到对于多类,我们可以用 ONE vs ALL 训练我们的 SVM,这意味着我必须为我的 7 个类训练 7 个分类器。
所以对于第一列火车,我会考虑将第一节标记为 +1,将第二节标记为 0。 而第 2 列火车,我会认为第 2 类标记为 +1,其余类将标记为 0。依此类推。
例如,我有颜色类别: 红色、绿色、蓝色、黄色、白色、黑色和粉色。
所以对于第一次训练,我只制作了 2 个红色和非红色的二进制文件。
对于第二次训练,我将标签设为绿色而不是绿色...... 是这样吗??
训练SVM的语法是:
SVMStruct = svmtrain(Training,Group)
但在这种情况下,我将有 7 个 SVMStruct..
分类/测试的语法
Group = svmclassify(SVMStruct,Sample)
如何在这里声明7个SVMStruct??
是吗?? 或者还有其他我必须知道的概念或语法??
对于训练,我将拥有 48 x 64 x 36 的特征,我如何在 SVM 中训练这些特征? 因为正如我读到的那样,它们只有 1xN 的特征矩阵..
请帮帮我...
最佳答案
HOG 和 SVM 是最成功的目标检测算法。要应用这种方法,是的,在将它们输入 SVM 分类器之前,您确实必须有两个不同的训练数据集。例如,你想检测一个苹果,那么你必须有两个训练数据集,positive images 是图像中包含苹果的图像,negative images 是图像中不包含苹果的图像。然后,您将两个训练数据集(正面和负面)的特征分别提取到 HOG 描述符中,并分别对其进行标记(即 1 表示正面,0 表示负面)。之后,结合正负特征向量并将它们提供给 SVM 分类器。
您可以使用 SVM Light 或 LibSVM,这对初学者来说更容易且用户友好。
关于matlab - 在 MATLAB 中使用 SVM 实现 HOG 特征,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22886789/