본문 바로가기

명사 美 비격식 (무리 중에서) 아주 뛰어난[눈에 띄는] 사람[것]

이론

멀티모달 모델, OpenAI가 개발한 CLIP과 DALL·E

CLIP과 DALL·E는 멀티모달 모델

 

-CLIP (Contrastive Language–Image Pre-training)

OpenAI가 개발한 멀티모달 AI 모델

텍스트와 이미지를 함께 학습해 두 데이터의 의미를 연결한다. 이미지와 가장 잘 맞는 문장을 찾고, 문장과 가장 잘 맞는 이미지를 찾거나 이미지 검색, 이미지 분류, 이미지와 텍스트의 의미를 비교할 수 있다.

 

 

이미지와 텍스트를 동일한 의미공간 embedding space에 표현해 서로 의미적 유사성을 비교하는 멀티모달. 

             ┌────────────┐
이미지 ─────►│ Image Encoder │
             └─────┬──────┘
                   │
              이미지 특징 벡터
                   │
                   │   유사도 계산
                   ▼
              Cosine Similarity
                   ▲
                   │
             텍스트 특징 벡터
             ┌─────┴──────┐
텍스트 ─────►│ Text Encoder │
             └────────────┘

 

 

 

일반적인 대화영 모델이 아니라 텍스트와 이미지의 유사도를 계산하는 모델로 이미지와 문장이 얼마나 잘 맞는지 점수를 계산하는 것이 대표적인 사용법. 

from PIL import Image
import torch
from transformers import CLIPProcessor, CLIPModel

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

# 이미지
image = Image.open("cat.jpg")

# 비교할 문장들
texts = [
    "고양이",
    "강아지",
    "자동차",
    "비행기"
]

# 전처리
inputs = processor(
    text=texts,
    images=image,
    return_tensors="pt",
    padding=True
)

# 추론
outputs = model(**inputs)

# 이미지와 텍스트의 유사도
logits = outputs.logits_per_image
probs = logits.softmax(dim=1)

print(probs)

 

 

여러 이미지중 가장 알맞은 이미지를 찾거나

image1.jpg   -> 강아지
image2.jpg   -> 고양이
image3.jpg   -> 자동차
text = "검은 고양이가 앉아 있다."
images = [
    Image.open("image1.jpg"),
    Image.open("image2.jpg"),
    Image.open("image3.jpg")
]

inputs = processor(
    text=[text],
    images=images,
    return_tensors="pt",
    padding=True
)

outputs = model(**inputs)

scores = outputs.logits_per_text.softmax(dim=1)

print(scores)
image1.jpg : 0.01
image2.jpg : 0.98
image3.jpg : 0.01

 

 

학습을 다시 하지않아도 이미지를 분류할 수 있다. 이미지자동분류 zero-shot.

labels = [
    "고양이",
    "강아지",
    "호랑이",
    "사자"
]
예측 결과

고양이 : 98.8%
강아지 : 0.9%
호랑이 : 0.2%
사자 : 0.1%

 

 

 

 

 

 

 

 

-DALL·E

OpenAI가 개발한 텍스트 기반 이미지 생성(Text-to-Image) 멀티모달 모델

사용자가 자연어로 원하는 장면을 입력하면 그 내용을 바탕으로 새로운 이미지를 생성한다.

일러스트 제작, 광고 디자인, 콘텐츠 제작, 게임 및 영화 콘셉트 아트, 교육 자료 제작에 사용된다.

 

사용자가 텍스트를 입력하면 일러스트이미지로 생성한다. 

from openai import OpenAI

client = OpenAI()

result = client.images.generate(
    model="gpt-image-1",
    prompt="A cat wearing a space suit playing a piano on the moon.",
    size="1024x1024"
)

print(result.data[0].url)

 

 

아주간단하다!!!

자연어로 작성된 설명을 이해한뒤 그 내용을 반영한 새로운 이미지를 생성하는 멀티모델 ai