Les représentations vectorielles continues d'images permettent d'intégrer des images dans un vecteur de caractéristiques de grande dimension représentant la signification sémantique d'une image, que vous pouvez ensuite comparer le vecteur de caractéristiques d'autres images pour évaluer leur similarité sémantique.
Par opposition à recherche d'images, L'outil d'intégration d'images permet de calculer la similarité entre les images à la volée. au lieu d'effectuer une recherche dans un index prédéfini construit à partir d'un corpus d'images.
Déployer votre intégrateur d'images personnalisé à l'aide de l'API ImageEmbedder
de la bibliothèque de tâches
dans vos applications mobiles.
Principales fonctionnalités de l'API ImageEmbedder
Traitement de l'image d'entrée, y compris la rotation, le redimensionnement et l'espace colorimétrique la conversion.
Région d'intérêt de l'image d'entrée.
Fonction utilitaire intégrée permettant de calculer le similarité cosinus entre des vecteurs de caractéristiques.
Modèles de représentations vectorielles continues compatibles
La compatibilité des modèles suivants avec ImageEmbedder
est garantie.
API.
Les modèles de vecteurs de caractéristiques Collection de modules d'image Google sur les modèles Kaggle.
Les modèles personnalisés qui répondent aux exigences de compatibilité des modèles.
Exécuter une inférence en C++
// Initialization
ImageEmbedderOptions options:
options.mutable_model_file_with_metadata()->set_file_name(model_path);
options.set_l2_normalize(true);
std::unique_ptr<ImageEmbedder> image_embedder = ImageEmbedder::CreateFromOptions(options).value();
// Create input frame_buffer_1 and frame_buffer_2 from your inputs `image_data1`, `image_data2`, `image_dimension1` and `image_dimension2`.
// See more information here: tensorflow_lite_support/cc/task/vision/utils/frame_buffer_common_utils.h
std::unique_ptr<FrameBuffer> frame_buffer_1 = CreateFromRgbRawBuffer(
image_data1, image_dimension1);
std::unique_ptr<FrameBuffer> frame_buffer_2 = CreateFromRgbRawBuffer(
image_data2, image_dimension2);
// Run inference on two images.
const EmbeddingResult result_1 = image_embedder->Embed(*frame_buffer_1);
const EmbeddingResult result_2 = image_embedder->Embed(*frame_buffer_2);
// Compute cosine similarity.
double similarity = ImageEmbedder::CosineSimilarity(
result_1.embeddings[0].feature_vector(),
result_2.embeddings[0].feature_vector());
Consultez le
code source
pour afficher d'autres options de configuration de ImageEmbedder
.
Exécuter une inférence en Python
Étape 1: Installez le package Pypi de support TensorFlow Lite.
Vous pouvez installer le package Pypi de support TensorFlow Lite à l'aide de la commande suivante : :
pip install tflite-support
Étape 2: Utiliser le modèle
from tflite_support.task import vision
# Initialization.
image_embedder = vision.ImageEmbedder.create_from_file(model_path)
# Run inference on two images.
image_1 = vision.TensorImage.create_from_file('/path/to/image1.jpg')
result_1 = image_embedder.embed(image_1)
image_2 = vision.TensorImage.create_from_file('/path/to/image2.jpg')
result_2 = image_embedder.embed(image_2)
# Compute cosine similarity.
feature_vector_1 = result_1.embeddings[0].feature_vector
feature_vector_2 = result_2.embeddings[0].feature_vector
similarity = image_embedder.cosine_similarity(
result_1.embeddings[0].feature_vector, result_2.embeddings[0].feature_vector)
Consultez le
code source
pour afficher d'autres options de configuration de ImageEmbedder
.
Exemples de résultats
La similarité cosinus entre les vecteurs de caractéristiques normalisés renvoie un score compris entre -1 et 1. Plus elle est élevée, mieux c'est. En d'autres termes, une similarité cosinus de 1 signifie que les deux vecteurs identiques.
Cosine similarity: 0.954312
Essayez la méthode la plus simple Outil de démonstration de la CLI pour ImageEmbedder avec votre propre modèle et vos données de test.
Exigences de compatibilité des modèles
L'API ImageEmbedder
attend un modèle TFLite avec un paramètre facultatif, mais fortement
recommandé
Métadonnées du modèle TFLite.
Les modèles d'intégration d'images compatibles doivent répondre aux exigences suivantes:
Tensor d'image d'entrée (kTfLiteUInt8/kTfLiteFloat32)
- Entrée d'image de taille
[batch x height x width x channels]
. - l'inférence par lot n'est pas acceptée (
batch
doit être défini sur 1). - Seules les entrées RVB sont acceptées (la valeur de
channels
doit être 3). - Si le type est kTfLiteFloat32, les options de normalisation doivent être aux métadonnées pour la normalisation des entrées.
- Entrée d'image de taille
Au moins un Tensor de sortie (kTfLiteUInt8/kTfLiteFloat32)
- avec des composants
N
correspondant aux dimensionsN
des éléments renvoyés vecteur de caractéristiques de cette couche de sortie. - Deux ou quatre dimensions (
[1 x N]
ou[1 x 1 x 1 x N]
, par exemple).
- avec des composants