1. 서론
최근 인공지능 분야에서의 발전은 눈부신 속도로 진행되고 있습니다. 특히, 컴퓨터 비전과 자연어 처리 분야에서는
딥러닝 모델이 놀라운 성능을 보여주고 있습니다. 그 중에서도 CLIP(Contrastive Language–Image Pre-Training) 모델은
텍스트와 이미지를 동시에 이해하고 처리할 수 있는 강력한 모델로 주목받고 있습니다. 본 강좌에서는 허깅페이스의
Transformers 라이브러리를 활용하여 CLIP 기반 사전학습 모델을 불러오고 사용하는 방법에 대해 상세히 설명하겠습니다.
2. CLIP 모델의 개념
CLIP 모델은 OpenAI에서 발표한 모델로, 텍스트와 이미지를 연결하여 이해할 수 있도록 훈련되었습니다.
이 모델은 대규모 데이터셋에서 텍스트와 이미지 쌍을 학습하여, 주어진 이미지에 대한 설명을 생성하거나
주어진 텍스트에 맞는 이미지를 선택하는 등의 작업을 수행할 수 있습니다.
CLIP의 핵심 아이디어는 “대조 학습”입니다. 이는 비슷한 내용의 텍스트와 이미지 쌍은 서로 가까운 벡터 공간에 위치하고,
내용이 다른 쌍은 멀리 떨어지도록 학습하는 방식입니다. 이를 통해 CLIP은 비지도 학습으로도 매우 뚜렷한
성능을 발휘할 수 있습니다.
3. 허깅페이스 Transformers 라이브러리
허깅페이스의 Transformers 라이브러리는 자연어 처리(NLP)와 관련된 여러 가지 모델을 간편하게 사용할 수 있도록
도와주는 라이브러리입니다. 이 라이브러리를 통해 다양한 사전학습 모델을 불러오고, 토큰화 및 데이터 전처리
등의 작업을 손쉽게 수행할 수 있습니다. CLIP 모델 역시 이 라이브러리에서 지원됩니다.
4. 환경 설정
CLIP 모델을 사용하기 위해서는 먼저 필요한 라이브러리를 설치해야 합니다. Python 환경에서
아래의 명령어를 통해 Transformers 라이브러리와 관련된 패키지를 설치할 수 있습니다.
pip install transformers torch torchvision
5. CLIP 모델 불러오기
이제 본격적으로 CLIP 모델을 불러오는 방법에 대해 설명하겠습니다. 라이브러리에서 사전학습된 CLIP 모델을
쉽게 사용할 수 있습니다. 아래의 Python 코드를 통해 CLIP 모델과 토크나이저를 불러오는 예제를
살펴보겠습니다.
from transformers import CLIPProcessor, CLIPModel
# CLIP 모델과 프로세서 불러오기
model = CLIPModel.from_pretrained('openai/clip-vit-base-patch16')
processor = CLIPProcessor.from_pretrained('openai/clip-vit-base-patch16')
5.1. 모델과 프로세서 설명
위 코드에서 `from_pretrained` 메소드를 사용하여 사전학습된 CLIP 모델과 프로세서를 불러옵니다. 여기서
프로세서는 입력된 텍스트와 이미지를 처리하여 모델이 이해할 수 있는 형식으로 변환하는 역할을 합니다.
즉, 이미지를 텐서 형태로 변환하고, 텍스트를 토큰화하여 모델이 입력으로 받아들일 수 있도록 합니다.
6. 이미지와 텍스트의 입력
CLIP 모델은 이미지와 텍스트 모두를 입력으로 받을 수 있습니다. 아래의 코드에서는 임의의 이미지를
다운로드하고, 해당 이미지에 대한 텍스트와 함께 모델에 입력하는 과정을 보여드립니다.
import requests
from PIL import Image
# 이미지 다운로드
url = "https://example.com/sample.jpg"
image = Image.open(requests.get(url, stream=True).raw)
# 텍스트 입력
text = "A sample image description"
6.1. 이미지 파일 준비하기
위 코드에서는 requests 라이브러리를 사용하여 이미지 파일을 다운로드합니다. 이후 Pillow 라이브러리를
사용하여 이미지를 열어줍니다. 실제로 사용할 이미지를 URL로 지정하여 다운로드할 수 있으며, 로컬에 저장된
이미지 파일을 사용해도 됩니다.
7. CLIP 모델의 추론
이제 모델에 이미지와 텍스트를 입력하여 추론을 진행해보겠습니다. 다음 코드를 통해 모델의
출력을 확인할 수 있습니다.
# 입력 데이터 전처리
inputs = processor(text=text, images=image, return_tensors="pt", padding=True)
# 모델 추론
outputs = model(**inputs)
# 유사도 점수 추출
logits_per_image = outputs.logits_per_image
probs = logits_per_image.softmax(dim=1)
print(f"예측 확률: {probs}")
7.1. 모델 추론 과정 설명
입력된 텍스트와 이미지에 대해서 `processor`를 사용하여 전처리를 진행한 후, 해당 정보를 model에 넣어 추론합니다.
그 결과로 반환된 logits를 softmax 함수를 통해 확률 분포로 변환하여 최종적인 예측 확률을 도출합니다.
8. 예제: CLIP 모델 활용하기
아래의 전체 코드를 통해 CLIP 모델을 실제로 어떻게 활용할 수 있는지 보여주겠습니다.
이 코드는 주어진 텍스트에 대한 이미지의 유사도를 평가합니다.
import requests
import torch
from PIL import Image
from transformers import CLIPProcessor, CLIPModel
# 모델과 프로세서 불러오기
model = CLIPModel.from_pretrained('openai/clip-vit-base-patch16')
processor = CLIPProcessor.from_pretrained('openai/clip-vit-base-patch16')
# 이미지 다운로드
url = "https://example.com/sample.jpg"
image = Image.open(requests.get(url, stream=True).raw)
# 텍스트 입력
text = "A sample image description"
# 입력 데이터 전처리
inputs = processor(text=text, images=image, return_tensors="pt", padding=True)
# 모델 추론
with torch.no_grad():
outputs = model(**inputs)
# 유사도 점수 추출
logits_per_image = outputs.logits_per_image
probs = logits_per_image.softmax(dim=1)
print(f"예측 확률: {probs}")
9. 결론
이번 강좌에서는 허깅페이스의 Transformers 라이브러리를 활용하여 CLIP 기반의 사전학습 모델을 불러오고,
이미지와 텍스트 쌍을 입력하여 유사도를 평가하는 방법에 대해 설명했습니다. CLIP 모델은 다양한 응용이
가능하며, 더욱 발전된 AI 시스템의 개발에 기여할 수 있습니다. 앞으로도 다양한 딥러닝 기술을
활용하여 인공지능의 가능성을 넓혀 나가시기 바랍니다.