Bildeinbettungen ermöglichen die Einbettung von Bildern in einen hochdimensionalen Featurevektor die die semantische Bedeutung eines Bildes darstellt, die dann mit den Featurevektor anderer Bilder, um ihre semantische Ähnlichkeit zu bewerten.
Im Gegensatz zu Bildersuche Mit dem Bildeinbetter kann die Ähnlichkeit zwischen Bildern im Handumdrehen berechnet werden anstatt in einem vordefinierten Index zu suchen, der aus einem Korpus von Bildern besteht.
Benutzerdefinierten Bildeinbetter mit der Task Library ImageEmbedder
API bereitstellen
in Ihre mobilen Apps einbinden.
Wichtige Funktionen der ImageEmbedder API
Eingabebildverarbeitung, einschließlich Drehung, Größenanpassung und Farbraum Conversion.
Interessanter Bereich des Eingabebilds.
Integrierte Dienstprogrammfunktion zur Berechnung der Kosinus-Ähnlichkeit zwischen Featurevektoren.
Unterstützte Modelle für die Bildeinbettung
Die folgenden Modelle sind garantiert kompatibel mit dem ImageEmbedder
der API erstellen.
Featurevektormodelle aus der Sammlung von Google-Bildmodulen auf Kaggle-Modellen.
Benutzerdefinierte Modelle, die den Anforderungen an die Modellkompatibilität.
Inferenz in C++ ausführen
// 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());
Weitere Informationen finden Sie in der
Quellcode
finden Sie weitere Optionen zum Konfigurieren von ImageEmbedder
.
Inferenz in Python ausführen
Schritt 1: Pypi-Paket für das TensorFlow Lite-Support installieren
Sie können das Pypi-Paket für die TensorFlow Lite-Unterstützung so installieren: Befehl:
pip install tflite-support
Schritt 2: Modell verwenden
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)
Weitere Informationen finden Sie in der
Quellcode
finden Sie weitere Optionen zum Konfigurieren von ImageEmbedder
.
Beispielergebnisse
Die Kosinus-Ähnlichkeit zwischen normalisierten Featurevektoren gibt einen Wert zwischen -1 zurück und 1. Je höher, desto besser, d.h. eine Kosinus-Ähnlichkeit von 1 bedeutet, dass die beiden Vektoren identisch.
Cosine similarity: 0.954312
Probieren Sie die einfache CLI-Demotool für ImageEmbedder mit eigenen Modell- und Testdaten.
Anforderungen an die Modellkompatibilität
Die ImageEmbedder
API erwartet ein TFLite-Modell mit optionalem, aber starkem
empfohlen
TFLite-Modellmetadaten.
Die kompatiblen Modelle für die Bildeinbettung müssen die folgenden Anforderungen erfüllen:
Einen Eingabebildtensor (kTfLiteUInt8/kTfLiteFloat32)
- Bildeingabe mit der Größe
[batch x height x width x channels]
. - Batch-Inferenz wird nicht unterstützt (
batch
muss 1 sein). - Es werden nur RGB-Eingaben unterstützt (
channels
muss 3 sein). - Wenn der Typ kTfLiteFloat32 ist, müssen NormalizationOptions an die Metadaten für die Eingabenormalisierung angehängt.
- Bildeingabe mit der Größe
Mindestens ein Ausgabetensor (kTfLiteUInt8/kTfLiteFloat32)
- wobei
N
-Komponenten denN
-Dimensionen des zurückgegebenen Featurevektor für diese Ausgabeebene. - Entweder zwei oder vier Dimensionen, z.B.
[1 x N]
oder[1 x 1 x 1 x N]
.
- wobei