Hugging Face Datasets와 Transformers를 이용한 이미지 유사도

임베딩을 통한 이미지 유사도 정의

이미지 유사도는 고차원 픽셀 데이터를 임베딩이라 불리는 밀집 표현으로 변환함으로써 달성됩니다. 이 과정은 이미지 공간(예: 224 x 224 x 3 픽셀)을 낮은 차원의 벡터 공간(예: 768 차원)으로 압축하여 검색 시 계산 시간을 크게 줄입니다.

두 이미지 간의 유사도를 판단하기 위해 시스템은 각각의 임베딩 사이에 코사인 유사도 메트릭을 계산합니다. 코사인 유사도 점수가 클수록 해당 벡터 공간에서 이미지가 더 유사하다고 간주됩니다.

이미지 인코더를 이용한 임베딩 계산

이러한 임베딩을 생성하려면 이미지 인코더 역할을 하는 비전 모델이 필요합니다. Hugging Face는 Hugging Face Hub에서 호환되는 체크포인트를 로드하기 위해 AutoModel 클래스를 사용할 것을 권장합니다.

모델 선택

제시된 예시에서는 시스템이 nateraw/vit-base-beans를 사용합니다. 이는 beans 데이터셋에 파인튜닝된 Vision Transformer(ViT) 모델입니다. 가이드는 몇 가지 주요 기술 선택을 강조합니다:

  • AutoModel vs AutoModelForImageClassification: 목표가 이산적인 카테고리 레이블이 아니라 밀집 표현(임베딩)을 얻는 것이므로 AutoModel을 사용합니다.
  • 도메인 특화 파인튜닝: beans와 같은 특정 데이터셋에 파인튜닝된 모델을 사용하는 것이 ImageNet-1k에 대해 학습된 일반 모델을 사용하는 것보다 일반적으로 더 나은 이해와 검색 성능을 제공합니다.
  • 자기지도 학습: 가이드는 자기지도 사전 학습을 통해 얻은 체크포인트도 인상적인 검색 성능을 제공할 수 있다고 언급합니다.

대체 모델

예시에서는 ViT를 사용하지만, 시스템은 Transformers 라이브러리에서 제공되는 다른 비전 모델로 확장할 수 있습니다, 예를 들어:

  • Swin Transformer
  • ConvNeXT
  • RegNet

이미지 유사도 워크플로우

유사한 이미지를 찾는 과정은 네 단계 파이프라인을 따릅니다:

  1. 후보 임베딩 추출: 후보 이미지 서브셋에서 임베딩을 추출하고 매트릭스에 저장합니다.
  2. 쿼리 임베딩 추출: 쿼리 이미지를 동일한 이미지 인코더에 통과시켜 임베딩을 생성합니다.
  3. 유사도 점수 계산: 시스템은 후보 임베딩 매트릭스를 순회하며 쿼리 임베딩과 각 후보 간의 코사인 유사도를 계산합니다.
  4. 랭킹: 결과를 유사도 점수 기준으로 정렬하고, 상위 k개의 식별자를 반환하여 가장 유사한 이미지를 가져옵니다.

이를 효율적으로 구현하기 위해 datasets 라이브러리의 map() 함수를 사용하여 후보 데이터셋 전체에 걸쳐 임베딩을 병렬로 계산합니다.

대규모 데이터셋에 대한 확장

수백만 장의 이미지를 다루는 대규모 프로덕션 환경에서는 768 차원의 원시 임베딩을 저장하는 것이 메모리와 계산 병목을 초래합니다. Hugging Face는 이를 최적화하기 위한 두 가지 주요 방법을 제안합니다:

차원 축소

임베딩의 의미를 잃지 않으면서 차원을 축소하면 속도와 검색 품질 사이의 균형을 맞출 수 있습니다. 이를 위해 랜덤 프로젝션 및 **지역 민감 해싱(LSH)**과 같은 기법을 권장합니다.

FAISS 통합

고성능 유사도 검색을 위해 datasets 라이브러리는 FAISS(Facebook AI Similarity Search)와의 직접 통합을 제공합니다. 이 통합은 인덱싱 과정을 단순화합니다:

  • add_faiss_index(): 이 메서드는 데이터셋 내 특정 임베딩 컬럼에 밀집 인덱스를 구축합니다.
  • get_nearest_examples(): 이 메서드는 쿼리 임베딩을 기준으로 가장 가까운 예시들을 효율적으로 검색할 수 있게 합니다.

이 통합을 통해 임베딩 매트릭스를 수동으로 순회할 필요가 없어지며, 시스템이 대규모 데이터셋으로 확장하면서도 낮은 지연 시간을 유지할 수 있습니다.

Sources