본문 바로가기
Category/AI

이미지 생성 모델 - Diffusion Model(확산 모델)

by Corinee 2024. 10. 25.
728x90
반응형

1. Diffusion Model(확산 모델)

Diffusion 모델은 이미지 생성 모델 중 하나로, 이미지에 점진적으로 가우시안 잡음(노이즈)을 추가한 후, 그 노이즈를 제거하면서 원래 이미지를 복원하는 과정을 반복하는 딥러닝 모델입니다. 이 모델은 딥러닝 분야에서 이미지와 텍스트 처리에 뛰어난 성능을 보여주고 있으며, Stable Diffusion과 같은 모델이 대표적인 예입니다.

  • Forward Process(정방향 과정): 데이터에 점진적으로 노이즈를 추가하는 과정입니다.
  • Reverse Process(역방향 과정): 추가된 노이즈를 역으로 제거하여 원래 이미지를 복원하는 과정입니다.

2. Forward Process(Diffusion Process)의 개념

Forward Process는 데이터에 점진적으로 노이즈를 추가하는 과정입니다. 이 과정은 총 T단계로 구성되며, 각 단계에서 노이즈가 더해지면서 데이터는 점점 흐릿하게 변형됩니다.

  • 초기 단계에서는 큰 노이즈를 추가해 데이터의 대략적인 분포를 파악하고, 후반 단계로 갈수록 작은 노이즈를 더해 세부적인 분포를 학습합니다.

3. Reverse Process(Reverse Diffusion Process)의 개념

Reverse Process는 Forward Process에서 생성된 노이즈가 가득한 데이터를 역으로 변환하여 원래 데이터를 복원하는 과정입니다. 이 과정 역시 총 T단계로 구성되며, 각 단계마다 노이즈를 제거하면서 이미지가 점점 선명해집니다.

  • 초기 단계에서는 큰 노이즈를 제거해 대략적인 이미지를 복원하고, 후반 단계로 갈수록 작은 노이즈를 제거해 세부적인 디테일을 복원합니다.

4. 노이즈를 추가하고 제거하는 이유?

노이즈를 추가하고 제거하는 과정은 다양한 데이터를 학습하는 데 유리합니다. 이렇게 하면 모델은 다양한 형태의 데이터를 처리할 수 있으며, 학습 과정이 더 안정적으로 이루어집니다. 이는 마치 사람이 그림을 그리듯, 밑그림부터 세밀한 디테일까지 단계별로 완성해 나가는 과정과 유사합니다.

5. Diffusion 모델의 장단점

Diffusion 모델의 장점은 고품질의 이미지를 생성할 수 있다는 점으로, 매우 자연스럽고 사실적인 이미지를 만들어냅니다. 또한 이미지 복원, 초해상도 이미지 생성, 텍스트 기반 이미지 생성 등 여러 분야에서 활용 가능하며, 다양한 응용성을 제공합니다. 기존의 GAN과 비교해 학습 과정이 더 안정적이어서 생성된 이미지의 품질이 일관된다는 점도 큰 장점입니다. 또한, 다양한 스타일의 이미지를 생성할 수 있어 유연성이 뛰어납니다. 그러나 단점으로는 모델을 학습하는 데 많은 시간과 컴퓨팅 자원이 필요하며, 모델 구조가 복잡해 이해하기 어려운 부분이 있습니다. 그리고 이미지 생성 속도가 상대적으로 느려 효율성 측면에서 다소 부족할 수 있습니다.

6. Diffusion Model의 활용 사례

  • Text-to-Image: 텍스트 설명에 맞는 이미지를 생성합니다.
  • Image-to-Image: 손상된 이미지를 복원하거나, 저해상도를 고해상도로 변환합니다.
  • 의료 이미지 분석: 의료 데이터를 분석해 질병 진단에 활용할 수 있습니다.
  • Text-to-Video: 텍스트 설명을 기반으로 이미지를 생성하는 기술을 확장하여 동영상을 생성할 수 있습니다.

7. Stable Diffusion Model 실습

Stable Diffusion을 사용하여 텍스트 기반 이미지를 생성할 수 있습니다. 아래 코드는 Google Colab에서 실행할 수 있는 간단한 예시입니다.

라이브러리 설치:

!pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu113
!pip install diffusers

이미지 생성 코드:

import os
import torch
from diffusers import StableDiffusionPipeline
import matplotlib.pyplot as plt

# Hugging Face 토큰 설정
os.environ['HF_TOKEN'] = "Hugging Face Token을 입력하세요."
hf_token = os.getenv('HF_TOKEN')

# Stable Diffusion 모델 로드
pipe = StableDiffusionPipeline.from_pretrained("stabilityai/stable-diffusion-2-1", use_auth_token=hf_token).to("cuda")

# 이미지 생성
prompt = "A serene landscape with mountains and a river during sunset"
image = pipe(prompt).images[0]

# 이미지 출력
plt.imshow(image)
plt.axis("off")  # 축 제거
plt.show()

# 이미지 저장
image.save("generated_image.png")

이 코드는 텍스트 프롬프트를 입력해 고해상도 이미지를 생성합니다. 위 예제에서는 "A serene landscape with mountains and a river during sunset"라는 프롬프트 내용에 맞는 이미지를 생성합니다.