Les intégrateurs d'images permettent d'incorporer des images dans un vecteur de caractéristiques de grande dimension représentant la signification sémantique d'une image, qui peut ensuite être comparé au vecteur de caractéristiques d'autres images pour évaluer leur similarité sémantique.
Contrairement à la recherche d'images , l'intégrateur d'images permet de calculer la similarité entre les images à la volée au lieu de rechercher dans un index prédéfini construit à partir d'un corpus d'images.
Utilisez l'API ImageEmbedder
de la bibliothèque de tâches pour déployer votre intégration d'images personnalisée 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 la conversion de l'espace colorimétrique.
Région d’intérêt de l’image d’entrée.
Fonction utilitaire intégrée pour calculer la similarité cosinusoïdale entre les vecteurs de caractéristiques.
Modèles d'intégration d'images pris en charge
Les modèles suivants sont garantis compatibles avec l'API ImageEmbedder
.
Présentez des modèles vectoriels de la collection Google Image Modules sur TensorFlow Hub .
Modèles personnalisés qui répondent aux exigences de compatibilité des modèles .
Exécuter l'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 plus d'options pour configurer ImageEmbedder
.
Exécuter l'inférence en Python
Étape 1 : Installez le package Pypi de support TensorFlow Lite.
Vous pouvez installer le package Pypi TensorFlow Lite Support à l'aide de la commande suivante :
pip install tflite-support
Étape 2 : Utilisation du 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 plus d'options pour configurer 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 c'est élevé, mieux c'est, c'est-à-dire qu'une similarité cosinus de 1 signifie que les deux vecteurs sont identiques.
Cosine similarity: 0.954312
Essayez l' outil de démonstration CLI simple 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 des métadonnées de modèle TFLite facultatives mais fortement recommandées.
Les modèles d'intégration d'images compatibles doivent répondre aux exigences suivantes :
Un tenseur d'image d'entrée (kTfLiteUInt8/kTfLiteFloat32)
- entrée d'image de taille
[batch x height x width x channels]
. - L'inférence par lots n'est pas prise en charge (
batch
doit être 1). - seules les entrées RVB sont prises en charge (
channels
doivent être au nombre de 3). - si le type est kTfLiteFloat32, les NormalizationOptions doivent être attachées aux métadonnées pour la normalisation des entrées.
- entrée d'image de taille
Au moins un tenseur de sortie (kTfLiteUInt8/kTfLiteFloat32)
- avec
N
composants correspondant auxN
dimensions du vecteur de caractéristiques renvoyé pour cette couche de sortie. - Soit 2 ou 4 dimensions, soit
[1 x N]
ou[1 x 1 x 1 x N]
.
- avec