728x90
이미지와 언어의 경계를 허물다
오늘은 자연어 이미지 멀티모달 - 이미지 생성, Image Captioning 알아보자.
오늘의 배움 |
|
01. 자연어-이미지 멀티모달
- 정의: 텍스트와 이미지라는 서로 다른 형태(모달리티)의 데이터를 함께 처리하고 이해하는 AI 학습 방법
- 한 줄 요약: "보는 것과 읽는 것을 동시에 이해하고 연결하는 AI의 능력"
- 특징:
- 단일 모달리티보다 풍부한 정보 처리 가능
- 상호보완적 학습 효과
- 인간의 다감각적 인지 능력에 더 가까운 접근
- 필요성:
- 실제 세계의 정보는 대부분 여러 형태로 존재
- 이미지만으로 설명하기 어려운 맥락 정보 보완
- 텍스트만으로 표현하기 어려운 시각적 요소 보완
- 장점/단점:
- 장점: 표현력 향상, 복잡한 컨텍스트 이해 능력 증가, 현실적인 응용 가능성
- 단점: 학습 난이도 증가, 다양한 모달리티 간 정렬 문제, 계산 비용 증가
- 예시:
- 사진을 보고 설명문 작성(이미지 캡셔닝)
- 텍스트 설명으로 이미지 생성(DALL-E, Stable Diffusion)
- 사진 속 물체에 대한 질문에 답변(VQA)
02. 핵심 개념 정리
02-01. 멀티모달 학습
- 정의: 서로 다른 종류의 데이터(모달리티)를 함께 처리하고 학습하는 방법
- 작동 원리:
- 각 모달리티별 특화된 인코더로 특징 추출
- 추출된 특징들을 공통 잠재 공간(latent space)에 매핑
- 매핑된 특징들 간의 상호작용 및 정렬 학습
- 특징:
- 모달리티 간 상호보완적 정보 활용
- 단일 모달리티보다 풍부한 컨텍스트 이해
- 교차 모달 표현 학습(cross-modal representation learning)
- 장점/단점:
- 장점: 복합적 정보 처리, 현실 세계와 유사한 학습 방식
- 단점: 모달리티 간 정렬의 어려움, 계산 비용 증가
- 필요성:
- 실제 세계의 정보는 다양한 형태로 존재
- 단일 모달리티의 한계 극복
- 대표적인 활용 분야
- 이미지 캡셔닝 (Image Captioning): 시각 정보를 문장으로 표현
- 텍스트 기반 이미지 생성: 상상한 장면을 그림처럼 표현
- 이미지 기반 검색: 문장을 통해 유사한 이미지를 검색
- VQA (Visual Question Answering): 이미지에 대한 자연어 질문에 답변
- 예시:
# 간단한 멀티모달 모델 구조 예시 (PyTorch)
class MultimodalModel(nn.Module):
def __init__(self):
super(MultimodalModel, self).__init__()
# 이미지 인코더 (예: ResNet)
self.image_encoder = torchvision.models.resnet50(pretrained=True)
self.image_encoder.fc = nn.Linear(2048, 512) # 특징 차원 변환
# 텍스트 인코더 (예: BERT)
self.text_encoder = BertModel.from_pretrained('bert-base-uncased')
self.text_projection = nn.Linear(768, 512) # BERT 출력 차원 변환
# 멀티모달 퓨전 레이어
self.fusion = nn.Sequential(
nn.Linear(512 * 2, 512),
nn.ReLU(),
nn.Linear(512, 256)
)
# 작업별 출력 레이어 (예: 분류)
self.classifier = nn.Linear(256, num_classes)
def forward(self, images, text_inputs):
# 이미지 특징 추출
img_features = self.image_encoder(images)
# 텍스트 특징 추출
text_outputs = self.text_encoder(**text_inputs)
text_features = self.text_projection(text_outputs.pooler_output)
# 특징 결합 (concatenation)
combined = torch.cat([img_features, text_features], dim=1)
# 퓨전 및 분류
fused = self.fusion(combined)
output = self.classifier(fused)
return output
02-02. 이미지 캡셔닝
- 정의: 주어진 이미지의 내용을 자연어 문장으로 설명하는 기술
- 작동 원리:
- CNN으로 이미지에서 시각적 특징 추출
- RNN/LSTM으로 추출된 특징을 기반으로 순차적 문장 생성
- Attention 메커니즘으로 이미지의 중요 영역에 집중
- 특징:
- 시각적 인식과 언어 생성의 결합
- 엔코더-디코더 구조 활용
- 이미지의 다양한 요소를 언어적으로 해석
- 장점/단점:
- 장점: 이미지 검색 향상, 시각 장애인 접근성 개선
- 단점: 미묘한 시각적 차이 표현의 어려움, 주관적 해석 발생
- 필요성:
- 시각 데이터의 자동 색인화
- 접근성 향상
- 시각-언어 통합 AI 발전
- 예시:
# 간단한 이미지 캡셔닝 모델 구조 (PyTorch)
class ImageCaptioningModel(nn.Module):
def __init__(self, embed_size, hidden_size, vocab_size, num_layers=1):
super(ImageCaptioningModel, self).__init__()
# CNN 이미지 인코더
cnn = torchvision.models.resnet152(pretrained=True)
modules = list(cnn.children())[:-1] # 마지막 FC 레이어 제외
self.cnn = nn.Sequential(*modules)
# CNN 출력을 임베딩 크기로 변환
self.fc = nn.Linear(cnn.fc.in_features, embed_size)
# 단어 임베딩 레이어
self.embed = nn.Embedding(vocab_size, embed_size)
# LSTM 디코더
self.lstm = nn.LSTM(embed_size, hidden_size, num_layers, batch_first=True)
# 출력 레이어
self.linear = nn.Linear(hidden_size, vocab_size)
def forward(self, images, captions):
# 이미지 특징 추출
with torch.no_grad():
features = self.cnn(images)
features = features.reshape(features.size(0), -1)
features = self.fc(features)
# 캡션 임베딩
embeddings = self.embed(captions)
# 이미지 특징을 LSTM의 첫 입력으로 사용
embeddings = torch.cat((features.unsqueeze(1), embeddings), 1)
# LSTM으로 캡션 생성
lstm_out, _ = self.lstm(embeddings)
outputs = self.linear(lstm_out)
return outputs
02-03. 텍스트-이미지 생성
- 정의: 자연어 설명을 기반으로 해당 내용을 시각화한 이미지를 생성하는 기술
- 작동 원리:
- 텍스트 인코더로 문장의 의미적 특징 추출
- 생성 모델(GAN, Diffusion Model 등)을 통해 조건부 이미지 생성
- 텍스트-이미지 정렬성 향상을 위한 CLIP 등의 사전학습 모델 활용
- 특징:
- 창의적인 이미지 합성 능력
- 텍스트 프롬프트에 대한 높은 민감도
- 스타일과 내용의 분리 가능
- 장점/단점:
- 장점: 상상력을 시각화, 디자인 과정 자동화, 인간-AI 공동창작
- 단점: 텍스트 지시의 완벽한 반영 어려움, 윤리적 문제 존재
- 필요성:
- 창의적 표현 도구
- 디자인 프로토타이핑 가속화
- 콘텐츠 제작 민주화
- 예시:
# Stable Diffusion을 활용한 텍스트-이미지 생성 예시
from diffusers import StableDiffusionPipeline
import torch
# 모델 로드
model_id = "runwayml/stable-diffusion-v1-5"
pipe = StableDiffusionPipeline.from_pretrained(
model_id, torch_dtype=torch.float16
)
pipe = pipe.to("cuda")
# 이미지 생성
prompt = "우주 정거장에서 바라본 지구의 일출, 고해상도, 사실적인 스타일"
image = pipe(prompt).images[0]
image.save("space_sunrise.png")
02-04. CLIP
- 정의: 텍스트와 이미지를 동일한 벡터 공간에 매핑하여 의미적 유사성을 측정하는 모델
- 작동 원리:
- 텍스트와 이미지 인코더를 병렬로 학습
- 대조학습(Contrastive Learning)으로 관련 쌍은 가깝게, 무관한 쌍은 멀게 표현
- 대규모 텍스트-이미지 쌍 데이터셋으로 학습
- 특징:
- Zero-shot 추론 능력
- 다양한 시각-언어 태스크에 적용 가능
- 400M 텍스트-이미지 쌍으로 학습한 강력한 표현력
- 장점/단점:
- 장점: 새로운 클래스 인식 가능, 유연한 응용성, 풍부한 의미 포착
- 단점: 특정 도메인 지식 부족, 모호한 설명 처리 한계
- 필요성:
- 시각-언어 간 의미적 브리지 역할
- 데이터 효율적인 전이학습 가능
- 예시:
# CLIP을 활용한 이미지 검색 예시
import torch
from PIL import Image
import requests
from transformers import CLIPProcessor, CLIPModel
# 모델 로드
model = CLIPModel.from_pretrained("openai/clip-vit-base-patch32")
processor = CLIPProcessor.from_pretrained("openai/clip-vit-base-patch32")
# 이미지 준비
image_urls = [
"https://example.com/beach.jpg",
"https://example.com/mountain.jpg",
"https://example.com/city.jpg"
]
images = [Image.open(requests.get(url, stream=True).raw) for url in image_urls]
# 텍스트 쿼리
text = ["해변에서의 휴가", "도시의 야경", "산에서의 하이킹"]
# CLIP 처리
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)
02-05. DALL·E
- 정의: GPT 계열의 모델을 기반으로, 텍스트에서 이미지를 직접 생성하는 모델
- 주요 특징
- "두 마리 고양이가 무지개 앞에서 피아노를 연주하고 있다" 같은 문장을 시각화할 수 있는 높은 표현력
- DALL·E 2부터는 CLIP을 함께 사용하여 텍스트-이미지 정합도 향상
- 다양한 기능: 이미지 변형(Inpainting), 스타일 변화, 이어그리기
02-06. Stable Diffusion
- 정의: 오픈소스로 공개되어 누구나 자유롭게 사용하고 커스터마이징할 수 있는 텍스트 기반 이미지 생성 모델이다.
- 기술 구성
- Latent Diffusion Model (LDM): 이미지 전체가 아닌 잠재 공간(latent space)에서 디퓨전 수행 → 속도와 효율성 개선
- Autoencoder: 이미지를 latent 공간으로 인코딩/디코딩
- UNet: 노이즈 제거 예측
- Text Encoder: CLIP을 사용해 텍스트를 조건으로 반영
- 특징
- 로컬 GPU 환경에서 실행 가능
- Prompt engineering, Negative prompt, Style control 등 고급 기능 다수
02-07. DrawBench 평가 방식
- 정의: 텍스트 기반 이미지 생성 모델의 성능을 비교·평가하기 위한 기준
- 한 줄 설명: 다양한 유형의 문장을 제시하고, 각 모델이 얼마나 적절하고 창의적인 이미지를 생성했는지를 비교
- 주요 평가 지표
- 정확도: 텍스트와 이미지가 의미상 얼마나 잘 맞는가
- 다양성: 같은 프롬프트로 생성된 이미지의 다양성
- 현실성: 이미지가 얼마나 자연스럽고 사실적인가
- 창의성: 새로운 조합이나 독창적인 표현을 잘 수행하는가
- 비교 대상: Imagen (Google), Parti (Google Brain), DALL·E 2, Stable Diffusion 등
728x90
'Develop > AI' 카테고리의 다른 글
이미지 딥러닝 응용 - Style Transfer Learning, GAN 알아보자. (0) | 2025.03.25 |
---|---|
합성곱(CNN) 신경망 주요 모델 알아보자. (0) | 2025.03.23 |
합성곱(CNN) 신경망 알아보자. (0) | 2025.03.22 |
DPO를 알아보자. (0) | 2025.03.22 |
RLHF을 알아보자. (1) | 2025.03.22 |