허깅페이스 트렌스포머 활용강좌, CLIP 전처리

딥러닝의 최신 트렌드 중 하나는 다양한 멀티모달(multi-modal) 모델의 출현입니다. 특히 OpenAI의 CLIP(Contrastive Language–Image Pretraining) 모델은 이미지와 텍스트 간의 관계를 학습하여 다양한 일을 수행할 수 있는 매우 강력한 방법론입니다. 이번 글에서는 허깅페이스(Hugging Face) 라이브러리를 통해 CLIP 모델을 활용하는 방법과 그 전처리 과정을 알아보겠습니다.

1. CLIP 모델 소개

CLIP 모델은 이미지와 텍스트 쌍을 동시에 학습하여, 이미지가 어떤 내용인지를 이해하고, 주어진 텍스트 설명과 그 이미지 간의 유사성을 측정할 수 있습니다. 이러한 접근 방식은 데이터셋을 선택할 필요 없이 비지도 학습을 통해 다양한 작업에 유연하게 적용될 수 있습니다.

2. CLIP 전처리 과정

CLIP 모델을 사용하기 위해서는 입력 이미지와 텍스트에 대한 적절한 전처리가 필요합니다. 전처리 과정은 다음과 같은 단계로 이루어집니다:

  1. 이미지 로드 및 크기 조정
  2. 이미지의 정규화
  3. 텍스트 토큰화

2.1 이미지 로드 및 크기 조정

모델에 입력할 이미지는 일정한 크기로 조정해야 합니다. 일반적으로 CLIP 모델은 224×224 크기의 이미지를 요구합니다. 이를 위해 파이썬의 PIL 라이브러리를 사용할 수 있습니다.

2.2 이미지 정규화

모델의 성능을 높이기 위해서는 이미지의 픽셀 값을 정규화해야 합니다. CLIP 모델은 일반적으로 mean=[0.48145466, 0.4578275, 0.40821073]std=[0.26862954, 0.26130258, 0.27577711]를 사용하여 정규화합니다.

2.3 텍스트 토큰화

텍스트는 미리 정의된 토크나이저를 사용하여 인코딩되어야 합니다. CLIP은 BPE(Byte Pair Encoding) 모델을 사용하므로, 이를 통해 텍스트를 정수 인덱스로 변환합니다.

3. 코드 예제

이제 위의 전처리 과정을 파이썬 코드로 구현해 보겠습니다. 이 예제에서는 허깅페이스의 transformers 라이브러리와 PIL 라이브러리를 사용합니다. 먼저 필요한 라이브러리를 설치합니다.

pip install transformers torch torchvision pillow

3.1 이미지 전처리 코드


from PIL import Image
import requests
from transformers import CLIPProcessor

# CLIPProcessor 불러오기
processor = CLIPProcessor.from_pretrained("openai/clip-vit-base-patch16")

# 이미지 URL
image_url = "https://example.com/image.jpg"  # 적절한 이미지 URL로 변경하세요.
image = Image.open(requests.get(image_url, stream=True).raw)

# 이미지를 전처리
inputs = processor(images=image, return_tensors="pt", padding=True)
print(inputs)
    

3.2 텍스트 전처리 코드


# 텍스트 입력
text = "A label describing the image"
text_inputs = processor(text=[text], return_tensors="pt", padding=True)
print(text_inputs)
    

4. 모델 예측

전처리가 완료된 이미지와 텍스트를 모델에 입력하여 예측을 수행할 수 있습니다. 허깅페이스의 CLIPModel을 사용하면 다음과 같이 예측을 진행할 수 있습니다.


from transformers import CLIPModel

# CLIP 모델 불러오기
model = CLIPModel.from_pretrained("openai/clip-vit-base-patch16")

# 이미지와 텍스트의 특징 추출
with torch.no_grad():
    outputs = model(**inputs, **text_inputs)

# 이미지와 텍스트 간의 유사도 계산
logits_per_image = outputs.logits_per_image  # (batch_size, text_length)
logits_per_text = outputs.logits_per_text      # (batch_size, image_length)
print(logits_per_image)
print(logits_per_text)
    

5. 결론

이번 포스트에서는 허깅페이스의 트랜스포머를 활용하여 CLIP 모델의 전처리 과정을 알아보았습니다. 이미지 및 텍스트의 전처리는 모델의 성능을 극대화하는 데 매우 중요한 단계입니다. 이제 여러분은 CLIP 모델을 활용하여 이미지 및 텍스트 간의 관계를 보다 잘 이해할 수 있기를 바랍니다.

6. 참고자료