이미지 삽입기 통합

이미지 임베더를 사용하면 이미지의 시맨틱 의미를 나타내는 고차원 특성 벡터에 이미지를 삽입할 수 있으며, 이를 다른 이미지의 특성 벡터와 비교하여 시맨틱 유사성을 평가할 수 있습니다.

이미지 검색과 달리 이미지 삽입기를 사용하면 이미지 코퍼스에서 빌드된 사전 정의된 색인을 검색하는 대신 즉석에서 이미지 간 유사성을 계산할 수 있습니다.

작업 라이브러리 ImageEmbedder API를 사용하여 맞춤 이미지 삽입기를 모바일 앱에 배포합니다.

ImageEmbedder API의 주요 기능

  • 회전, 크기 조절, 색상 공간 변환을 비롯한 입력 이미지 처리

  • 입력 이미지의 관심 영역입니다.

  • 특성 벡터 간의 코사인 유사성을 계산하는 기본 제공 유틸리티 함수입니다.

지원되는 이미지 임베더 모델

다음 모델은 ImageEmbedder API와 호환됩니다.

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());

ImageEmbedder를 구성하는 추가 옵션은 소스 코드를 참고하세요.

Python에서 추론 실행

1단계: TensorFlow Lite 지원 Pypi 패키지를 설치합니다.

다음 명령어를 사용하여 TensorFlow Lite 지원 Pypi 패키지를 설치할 수 있습니다.

pip install tflite-support

2단계: 모델 사용

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)

ImageEmbedder를 구성하는 추가 옵션은 소스 코드를 참고하세요.

결과 예시

정규화된 특징 벡터 간의 코사인 유사성은 -1과 1 사이의 점수를 반환합니다. 값이 높을수록 좋습니다. 즉, 코사인 유사성이 1이면 두 벡터가 동일하다는 의미입니다.

Cosine similarity: 0.954312

자체 모델과 테스트 데이터로 간단한 ImageEmbedder용 CLI 데모 도구를 사용해 보세요.

모델 호환성 요구사항

ImageEmbedder API는 선택사항이지만 적극 권장되는 TFLite 모델 메타데이터가 있는 TFLite 모델을 예상합니다.

호환되는 이미지 삽입기 모델은 다음 요구사항을 충족해야 합니다.

  • 입력 이미지 텐서 (kTfLiteUInt8/kTfLiteFloat32)

    • [batch x height x width x channels] 크기의 이미지 입력
    • 일괄 추론은 지원되지 않습니다 (batch이 1이어야 함).
    • RGB 입력만 지원됩니다 (channels은 3이어야 함).
    • 유형이 kTfLiteFloat32인 경우 입력 정규화의 메타데이터에 NormalizationOptions를 연결해야 합니다.
  • 하나 이상의 출력 텐서 (kTfLiteUInt8/kTfLiteFloat32)

    • 이 출력 레이어에 대해 반환된 특징 벡터의 N 측정기준에 해당하는 N 구성요소
    • [1 x N] 또는 [1 x 1 x 1 x N]와 같이 2개 또는 4개의 측정기준