我正在关注的编码是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的。
如果我只是对测试图像进行编码,由于尺寸不匹配,我无法在分类器中使用它们。
也许我没有正确地选择这个或做出一些愚蠢的错误,有可能得到一个简单的例子,通过它我可以理解工作。
非常感谢
谢谢您的回复。所以如果我有1000张图片,并且使用600进行训练,其余的进行测试,那么我如何比较这两张图片呢?我的意思是,在这种情况下,训练将根据''gmm''参数进行,而测试将根据''fisher vectors''进行,使用分类器将如何进行比较?这不就像比较一种功能类型(训练)和另一种功能类型(测试)?对不起,也许我不能正确理解你的解释,如果可能的话,请你提供一个这样的例子吗?非常感谢 – StuckInPhD
@FarazKhan你不假设比较训练集 - 这将是“作弊”。您可以使用600张照片来学习模型,然后将400张图片的渔夫向量与自己进行比较:找到相似的图片等。例如,您可以从400张图片中选择一张图片,然后搜索最近的10张图片矢量 - 即找到10个最相似的图像。 – Shai
这里写的太多了,所以我更新了我原来的问题,你可以看看它。非常感谢 – StuckInPhD