개발 창고/AI

멀티모달 AI(텍스트+이미지) 기초

Royzero 2025. 8. 28. 23:28
반응형

멀티모달 AI(텍스트+이미지) 기초


1. 들어가며

지금까지는 텍스트 데이터를 중심으로 한 AI를 학습했습니다.
이번 강의에서는 멀티모달(Multimodal) AI를 소개합니다.

멀티모달 AI는 텍스트, 이미지, 음성 등 여러 종류의 데이터를 동시에 이해하고 처리할 수 있는 인공지능을 말합니다.
예를 들어, 사람이 그림을 보며 설명을 하거나, 글을 읽고 그림을 떠올릴 수 있는 것처럼, AI도 서로 다른 형태의 데이터를 연결해 이해할 수 있습니다.


2. 멀티모달 AI란 무엇인가?

  • 모달리티(Modality): 데이터의 형태 (텍스트, 이미지, 음성 등)
  • 멀티모달: 여러 모달리티를 동시에 학습·처리하는 것

대표적인 예시

  1. 이미지 + 텍스트 → 이미지 설명 생성 (Image Captioning)
  2. 텍스트 + 이미지 → 텍스트 기반 이미지 검색 (Text-to-Image Retrieval)
  3. 텍스트 → 이미지 → 생성 모델 (Text-to-Image Generation, 예: DALL·E, Stable Diffusion)

3. 왜 중요한가?

  • 사람의 지능은 멀티모달적 → 우리는 시각, 청각, 언어를 동시에 활용
  • AI 응용 확대 → 검색 엔진, 추천 시스템, 자율주행, 헬스케어
  • 생성형 AI 확장 → 단순 텍스트 생성에서 이미지·음성까지 확장

4. 멀티모달 모델의 대표 구조

  1. CLIP (Contrastive Language-Image Pretraining)

    • OpenAI가 개발
    • 텍스트와 이미지를 같은 임베딩 공간으로 매핑
    • “고양이 사진”이라는 문장과 고양이 이미지를 벡터 공간에서 가까이 위치시킴
  2. BLIP, Flamingo, Kosmos-1 등

    • 이미지 + 텍스트를 동시에 처리하는 고도화된 멀티모달 모델들

5. 실습: Hugging Face로 이미지 설명 생성하기

from transformers import BlipProcessor, BlipForConditionalGeneration
from PIL import Image
import requests

# 1. 이미지 불러오기
url = "https://huggingface.co/datasets/Narsil/image_dummy/raw/main/parrots.png"
image = Image.open(requests.get(url, stream=True).raw)

# 2. 모델과 프로세서 로드
processor = BlipProcessor.from_pretrained("Salesforce/blip-image-captioning-base")
model = BlipForConditionalGeneration.from_pretrained("Salesforce/blip-image-captioning-base")

# 3. 입력 처리
inputs = processor(images=image, return_tensors="pt")

# 4. 추론
out = model.generate(**inputs)
caption = processor.decode(out[0], skip_special_tokens=True)

print("이미지 설명:", caption)

예상 출력 예시:

이미지 설명: 두 마리 앵무새가 나뭇가지에 앉아 있다.

6. 또 다른 실습: 텍스트로 이미지 검색하기 (CLIP)

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

# 이미지 2장 불러오기
urls = [
    "https://huggingface.co/datasets/Narsil/image_dummy/raw/main/parrots.png",
    "https://huggingface.co/datasets/Narsil/image_dummy/raw/main/cheetah.png"
]
images = [Image.open(requests.get(u, stream=True).raw) for u in urls]

# CLIP 모델 로드
model = CLIPModel.from_pretrained("openai/clip-vit-base-patch32")
processor = CLIPProcessor.from_pretrained("openai/clip-vit-base-patch32")

# 텍스트와 이미지 임베딩 생성
text = ["a photo of parrots", "a photo of a cheetah"]
inputs = processor(text=text, images=images, return_tensors="pt", padding=True)

outputs = model(**inputs)
logits_per_image = outputs.logits_per_image
probs = logits_per_image.softmax(dim=1)

print("유사도 확률:", probs)

예상 출력 예시:

유사도 확률: tensor([[0.95, 0.05]])

→ 첫 번째 이미지(앵무새)가 "a photo of parrots"와 높은 유사도를 가짐을 확인할 수 있습니다.


7. 오늘의 정리

  • 멀티모달 AI는 텍스트, 이미지, 음성 등 여러 데이터를 동시에 이해하는 기술
  • 대표 모델: CLIP, BLIP
  • 응용: 이미지 설명 생성, 이미지 검색, 텍스트-이미지 생성
  • Hugging Face 라이브러리를 활용해 손쉽게 실습 가능
반응형