【发布时间】:2015-03-05 18:43:11
【问题描述】:
对于我的 svm 训练和预测,我使用的是 vl_svmtrain,其文档可以在这里找到:http://www.vlfeat.org/matlab/vl_svmtrain.html
[WB] = VL_SVMTRAIN(X, Y, LAMBDA) 训练一个线性支持向量 来自数据向量 X 和标签 Y 的机器 (SVM)。X 是 D 乘 N 矩阵,每个示例一列,D 个特征维度(SINGLE 或双)。 Y 是具有 N 个元素的 DOUBLE 向量,其中包含二进制(-1 或 +1) 每个训练点的标签。
根据文档,数据 X 必须位于 D × N 矩阵中,每列一个样本。
问题是我的数据根本不是这样排列的,即使我想我也不认为我可以这样排列。我的每个图像都由大小为512 * 257 的特征矩阵表示,这些都存储在一个单元格中。同样,每个测试图像的大小也相同。
因此,为了简化起见,我假设我只有 3 个类,每个类都由大小为 512 * 257 的模型表示,并且我必须对每个模型进行数千次测试,更像是一个与全部方法。但这是我遇到困难的数据安排。
是否可以将数据以单元格格式而不是矩阵格式呈现给 SVM?
更新:
我提到的单元阵列由 28 个模型组成。所以我一共有28个类,每个类都用一个大小为512 * 257的数组表示。写models(1) 表示ans = [512x257 double],写models{1} 生成512*257 双矩阵。
这就是我用来训练 SVM 的方法,类似地,每个测试也具有相同的大小和相同的排列。
我如何得到每个模型的这个矩阵?我从每个类/模型的 100 个图像中提取了 RootSIFT 特征。然后我将这些特征呈现给一个高斯混合模型脚本,并将集群的数量设置为 512。这给了我 512 个集群的均值、协方差和权重。然后我使用models{i} = [gmm_models{i}.w(:) gmm_models{i}.mu' gmm_models{i}.sigma']; 连接它们
测试方面,从 5 张图像中提取 RootSIFT 特征,然后对它们进行与模型相同的处理,得到相同大小的级联矩阵。所以自然而然地,每个模型都有数百个测试矩阵。
我希望这比以前更清楚了。
【问题讨论】:
-
512x257 是否是图像中的特征点列表?有完整的描述符吗?
-
它是 GMM 生成的参数的串联。因此,每个单元格都是均值、协方差和权重的串联。根据去年 3 月发表的一篇论文,已知这些功能会产生良好的效果
标签: matlab classification svm libsvm vlfeat