Calcolare la distanza di un immagine incorporamento contro un gruppo di immagini incorporamenti

0

Domanda

Come ottenere correttamente la distanza di un'immagine incorporamento contro una lista/gruppo di un'altra immagine di incorporamento?

Ho un pretrained modello che sto usando per estrarre incorporamenti dalle immagini, e vorrei ottenere la distanza di un'immagine in base a poche altre immagini cioè

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

Sto cercando di fare un'immagine somiglianza esperimento dove im utilizzando il Coseno di somiglianza metrica da Tensorflow per calcolare la distanza tra le due incorporamento, e funziona bene su una 1-a-1 per il calcolo, cioè

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

ma io non riesco a capire come farlo su una 1-a-N passi di calcolo.

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

Migliore risposta

1

Potrebbe essere fatto con la radiodiffusione. Scorrendo le immagini e calcolo della distanza per ogni coppia, è una cattiva idea, in questo caso, dato che non essere eseguite in parallelo (se non sai come fare da soli).

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

In altre lingue

Questa pagina è in altre lingue

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