5

我正在关注的编码是fisher编码,因为我已经证明,在我的工作中,编码效果最好。所以我想测试我提取的(SIFT)特征上的Fisher编码,并测试系统的编码性能或不编码性能。了解提取特征的编码

而不是开始新我发现vl_feat有一个内置的库渔民编码和他们有,由于很好地链接here

现在我已经做了最需要什么样的,但究竟是什么并得到一个教程编码是混淆我,例如教程清楚地表明,使用诸如[means, covariances, priors]通过GMM获得的参数和所述SIFT提取的特征将被用在这里GMM具体根据教程进行渔夫编码:

的费舍尔编码使用GMM构建一个视觉词典。以 为例说明构建GMM,考虑一些二维数据 分。实际上,这些点将是SIFT或其他本地图像特征的集合。

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

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

然后,一旦我已经完成这一步,我来编码另一数据集?这让我感到困惑。我已经使用提取的SIFT特征生成GMM参数。所以在这里

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

encoded是最终的结果,但WHAT:

接下来,我们创建另一个组随机向量,它应该用Fisher向量表示编码 ,只是得到的GMM有编码吗?我希望从我的图像中提取的SIFT特征能够被编码,但是如果我遵循GMM中使用的教程。如果是这样的话,datatoBeEncoded是什么?我是否再次使用SIFT专长?

谢谢

更新

@Shai

谢谢你,但我相信我一定是做错了什么。我不太明白你的意思是“将图像与自己比较”。我有4班,每班1000张图片。所以就用从1类第600个图像学习GMM参数,然后使用这些参数来进行编码渔民矢量

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

所以每个means, covariances是大小尺寸128 x 128和先验的1 x 128

现在,当我使用这些使用功能进行编码的400个图像渔民矢量

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

编码的大小有很大的不同,沿着大小事。这些不能与生成的模型进行比较。

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

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

如果我只是对测试图像进​​行编码,由于尺寸不匹配,我无法在分类器中使用它们。

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

非常感谢

回答

3

你必须在这个过程分为两个阶段:
(1)培训在您使用学习域的一些统计特性,并
(2)测试在您使用学习的表示/模型并将其应用于新样本。

因此,你应该将功能集分成两个“分裂”一个学习的GMM费希尔编码(一训练集),而另一个分裂的编码申请(一测试集) 。

通常情况下,您会抽取大量能够很好地表示您感兴趣的域名的图像(例如,如果您对人们感兴趣,应该考虑许多室内和室外人物照片,特写和合影照片等)。许多SIFT描述这些训练图像,你可以用它们来学习之典范:

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

一旦你有了这个模型保存,那么你可以将其应用到照片它们编码

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

注意,尽管TrainingData是一般非常大的,并且可以从图像的几十个(或甚至数百)收集,TestData可以是显著更小,甚至是来自单个图像采集的描述符。

+0

谢谢您的回复。所以如果我有1000张图片,并且使用600进行训练,其余的进行测试,那么我如何比较这两张图片呢?我的意思是,在这种情况下,训练将根据''gmm''参数进行,而测试将根据''fisher vectors''进行,使用分类器将如何进行比较?这不就像比较一种功能类型(训练)和另一种功能类型(测试)?对不起,也许我不能正确理解你的解释,如果可能的话,请你提供一个这样的例子吗?非常感谢 – StuckInPhD

+0

@FarazKhan你不假设比较训练集 - 这将是“作弊”。您可以使用600张照片来学习模型,然后将400张图片的渔夫向量与自己进行比较:找到相似的图片等。例如,您可以从400张图片中选择一张图片,然后搜索最近的10张图片矢量 - 即找到10个最相似的图像。 – Shai

+0

这里写的太多了,所以我更新了我原来的问题,你可以看看它。非常感谢 – StuckInPhD