了解提取的要素的编码

Stu*_*PhD 5 matlab encoding classification image-processing feature-detection

我关注的编码是fisher编码,因为我已经证明我的工作效果最好.所以我想在我提取的(SIFT)功能上测试Fisher编码,并测试系统的性能,无论是否编码.

而不是重新开始我发现vl_feat有一个用于fisher编码的内置库,他们有一个教程,并在这里链接

现在我已经完成了所需的大部分工作,但实际上编码的内容让我感到困惑,例如教程清楚地表明使用GMM获得的参数执行Fisher编码,例如[means, covariances, priors]SIFT提取的特征将在这里使用在GMM中根据教程:

Fisher编码使用GMM来构建可视单词字典.为了举例说明构建GMM,考虑许多二维数据点.实际上,这些点将是SIFT或其他本地图像特征的集合.

numFeatures = 5000 ;
dimension = 2 ;
data = rand(dimension,numFeatures) ;

numClusters = 30 ;
[means, covariances, priors] = vl_gmm(data, numClusters);
Run Code Online (Sandbox Code Playgroud)

一旦我执行了这一步,我将编码另一个数据集?这让我很困惑.我已经使用我提取的SIFT功能生成GMM的参数.

接下来,我们创建另一组随机向量,这些向量应使用Fisher Vector表示和刚刚获得的GMM进行编码:

encoding = vl_fisher(datatoBeEncoded, means, covariances, priors);
Run Code Online (Sandbox Code Playgroud)

所以这encoded是最终的结果,但它编码了什么?我想要从我的图像中提取的SIFT功能进行编码,但是如果我按照GMM中使用的教程进行编码.如果是这样的话,那是datatoBeEncoded什么?我是否再次使用SIFT专长?

谢谢

更新:

@Shai

谢谢,但我相信我一定做错了.我不太明白你的意思是"将图像与自己比较".我有4个班,每班1000个图像.所以我使用了第1类中的前600个图像来学习gmm参数,然后使用这些参数来编码fisher矢量

numClusters = 128 ;
[means, covariances, priors] = vl_gmm(data, numClusters);
Run Code Online (Sandbox Code Playgroud)

所以每个means, covariances都有大小128 x 128和尺寸的前辈1 x 128

现在,当我使用这些函数来对400幅图像上的fisher矢量进行编码时

encoding = vl_fisher(datatoBeEncoded, means, covariances, priors);
Run Code Online (Sandbox Code Playgroud)

编码的大小是非常不同的,大小的东西12000 x 1.这些无法与生成的模型进行比较.

我已经有一个系统正在处理数据集的非编码版本,它运行良好,但我想看看编码将如何产生影响,理论上应该改进结果.

如果需要,我可以在这里添加代码,但它适用于UBM-GMM,我感到困惑的原因是因为你提到的训练方法是我用于UBM的.

如果我只编码测试图像,由于尺寸不匹配,我不能在分类器中使用它们.

也许我没有正确地选择这个或者犯了一些愚蠢的错误,是否有可能得到一个简单的例子,我可以通过它来理解工作.

非常感谢

Sha*_*hai 4

该过程分为两个阶段:
(1)训练,您使用学习领域的一些统计属性;
(2)测试,您使用学习到的表示/模型并将其应用到新样本。

因此,您应该将特征数据集分成两个“分割”,一个用于学习 Fisher 编码的 GMM(训练),另一个分割用于将编码应用到(测试集)。

通常,您会采样大量能够很好地代表您感兴趣的领域的图像(例如,如果您对人物感兴趣,您应该考虑许多室内和室外的人物照片、特写镜头和集体照片等)。您可以提取尽可能多的 SIFT 描述符您可以从这些训练图像中学习模型:

numClusters = 30 ;
[means, covariances, priors] = vl_gmm(TrainingData, numClusters);
Run Code Online (Sandbox Code Playgroud)

保存此模型后,您可以将其应用于照片以对其进行编码

encoding = vl_fisher(TestData, means, covariances, priors);
Run Code Online (Sandbox Code Playgroud)

请注意, whileTrainingData通常非常大,并且可能是从数十个(甚至数百个)图像中收集的,TestData也可能明显较小,甚至是从单个图像中收集的描述符。