gpt4 book ai didi

matlab - 了解提取特征的编码

转载 作者:太空宇宙 更新时间:2023-11-03 19:45:38 26 4
gpt4 key购买 nike

我关注的编码是 fisher 编码,因为我已经证明我的工作有最好的结果。因此,我想在我提取的 (SIFT) 特征上测试 Fisher 编码,并测试使用或不使用编码的系统性能。

我没有重新开始,而是发现 vl_feat 有一个内置的 fisher 编码库,并且他们有一个教程链接 here

现在我已经完成了大部分需要做的事情,但实际上编码的内容让我感到困惑,例如教程清楚地表明 fisher 编码是使用 GMM 获得的参数执行的,例如 [means, covariances , priors] 和 SIFT 提取的特征将按照教程在 GMM 中使用:

The Fisher encoding uses GMM to construct a visual word dictionary. To exemplify constructing a GMM, consider a number of 2 dimensional data points. In practice, these points would be a collection of SIFT or other local image features.

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

numClusters = 30 ;
[means, covariances, priors] = vl_gmm(data, numClusters);

那么一旦我执行了这一步,我就要对另一个数据集进行编码?这就是让我困惑的地方。我已经使用我提取的 SIFT 特征来生成 GMM 的参数。

Next, we create another random set of vectors, which should be encoded using the Fisher Vector representation and the GMM just obtained:

encoding = vl_fisher(datatoBeEncoded, means, covariances, priors);

所以这里 encoded 是最终结果,但是它编码了什么?我希望对从图像中提取的 SIFT 特征进行编码,但如果我遵循 GMM 中使用的教程。如果是这样,那么 datatoBeEncoded 是什么?我要在这里再次使用 SIFT 专长吗?

谢谢

更新:

@沙伊

谢谢,但我相信我一定做错了什么。我不太明白你所说的“将图像与它们自己进行比较”是什么意思。我有 4 个类(class),每个类(class)有 1000 张图片。所以我使用第 1 类的前 600 张图像来学习 gmm 参数,然后使用这些参数对 fisher 向量进行编码

numClusters = 128 ;
[means, covariances, priors] = vl_gmm(data, numClusters);

因此每个均值、协方差的大小为128 x 128,先验大小为1 x 128

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

encoding = vl_fisher(datatoBeEncoded, means, covariances, priors);

编码的大小非常不同,大约为 12000 x 1。这些无法与生成的模型进行比较。

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

如果需要,我可以在此处添加代码,但它是针对 UBM-GMM 的,我感到困惑的原因是因为您提到的训练方法正是我在 UBM 中使用的方法。

如果我只是对测试图像进​​行编码,我将无法在分类器中使用它们,因为大小不匹配。

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

非常感谢

最佳答案

您在此过程中有两个阶段:
(1) 培训,您可以在其中学习您所在领域的一些统计特性,以及
(2) 测试,您可以在其中使用学习到的表示/模型并将它们应用于新样本。

因此,您应该将特征数据集拆分为两个“拆分”,一个用于学习 Fisher 编码的 GMM(训练 集),另一个拆分用于将编码应用于(a < em>测试集)。

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

numClusters = 30 ;
[means, covariances, priors] = vl_gmm(TrainingData, numClusters);

一旦你有了这个模型保存,你就可以将它应用到照片以对其进行编码

encoding = vl_fisher(TestData, means, covariances, priors);

请注意,虽然 TrainingData 通常非常大并且可能从数十个(甚至数百个)图像中收集,但 TestData 可能小得多,甚至是描述符从单个图像收集。

关于matlab - 了解提取特征的编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27691052/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com