VLFeat:vl_kmeans 中某些簇的 ValueError

Posted

技术标签:

【中文标题】VLFeat:vl_kmeans 中某些簇的 ValueError【英文标题】:VLFeat: ValueError for certain number of clusters in vl_kmeans 【发布时间】:2016-05-22 03:28:33 【问题描述】:

我有一个大小为 301 x 4096 的数组,我想为其计算 VLAD 向量。

我尝试使用

进行量化
center, assignments = vlfeat.vl_kmeans(data,8)

但这会返回

ValueError:解包的值太多

如果我将集群数量从 8 个更改为 2 个,它会起作用。 我也尝试过其他数字,但它们都返回了相同的 ValueError。除了,当它设置为 1 时,它会返回

ValueError: 需要超过 1 个值才能解压

会不会和我数据中的样本数量有关?

【问题讨论】:

它与函数返回的项目数有关。如果大于 2,你会得到too many values to unpack,当它小于 2 时,你会得到more than 1 value to unpack + see this。它返回一个命名元组,这是一个包含你的东西的单个对象。 @BurhanKhalid 意味着它应该总是两个?那么如何指定其他簇数呢? 【参考方案1】:

VLFeat 的这个非官方 Python 接口的源代码可在 Github 上找到。

vl_kmeans函数默认只返回centers,所以只有一个值可以解压:

import numpy as np
import vlfeat
x = np.random.rand(10, 8)
centers = vlfeat.vl_kmeans(x, 3)

生成的 centers 数组将具有 (3, 8) 的形状,即 3 个中心中的每个中心都有一个 8 维点。

如果您想获得每个输入的分配,您必须将选项quantize 传递给vl_kmeans 函数。然后,该函数确实返回了centersassignment,并且按预期工作:

centers, assignments = vlfeat.vl_kmeans(x, 3, quantize=True)

【讨论】:

以上是关于VLFeat:vl_kmeans 中某些簇的 ValueError的主要内容,如果未能解决你的问题,请参考以下文章

Invalid MEX-file 'E:\vlfeat-0.9.18\toolbox\mex\mexw64\vl_kmeans.mexw64':

Matlab中配置VLFeat

Matlab中VLFeat的图像拼接

在 java 中使用 VLfeat 库编译 Matlab 代码

记录一下vlfeat视觉库配置

如何在 Octave 上设置 VLFEAT?