Calcular la distancia de una imagen de la incrustación en contra de un grupo de imagen incrustaciones

0

Pregunta

Cómo obtener correctamente la distancia de una imagen de la incrustación en contra de una lista/grupo de otra imagen de la incrustación?

Tengo un preentrenado modelo que estoy utilizando para extraer incrustaciones de imágenes, y me gustaría obtener la distancia de una imagen en contra de algunas otras imágenes, es decir,

Embedding (1028,) against Embedding (5, 1028)

Estoy tratando de hacer una imagen de similitud experimento en el que estoy usando la métrica de similitud del Coseno de Tensorflow para calcular la distancia entre dos incrustación, y funciona bien en un 1-a-1 cálculo es decir,

Embedding_1 = (1028,)
Embedding_2 = (1028,)
metrics.CosineSimilarity(Embedding_1, Embedding_2)

pero no puedo averiguar cómo hacerlo en un 1-a-N a distancia de computación.

Embedding_1 = (1028,)
Embedding_Group = [(1028,),(1028,),(1028,),(1028,),(1028,)]
1

Mejor respuesta

1

Se podría hacer con la radiodifusión. Iterar sobre las imágenes y la informática a distancia para cada par es mala idea en este caso, ya no va a ser paralelo (a menos que sepa cómo hacerlo usted mismo).

import tensorflow as tf

embedding = tf.constant([1., 1.]) # your shape here is (1028,) instead of (2,)
embedding_group = tf.constant([[1., 1.], [1., 2.], [0., 1.]]) # your shape here is (5, 1028) instead of (3, 2)
norm_embedding = tf.nn.l2_normalize(embedding[None, ...], axis=-1)
norm_embedding_group = tf.nn.l2_normalize(embedding_group, axis=-1)
similarity = tf.reduce_sum(norm_embedding * norm_embedding_group, axis=-1) # cosine similarity of same shape as number of samples

print(norm_embedding.numpy())
print(norm_embedding_group.numpy())
print(similarity.numpy())
# [[0.7071067 0.7071067]]
# [[0.7071067  0.7071067 ]
#  [0.44721356 0.8944271 ]
#  [0.         1.        ]]
# [0.9999998  0.94868314 0.7071067 ]
2021-11-22 13:22:59

En otros idiomas

Esta página está en otros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Slovenský
..................................................................................................................