J'ai une question simple concernant la représentation vectorielle VLAD. Comment se fait-il qu'un vecteur VLAD 8192 dimensions (k = 64, 128-D SIFT) prenne «32 Ko de mémoire» par image? Je ne pouvais pas rapporter ces deux nombres.Un vecteur VLAD de 8192 dimensions prend 32 Ko de mémoire par image. Comment?
Répondre
Comme décrit dans le VLFeat documentation, chaque élément du vecteur VLAD est donnée par
où x_i
est un vecteur de descripteur (ici: un vecteur de SIFT 128 dimensions), et u_k
est le centre de la grappe k
- c'est-à-dire aussi un vecteur SIFT à 128 dimensions. q_ik
indique la force de l'association entre x_i
et u_i
, qui est 0 ou 1 si le clustering K-means est utilisé. Ainsi, chaque v_k
est 128 dimensions.
Le vecteur VLAD d'une image I
est alors donnée par l'empilement de tous les v_k
:
Ce vecteur a k
éléments, et chaque élément est 128 dimensions. Ainsi, pour k=64
, nous nous retrouvons avec 64 * 128 = 8192
numéros décrivant l'image I
. Enfin, si nous utilisons des nombres à virgule flottante pour chaque élément, chaque nombre requiert 4 octets de mémoire. On aboutit donc à une utilisation totale de la mémoire de 64 * 128 * 4 = 32768
octets ou de 32 Ko pour le vecteur VLAD de chaque image.
Merci pour la réponse claire. –