一个 8192 维的 VLAD 向量每张图像占用 32KB 的内存。如何?

A 8192-dimensional VLAD vector take 32KB of of memory per image. How?

我有一个关于 VLAD 矢量表示的简单问题。一个 8192 维(k=64、128-D SIFT)VLAD 向量如何占用每个图像“32KB 的内存”?我无法将这两个数字联系起来。

VLFeat documentation所述,VLAD向量的每个元素由

给出

其中 x_i 是一个描述符向量(这里是一个 128 维的 SIFT 向量),u_k 是第 k 簇的中心 - 即也是一个 128-维 SIFT 向量。 q_ik 表示 x_iu_i 之间的关联强度,如果使用 K-means 聚类,则为 0 或 1。因此,每个 v_k 都是 128 维的。

然后通过堆叠所有 v_k:

给出图像 I 的 VLAD 向量

这个向量有k个元素,每个元素都是128维的。 因此,对于 k=64,我们最终得到描述图像 I64 * 128 = 8192 个数字。

最后,如果我们为每个元素使用浮点数,每个数字需要 4 个字节的内存。因此,对于每个图像的 VLAD 向量,我们最终使用了 64 * 128 * 4 = 32768 字节或 32KB 的总内存。