Bildeinbettungen einbinden

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.

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 zum Einbetten von Bildern 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.
  • Mindestens ein Ausgabetensor (kTfLiteUInt8/kTfLiteFloat32)

    • wobei N-Komponenten den N-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].