콘텐츠로 건너뛰기

OpenAI CLIP 및 Meta FAISS를 사용한 시맨틱 이미지 검색

소개

이 가이드는 OpenAI CLIP, Meta FAISS, Flask를 사용해 시맨틱 이미지 검색 엔진을 구축하는 방법을 안내합니다. CLIP의 강력한 시각 언어 임베딩과 FAISS의 효율적인 최인접 검색을 결합하면 자연어 쿼리를 사용하여 관련 이미지를 검색할 수 있는 완전한 기능의 웹 인터페이스를 만들 수 있습니다.

시맨틱 이미지 검색 시각적 미리보기

시맨틱 검색 결과가 포함된 플라스크 웹페이지 개요

작동 방식

  • CLIP은 이미지용 비전 인코더(예: ResNet 또는 ViT)와 언어용 텍스트 인코더(Transformer 기반)를 사용하여 두 가지를 동일한 멀티모달 임베딩 공간에 투사합니다. 이를 통해 코사인 유사도를 사용하여 텍스트와 이미지를 직접 비교할 수 있습니다.
  • FAISS (Facebook AI 유사성 검색)는 이미지 임베딩의 인덱스를 구축하여 주어진 쿼리에 가장 가까운 벡터를 빠르고 확장 가능하게 검색할 수 있습니다.
  • Flask는 자연어 쿼리를 제출하고 색인에서 의미적으로 일치하는 이미지를 표시할 수 있는 간단한 웹 인터페이스를 제공합니다.

이 아키텍처는 제로 샷 검색을 지원하므로 레이블이나 카테고리 없이도 이미지 데이터와 적절한 프롬프트만 있으면 됩니다.

Ultralytics Python 패키지를 사용한 시맨틱 이미지 검색

이미지 경로 경고

직접 만든 이미지를 사용하는 경우 이미지 디렉토리의 절대 경로를 제공해야 합니다. 그렇지 않으면 Flask의 파일 제공 제한으로 인해 이미지가 웹페이지에 표시되지 않을 수 있습니다.

from ultralytics import solutions

app = solutions.SearchApp(
    # data = "path/to/img/directory" # Optional, build search engine with your own images
    device="cpu"  # configure the device for processing i.e "cpu" or "cuda"
)

app.run(debug=False)  # You can also use `debug=True` argument for testing

VisualAISearch 클래스

이 클래스는 모든 백엔드 작업을 수행합니다:

  • 로컬 이미지에서 FAISS 인덱스를 로드하거나 빌드합니다.
  • CLIP을 사용하여 이미지 및 텍스트 임베딩을 추출합니다.
  • 코사인 유사도를 사용하여 유사도 검색을 수행합니다.

유사 이미지 검색

이미지 경로 경고

직접 만든 이미지를 사용하는 경우 이미지 디렉토리의 절대 경로를 제공해야 합니다. 그렇지 않으면 Flask의 파일 제공 제한으로 인해 이미지가 웹페이지에 표시되지 않을 수 있습니다.

from ultralytics import solutions

searcher = solutions.VisualAISearch(
    # data = "path/to/img/directory" # Optional, build search engine with your own images
    device="cuda"  # configure the device for processing i.e "cpu" or "cuda"
)

results = searcher("a dog sitting on a bench")

# Ranked Results:
#     - 000000546829.jpg | Similarity: 0.3269
#     - 000000549220.jpg | Similarity: 0.2899
#     - 000000517069.jpg | Similarity: 0.2761
#     - 000000029393.jpg | Similarity: 0.2742
#     - 000000534270.jpg | Similarity: 0.2680

VisualAISearch 매개변수

아래 표는 다음에 대해 사용 가능한 매개 변수를 간략하게 설명합니다. VisualAISearch:

인수 유형 기본값 설명
data str images 유사도 검색에 사용되는 이미지 디렉터리 경로입니다.
인수 유형 기본값 설명
device str None 추론할 장치를 지정합니다(예, cpu, cuda:0 또는 0). 사용자가 모델 실행을 위해 CPU, 특정 GPU, 또는 기타 컴퓨팅 장치 중에서 선택할 수 있습니다.

CLIP 및 FAISS를 통한 시맨틱 이미지 검색의 장점

CLIP과 FAISS로 나만의 시맨틱 이미지 검색 시스템을 구축하면 몇 가지 강력한 이점을 얻을 수 있습니다:

  1. 제로 샷 기능: 특정 데이터 세트에 대해 모델을 학습시킬 필요가 없습니다. CLIP의 제로 샷 학습 기능을 사용하면 자유 형식의 자연어를 사용하여 모든 이미지 데이터 세트에 대해 검색 쿼리를 수행할 수 있으므로 시간과 리소스를 모두 절약할 수 있습니다.

  2. 인간과 같은 이해력: 키워드 기반 검색 엔진과 달리 CLIP은 의미론적 맥락을 이해합니다. '자연 속에서 행복한 아이' 또는 '밤의 미래형 도시 스카이라인'과 같은 추상적, 감성적 또는 관계형 쿼리를 기반으로 이미지를 검색할 수 있습니다.

    OpenAI Clip 이미지 검색 워크플로

  3. 라벨이나 메타데이터가 필요 없습니다: 기존의 이미지 검색 시스템에는 신중하게 레이블이 지정된 데이터가 필요합니다. 이 방식은 원시 이미지만 있으면 됩니다. CLIP은 수동으로 주석을 달 필요 없이 임베딩을 생성합니다.

  4. 유연하고 확장 가능한 검색: FAISS는 대규모 데이터 세트에서도 가장 가까운 이웃을 빠르게 검색할 수 있습니다. 속도와 메모리에 최적화되어 있어 수천 개 또는 수백만 개의 임베딩이 있는 경우에도 실시간으로 응답할 수 있습니다.

    메타 FAISS 임베딩 벡터 구축 워크플로

  5. 교차 도메인 애플리케이션: 개인 사진 아카이브, 창의적 영감 도구, 제품 검색 엔진, 예술품 추천 시스템 등 다양한 도메인에 맞춰 최소한의 조정만으로 스택을 조정할 수 있습니다.

자주 묻는 질문

CLIP은 이미지와 텍스트를 어떻게 이해하나요?

CLIP (대조 언어 이미지 사전 학습)은 시각 정보와 언어 정보를 연결하는 방법을 학습하는 OpenAI에서 개발한 모델입니다. 이 모델은 자연어 캡션과 짝을 이루는 방대한 이미지 데이터 세트를 학습합니다. 이 훈련을 통해 이미지와 텍스트를 모두 공유 임베딩 공간에 매핑할 수 있으므로 벡터 유사성을 사용하여 직접 비교할 수 있습니다.

CLIP이 AI 작업에 강력한 이유는 무엇인가요?

CLIP의 가장 큰 장점은 일반화 능력입니다. 특정 레이블이나 작업에 대해서만 학습하는 것이 아니라 자연어 자체에서 학습합니다. 따라서 '제트스키를 타는 남자' 또는 '초현실적인 꿈의 풍경'과 같은 유연한 쿼리를 처리할 수 있으므로 재교육 없이도 분류부터 창의적인 의미 검색까지 모든 작업에 유용하게 사용할 수 있습니다.

FAISS (Facebook AI 유사도 검색)는 고차원 벡터를 매우 효율적으로 검색할 수 있도록 도와주는 툴킷입니다. CLIP이 이미지를 임베딩으로 변환하면, FAISS를 사용하면 텍스트 쿼리와 가장 가까운 일치 항목을 빠르고 쉽게 찾을 수 있어 실시간 이미지 검색에 적합합니다.

사용해야 하는 이유 Ultralytics Python 패키지를 사용하는 이유는 무엇인가요?

CLIP과 FAISS는 각각 OpenAI와 Meta에서 개발했지만, Ultralytics Python 패키지를 사용하면 두 줄의 워크플로에서 완전한 시맨틱 이미지 검색 파이프라인으로 간단하게 통합할 수 있습니다:

유사 이미지 검색

from ultralytics import solutions

searcher = solutions.VisualAISearch(
    # data = "path/to/img/directory" # Optional, build search engine with your own images
    device="cuda"  # configure the device for processing i.e "cpu" or "cuda"
)

results = searcher("a dog sitting on a bench")

# Ranked Results:
#     - 000000546829.jpg | Similarity: 0.3269
#     - 000000549220.jpg | Similarity: 0.2899
#     - 000000517069.jpg | Similarity: 0.2761
#     - 000000029393.jpg | Similarity: 0.2742
#     - 000000534270.jpg | Similarity: 0.2680

이 높은 수준의 구현이 처리합니다:

  • 클립 기반 이미지 및 텍스트 임베딩 생성.
  • FAISS 인덱스 생성 및 관리.
  • 코사인 유사도를 이용한 효율적인 의미 검색.
  • 디렉터리 기반 이미지 로딩 및 시각화.

이 앱의 프런트엔드를 사용자 지정할 수 있나요?

네, 물론 가능합니다. 현재 설정에서는 기본 HTML 프론트엔드와 함께 Flask를 사용하고 있지만, 자체 HTML로 바꾸거나 React, Vue 또는 다른 프론트엔드 프레임워크로 더 동적인 것을 구축할 수도 있습니다. Flask는 사용자 정의 인터페이스의 백엔드 API로 쉽게 사용할 수 있습니다.

정적 이미지 대신 동영상을 통해 검색할 수 있나요?

직접적으로는 아니지만 간단한 해결 방법이 있습니다. 동영상에서 개별 프레임을 추출하여(예: 1초마다 하나씩) 독립된 이미지로 처리한 다음 시스템에 공급할 수 있습니다. 이렇게 하면 검색 엔진이 동영상에서 시각적 순간을 의미론적으로 색인화할 수 있습니다.



📅14 일 전에 생성됨 ✏️ 12 일 전 업데이트됨

댓글

OSZAR »