Zintegruj moduły umieszczania obrazów

Odtwarzacze osadzone obrazów umożliwiają umieszczanie obrazów w wysokowymiarowym wektorze cech reprezentujące semantyczne znaczenie obrazu, które można następnie porównać z wektora cech innych obrazów, aby ocenić ich podobieństwo semantyczne.

W przeciwieństwie do wyszukiwanie grafiki, Narzędzie do umieszczania obrazów pozwala na bieżąco obliczać podobieństwo obrazów zamiast przeszukiwać wstępnie zdefiniowany indeks utworzony na podstawie korpusu obrazów.

Użyj interfejsu Task Library API ImageEmbedder, aby wdrożyć komponent do umieszczania niestandardowych obrazów do aplikacji mobilnych.

Najważniejsze funkcje interfejsu ImageEmbedder API

  • Przetwarzanie obrazu, w tym obrót, zmiana rozmiaru i przestrzeń kolorów konwersji.

  • Obszar zainteresowań obrazu wejściowego.

  • Wbudowaną funkcję użytkową do obliczania podobieństwo cosinusowe między wektory cech.

Obsługiwane modele umieszczania obrazów

Te modele gwarantują zgodność z modelem ImageEmbedder API.

Uruchom wnioskowanie w 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());

Zobacz kod źródłowy , aby uzyskać więcej opcji konfigurowania ImageEmbedder.

Uruchom wnioskowanie w Pythonie

Krok 1. Zainstaluj pakiet Pypi Support TensorFlow Lite.

Możesz zainstalować pakiet Pypi Support Pypi na TensorFlow Lite za pomocą: polecenie:

pip install tflite-support

Krok 2. Korzystanie z modelu

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)

Zobacz kod źródłowy , aby uzyskać więcej opcji konfigurowania ImageEmbedder.

Przykładowe wyniki

Podobieństwo cosinusowe między znormalizowanymi wektorami cech zwraca wynik od -1 oraz 1. Im większe, tym lepsze, czyli podobieństwo cosinusowe rzędu 1 oznacza, że 2 wektory są identyczna.

Cosine similarity: 0.954312

Wypróbuj prostą Narzędzie interfejsu wiersza poleceń dla ImageEmbedder z własnym modelem i danymi testowymi.

Wymagania dotyczące zgodności z modelem

Interfejs ImageEmbedder API wymaga modelu TFLite z opcjonalnym, ale znacznie silniejszym zalecane Metadane modelu TFLite.

Zgodne modele umieszczania obrazów powinny spełniać te wymagania:

  • Tensor obrazu wejściowego (kTfLiteUInt8/kTfLiteFloat32)

    • plik do wprowadzania obrazu o rozmiarze [batch x height x width x channels].
    • wnioskowanie wsadowe nie jest obsługiwane (wartość batch musi wynosić 1).
    • obsługiwane są tylko wejścia RGB (channels musi mieć wartość 3).
    • jeśli typ to kTfLiteFloat32, element NormalizationOptions musi mieć wartość do metadanych w celu normalizacji danych wejściowych.
  • Co najmniej jeden tensor wyjściowy (kTfLiteUInt8/kTfLiteFloat32)

    • z komponentami N odpowiadającymi wymiarom N zwróconych danych wektor cech dla tej warstwy wyjściowej.
    • Dostępne są 2 lub 4 wymiary, np. [1 x N] lub [1 x 1 x 1 x N].