Hugging Face 데이터셋을 사용한 이미지 검색

Hugging Face는 datasets 라이브러리, OpenAI의 CLIP 모델, 그리고 FAISS 라이브러리를 사용하여 이미지 검색 애플리케이션을 구축하는 워크플로를 시연했습니다. 이 접근 방식은 텍스트 프롬프트와 이미지를 공유 임베딩 공간으로 인코딩하여 의미 있는 이미지 검색을 수행할 수 있게 합니다.

datasets를 사용한 효율적인 이미지 데이터 처리

datasets 라이브러리는 이미지 데이터의 섭취와 처리를 간소화하는 전용 Image 피처 타입을 제공합니다. 이 피처는 절대 파일 경로, 바이트와 경로를 포함하는 딕셔너리, NumPy 배열, PIL 이미지 객체 등을 포함한 여러 입력 형식을 지원합니다.

데이터셋 생성을 간소화하기 위해 ImageFolder 로더는 표준 폴더 구조로 조직된 이미지 데이터셋을 직접 로드할 수 있게 합니다. 예를 들어, British Library의 "Digitised Books - Images identified as Embellishments. c. 1510 - c. 1900" 데이터셋은 load_dataset("imagefolder", ...)를 사용하여 zip 파일에서 직접 로드할 수 있습니다.

워크플로 이동성을 위한 Hugging Face Hub 활용

push_to_hub 메서드는 개발자가 처리된 데이터셋을 Hugging Face Hub에 업로드할 수 있게 합니다. 이 기능은 로컬 노트북에서 데이터 준비를 시작하고 Google Colab에서 GPU 가속 임베딩 생성을 수행하는 것과 같이 다양한 컴퓨팅 환경 간에 워크로드를 이동시키는 데 중요합니다.

embed_external_files=True (기본 동작)로 설정하면 이미지가 Hub의 데이터셋에 직접 임베딩되어, 원본 소스 파일을 다시 다운로드하지 않고도 다양한 세션에서 데이터셋이 이동 가능하고 접근 가능하도록 유지됩니다.

CLIP과 FAISS를 사용한 의미적 검색 구현

이미지 검색을 가능하게 하려면 이미지를 의미를 포착하는 밀집 벡터(임베딩)로 변환해야 합니다.

CLIP을 사용한 임베딩 생성

Hugging Face는 sentence_transformers 라이브러리를 사용하여 clip-ViT-B-32 모델을 구현합니다. CLIP(Contrastive Language-Image Pre-training)은 이미지와 텍스트의 공동 표현을 학습하도록 설계되어, 텍스트 프롬프트와 해당 이미지가 벡터 공간에서 유사한 위치에 매핑됨을 의미합니다.

FAISS를 사용한 효율적인 검색

임베딩이 생성되어 데이터셋의 열로 추가되면, datasets 라이브러리의 add_faiss_index 메서드를 사용하여 FAISS(Facebook AI Similarity Search) 인덱스를 생성합니다. 이 인덱스는 밀집 벡터의 대용량 컬렉션에 대해 고성능 유사도 검색을 가능하게 합니다.

get_nearest_examples 메서드를 사용하여 시스템은 텍스트 프롬프트를 받아 동일한 CLIP 모델로 인코딩하고, 벡터 공간에서 프롬프트의 임베딩과 가장 가까운 임베딩을 가진 이미지를 검색할 수 있습니다.

배포 고려 사항 및 윤리적 제약

Gradio 앱을 사용하여 이 기능을 검색 가능한 데모로 래핑할 수 있지만, Hugging Face는 CLIP 기반 검색 도구의 배포와 관련하여 중요한 경고를 강조합니다:

  • 모델 범위: CLIP 모델 카드는 배포된 사용 사례(상업적 또는 기타)가 현재 범위 밖이라고 명시합니다. 배포되지 않은 사용 사례는 고정된 클래스 분류에 대한 철저한 도메인 내 테스트 없이 권장되지 않습니다.
  • 성능 변동성: CLIP의 성능은 다양한 클래스 분류에 따라 크게 달라질 수 있어, 제한 없는 배포가 잠재적으로 해로울 수 있습니다.
  • 데이터셋 편향: 역사적 데이터셋(예: 19세기 책 삽화)을 사용할 때, 이미지가 식민지적 태도를 반영하거나 특정 그룹에 대한 부정적인 표현을 포함할 위험이 있습니다. 이러한 데이터와 임의의 텍스트 프롬프트를 결합하면 문제가 되는 출력이 발생할 수 있습니다.

Sources

관련