이미지 검색을 사용하면 이미지 데이터베이스에서 유사한 이미지를 검색할 수 있습니다. 검색어를 쿼리의 시맨틱 의미를 나타내는 고차원 벡터에 삽입한 다음 ScaNN(확장 가능한 최근접 이웃)을 사용하여 사전 정의된 맞춤 색인에서 유사성 검색을 실행하는 방식으로 작동합니다.
이미지 분류와 달리 인식할 수 있는 항목 수를 늘리기 위해 전체 모델을 재학습할 필요는 없습니다. 색인을 다시 빌드하기만 하면 새 항목을 추가할 수 있습니다. 또한 이미지 데이터베이스를 더 큰 (100,000개 이상의 항목) 데이터베이스로 작업할 수 있습니다.
태스크 라이브러리 ImageSearcher API를 사용하여 맞춤 이미지 검색기를 모바일 앱에 배포합니다.
ImageSearcher API의 주요 기능
단일 이미지를 입력으로 사용하고 색인에서 임베딩 추출 및 최근접 이웃 검색을 실행합니다.
회전, 크기 조절, 색상 공간 변환을 비롯한 입력 이미지 처리
입력 이미지의 관심 영역입니다.
기본 요건
ImageSearcher API를 사용하기 전에 검색할 이미지의 맞춤 코퍼스를 기반으로 색인을 빌드해야 합니다. 튜토리얼을 따르고 적용하여 Model Maker Searcher API를 사용하면 됩니다.
이를 위해서는 다음이 필요합니다.
- mobilenet v3와 같은 TFLite 이미지 임베더 모델
Kaggle Models의 Google 이미지 모듈 컬렉션에서 선행 학습된 임베더 모델 (특성 벡터 모델이라고도 함)을 자세히 알아보세요.
- 이미지 코퍼스에
이 단계를 마치면 TFLite 모델 메타데이터에 색인이 연결된 원래 이미지 임베더 모델인 독립형 TFLite 검색기 모델 (예: mobilenet_v3_searcher.tflite)이 있어야 합니다.
Java에서 추론 실행
1단계: Gradle 종속 항목 및 기타 설정 가져오기
.tflite 검색기 모델 파일을 모델이 실행될 Android 모듈의 애셋 디렉터리에 복사합니다. 파일을 압축하지 않도록 지정하고 TensorFlow Lite 라이브러리를 모듈의 build.gradle 파일에 추가합니다.
android {
// Other settings
// Specify tflite index file should not be compressed for the app apk
aaptOptions {
noCompress "tflite"
}
}
dependencies {
// Other dependencies
// Import the Task Vision Library dependency
implementation 'org.tensorflow:tensorflow-lite-task-vision:0.4.4'
// Import the GPU delegate plugin Library for GPU inference
implementation 'org.tensorflow:tensorflow-lite-gpu-delegate-plugin:0.4.4'
}
2단계: 모델 사용
// Initialization
ImageSearcherOptions options =
ImageSearcherOptions.builder()
.setBaseOptions(BaseOptions.builder().useGpu().build())
.setSearcherOptions(
SearcherOptions.builder().setL2Normalize(true).build())
.build();
ImageSearcher imageSearcher =
ImageSearcher.createFromFileAndOptions(context, modelFile, options);
// Run inference
List<NearestNeighbor> results = imageSearcher.search(image);
ImageSearcher를 구성하는 추가 옵션은 소스 코드 및 Javadoc을 참고하세요.
C++에서 추론 실행
// Initialization
ImageSearcherOptions options;
options.mutable_base_options()->mutable_model_file()->set_file_name(model_path);
options.mutable_embedding_options()->set_l2_normalize(true);
std::unique_ptr<ImageSearcher> image_searcher = ImageSearcher::CreateFromOptions(options).value();
// Create input frame_buffer from your inputs, `image_data` and `image_dimension`.
// See more information here: tensorflow_lite_support/cc/task/vision/utils/frame_buffer_common_utils.h
std::unique_ptr<FrameBuffer> frame_buffer = CreateFromRgbRawBuffer(
image_data, image_dimension);
// Run inference
const SearchResult result = image_searcher->Search(*frame_buffer).value();
ImageSearcher를 구성하는 추가 옵션은 소스 코드를 참고하세요.
Python에서 추론 실행
1단계: TensorFlow Lite 지원 Pypi 패키지를 설치합니다.
다음 명령어를 사용하여 TensorFlow Lite 지원 Pypi 패키지를 설치할 수 있습니다.
pip install tflite-support
2단계: 모델 사용
from tflite_support.task import vision
# Initialization
image_searcher = vision.ImageSearcher.create_from_file(model_path)
# Run inference
image = vision.TensorImage.create_from_file(image_file)
result = image_searcher.search(image)
ImageSearcher를 구성하는 추가 옵션은 소스 코드를 참고하세요.
결과 예시
Results:
Rank#0:
metadata: burger
distance: 0.13452
Rank#1:
metadata: car
distance: 1.81935
Rank#2:
metadata: bird
distance: 1.96617
Rank#3:
metadata: dog
distance: 2.05610
Rank#4:
metadata: cat
distance: 2.06347
자체 모델과 테스트 데이터로 간단한 ImageSearcher용 CLI 데모 도구를 사용해 보세요.