반응형
멀티모달 AI(텍스트+이미지) 기초
1. 들어가며
지금까지는 텍스트 데이터를 중심으로 한 AI를 학습했습니다.
이번 강의에서는 멀티모달(Multimodal) AI를 소개합니다.
멀티모달 AI는 텍스트, 이미지, 음성 등 여러 종류의 데이터를 동시에 이해하고 처리할 수 있는 인공지능을 말합니다.
예를 들어, 사람이 그림을 보며 설명을 하거나, 글을 읽고 그림을 떠올릴 수 있는 것처럼, AI도 서로 다른 형태의 데이터를 연결해 이해할 수 있습니다.
2. 멀티모달 AI란 무엇인가?
- 모달리티(Modality): 데이터의 형태 (텍스트, 이미지, 음성 등)
- 멀티모달: 여러 모달리티를 동시에 학습·처리하는 것
대표적인 예시
- 이미지 + 텍스트 → 이미지 설명 생성 (Image Captioning)
- 텍스트 + 이미지 → 텍스트 기반 이미지 검색 (Text-to-Image Retrieval)
- 텍스트 → 이미지 → 생성 모델 (Text-to-Image Generation, 예: DALL·E, Stable Diffusion)
3. 왜 중요한가?
- 사람의 지능은 멀티모달적 → 우리는 시각, 청각, 언어를 동시에 활용
- AI 응용 확대 → 검색 엔진, 추천 시스템, 자율주행, 헬스케어
- 생성형 AI 확장 → 단순 텍스트 생성에서 이미지·음성까지 확장
4. 멀티모달 모델의 대표 구조
CLIP (Contrastive Language-Image Pretraining)
- OpenAI가 개발
- 텍스트와 이미지를 같은 임베딩 공간으로 매핑
- “고양이 사진”이라는 문장과 고양이 이미지를 벡터 공간에서 가까이 위치시킴
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 라이브러리를 활용해 손쉽게 실습 가능
반응형
'개발 창고 > AI' 카테고리의 다른 글
AI 프로젝트 기획과 응용 사례 정리 (0) | 2025.08.29 |
---|---|
트랜스포머 응용 – 텍스트 요약과 번역 (3) | 2025.08.27 |
GPT(Generative Pretrained Transformer) 기초 (2) | 2025.08.26 |
BERT 구조와 사전학습(Pretraining) 이해하기 (1) | 2025.08.25 |
트랜스포머(Transformer) 구조 이해하기 (0) | 2025.08.24 |