Výpočetní vzdálenost obrazu vkládání proti skupině image vnoření

0

Otázka

Jak se správně dostat na vzdálenost obrazu vkládání proti seznam/skupiny pro další vkládání obrázků?

Mám pretrained model, který jsem pomocí extrahovat embeddings z obrázků, a chtěl bych se dostat na vzdálenost obrazu proti několika dalších obrazů, tj.

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

Snažím se udělat obrázek podobnosti experiment, kde im pomocí Kosinová podobnost metrické od Tensorflow vypočítat vzdálenost mezi dvěma vkládání, a to funguje dobře, na 1-na-1 výpočet tj.

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

ale nemůžu přijít na to, jak to na 1-to-N výpočet vzdálenosti.

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

Nejlepší odpověď

1

To může být provedeno s vysílání. Iterace přes obrázky a výpočetní vzdálenost pro každý jednotlivý pár je špatný nápad, v tomto případě, protože to nebude paralelizovat (pokud nevíte, jak to udělat sami).

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

V jiných jazycích

Tato stránka je v jiných jazycích

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