Narzędzia do osadzania obrazów umożliwiają osadzanie obrazów w wektorze cech o wysokim wymiarze, który reprezentuje znaczenie semantyczne obrazu. Można go następnie porównać z wektorem cech innych obrazów, aby ocenić ich podobieństwo semantyczne.
W przeciwieństwie do wyszukiwarki obrazów moduł do osadzania obrazów umożliwia obliczanie podobieństwa między obrazami na bieżąco, zamiast przeszukiwania wstępnie zdefiniowanego indeksu utworzonego na podstawie korpusu obrazów.
Użyj interfejsu API biblioteki zadań ImageEmbedder, aby wdrożyć własny moduł do osadzania obrazów w aplikacjach mobilnych.
Kluczowe funkcje interfejsu ImageEmbedder API
Przetwarzanie obrazu wejściowego, w tym obracanie, zmiana rozmiaru i konwersja przestrzeni kolorów.
Obszar zainteresowań na obrazie wejściowym.
Wbudowana funkcja narzędziowa do obliczania podobieństwa cosinusowego między wektorami cech.
Obsługiwane modele osadzania obrazów
Te modele są zgodne z ImageEmbedderAPI.
Modele wektorów cech z kolekcji modułów obrazów Google w Kaggle.
modele niestandardowe, które spełniają wymagania dotyczące zgodności modeli;
Uruchamianie wnioskowania 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());
Więcej opcji konfigurowania ImageEmbedder znajdziesz w kodzie źródłowym.
Uruchamianie wnioskowania w Pythonie
Krok 1. Zainstaluj pakiet TensorFlow Lite Support Pypi.
Pakiet TensorFlow Lite Support Pypi możesz zainstalować za pomocą tego polecenia:
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)
Więcej opcji konfigurowania ImageEmbedder znajdziesz w kodzie źródłowym.
Przykładowe wyniki
Podobieństwo cosinusowe między znormalizowanymi wektorami cech zwraca wynik z zakresu od -1 do 1. Im wyższa wartość, tym lepiej. Podobieństwo cosinusowe równe 1 oznacza, że 2 wektory są identyczne.
Cosine similarity: 0.954312
Wypróbuj proste narzędzie demonstracyjne CLI dla ImageEmbedder z własnym modelem i danymi testowymi.
Wymagania dotyczące zgodności modeli
Interfejs ImageEmbedder API oczekuje modelu TFLite z opcjonalnymi, ale zdecydowanie zalecanymi metadanymi modelu TFLite.
Zgodne modele osadzania obrazów powinny spełniać te wymagania:
Tensor obrazu wejściowego (kTfLiteUInt8/kTfLiteFloat32)
- obraz wejściowy o rozmiarze
[batch x height x width x channels]. - wnioskowanie zbiorcze nie jest obsługiwane (
batchmusi mieć wartość 1). - obsługiwane są tylko dane wejściowe RGB (wartość
channelsmusi wynosić 3); - Jeśli typ to kTfLiteFloat32, do metadanych muszą być dołączone opcje normalizacji, aby można było normalizować dane wejściowe.
- obraz wejściowy o rozmiarze
Co najmniej 1 tensor wyjściowy (kTfLiteUInt8/kTfLiteFloat32)
- z
Nkomponentami odpowiadającymiNwymiarom zwróconego wektora cech dla tej warstwy wyjściowej. - Może to być 2 lub 4 wymiary, czyli
[1 x N]lub[1 x 1 x 1 x N].
- z