🥇KDT '최초 대통령 표창' 수상, 모두의연구소의 신뢰받는 교육이 궁금하다면!
#인공지능 

Stable Diffusion으로 AI 그림 만들어보기

이미지 처리 분야에서 선두를 달리고 있는 Stable Diffusion 모델에 대해 다뤄봅니다. Diffusion 모델의 개념부터 이미지 생성까지 상세하게 설명하며, 최근에 등장한 Latent Diffusion 모델과 Fine Tuning 기법, 그리고 AI 주제 확장 등도 살펴보게 됩니다. 또한, Stable Diffusion 모델의 장단점에 대해서도 다루고, AIFFEL 과정을 통해 이러한 단점을 극복하는 방법도 제안합니다.

2023-02-23 | 정강민

최근 OpenAI에서 발표한 ChatGPT가 매우 핫 합니다. 더불어 인공지능에 대한 관심도 증가하고 있는데요. 이미지처리분야에서는 어떤 모델이 있을까요? 이 블로그에서는 이미지 처리분야에 선두를 달리고 있는 Stable Diffusion에 관해 다뤄볼까 합니다.

 

 

ChatGPT에게 Diffusion모델을 물어보았다


Diffusion Model은 다음과 같은 특징을 가지고 있습니다.

  1. 무한히 많은 점들을 이용하여 정의되며, 연속적인 시간에서 확률적으로 변화합니다.
  2. 분산은 무한대이며, 분포의 형태는 변하지 않습니다.
  3. 양의 값과 음의 값 모두를 가지며, 확률적으로 변동합니다.
  4. 정규분포와 유사하게 중심극한정리(Central limit theorem)가 성립합니다.

위와 같은 압축적인 답변을 하는데 수학적 개념과 용어가 어려우신분들도 끝까지 읽어봐주시기 바랍니다. 수식을 최대한 배제하고 직관적인 개념과 활용을 위주로 재미있게 이어가보려고합니다.

Diffusion의 우수한 이미지처리 성능

최근 딥러닝 분야에서 대표적인 이미지 생성 모델로 Autoencoder, GAN, 그리고 Diffusion 모델이 있습니다. 각 모델은 장단점을 가지고 있습니다.

예를 들어, Autoencoder는 학습 속도가 빠르지만 생성된 이미지의 품질이 낮다는 단점이 있습니다. GAN은 높은 품질의 이미지를 생성할 수 있지만, 원하는 다양한 결과를 얻기 어려운 단점이 있습니다. 반면 Diffusion 모델은 품질과 다양성 측면에서 모두 우수한 성능을 보입니다.

Diffusion 은 어떤 원리인데 좋은 성능을 보일까요?

Diffusion 모델은 기본 이미지(시간 t=0)에 ChatGPT가 앞서 설명한 1. 노이즈(랜덤 색상의 점)를 추가합니다. 2. 3. 4.의 원리로 노이즈를 추가해갑니다.

[Diffusion Model]

1000번 정도하면 퓨어한 노이즈(t=1000)를 얻을 수 있습니다. 그리고는 이미지 픽셀 값을 확률적으로 역전파하는 방식으로 셀수없이 반복하면서 다시 원본 t=0 시점의 사진을 구현합니다. 이런 과정을 거친 모델이 OpenAI에서 발표한 DALL-E2 모델입니다.

이미지 생성을 순차적인 단계로 진행하면서 생성된 이미지를 점차적으로 완성시키는 방식입니다. 이 과정에서 생성된 이미지는 초기에는 낮은 품질을 보이지만, 점차적으로 높은 품질로 수렴하게 됩니다.

또한 이미지 생성 과정에서 모델이 생성한 이미지를 이전 단계의 이미지로부터 구분할 수 있도록 하는 Diffusion process를 사용합니다. 이러한 과정을 통해 생성된 이미지의 다양성과 높은 품질을 유지할 수 있습니다.

 

이런 Diffusion에도 단점이..?

직관적으로, 매우 많은 픽셀을 찍어서 1000번 이상 왕복하는 것은 컴퓨팅 능력이 많이 필요한 작업입니다. Diffusion 모델은 이 작업을 수행하는 데 시간이 매우 오래 걸립니다. 그러나 최근에는 새로운 방법인 Latent Diffusion Model이 등장하여 다시 핫해졌습니다.

Latent Diffusion은 이미지 학습을 위해 첫 단계에서 VAEU-Net과 같은 인코딩 방법을 사용하여 이미지를 변환합니다. 이렇게 인코딩된 이미지는 잠재 변수(latent variable)로서 압축된 행렬로 표현됩니다.

[압축행렬 구현]

 

압축된 행렬에 노이즈를 더하고 복구하는 방법을 진행합니다. 이러한 방법으로인해 기존 Diffusion의 단점인 학습속도가 매우 개선됩니다.

[Latent Diffusion Model]

원본 이미지와 재구성된 이미지 사이에는 차이가 있을 수 있지만, 새로운 학습 방법인 Latent Diffusion Model은 학습 속도를 향상시켜 더 많은 이미지를 더 적은 비용으로 학습할 수 있게 되었습니다. 이런 점은 AI 학습의 품질을 향상시키는 데 기여합니다.


Stablilty.ai 에서는 Latent Diffusion Model과 고품질 이미지 데이터셋인 LAION을 활용하여 엄청난 퀄리티를 산출해내는 모델을 발표했습니다. 모델 훈련에 $600,000의 비용이 들었으며, 상업적으로도 이용 가능하며, 오픈소스로 공개했습니다. 이름하여 Stable Diffusion입니다.

 

 

Diffusion의 5분 마술, 색연필 그림이 웹툰 그림으로

한 블로그에서 딸이 그린 그림을 Diffusion 모델을 사용하여 보완하였는데 많은 이목을 끌고 있습니다.

Diffusion

아래 링크를 클릭하시면 코랩에서 자녀분들도 웹툰 그림작가 수준의 이미지를 산출할 수 있습니다. 이렇게 글쓴이의 어린 딸이 이미 웹툰 그림작가 수준의 작품을 만들어냈으니, 우리도 함께 도전해보는 것은 어떨까요? 링크를 클릭하시면 쉽고 간편하게 실습해보실 수 있습니다.

Stable Diffusion 실습해보기

실제로 우리는 코드 몇 줄로 구현이 가능합니다.  Click !!

  • 메뉴 → 런타임 → 런타임유형변경 → GPU를 해주셔야 에러없이 진행됩니다.
!pip install --upgrade -qq git+https://github.com/huggingface/diffusers.git transformers accelerate

모듈 불러옵니다.

import torch
from diffusers import StableDiffusionPipeline

# make sure you're logged in with `huggingface-cli login`
pipe = StableDiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v1-4", revision="fp16", torch_dtype=torch.float16)
pipe = pipe.to("cuda")

생성하고 싶은 글을 적어보세요.(영어로)

prompt = str(input()) # 영어로 창의적인 글을 입력해보세요
#ex)a photograph of an monkey riding a horse
#prompt(프롬프트): 이미지를 생성하기 위한 텍스트
image = pipe(prompt).images[0]  # image here is in [PIL format](<https://pillow.readthedocs.io/en/stable/>)

image.save(f"astronaut_rides_horse.png")

# or if you're in a google colab you can directly display it with 
image
image = pipe(prompt).images[0]  
# image here is in [PIL format](<https://pillow.readthedocs.io/en/stable/>)

image.save(f"astronaut_rides_horse.png")

# or if you're in a google colab you can directly display it with 
image

다들 이미지를 생성해보셨나요? 어떻게 이렇게 코드 몇줄로 이미지를 생성할 수 있을까요?

 

 

웹툰, 애니메이션 등 주제 확장이 쉬운 Stable Diffusion

Stable Diffusion의 장점으로는 AI 주제 변경이 용이하다는 것이 있습니다. 미리 학습된 기계 학습 모델을 새로운 데이터셋에 맞게 조정하여 높은 성능을 내는 Fine Tuning기법을 적용하면 주제확장이 용의합니다. 추가적인 사진을 포함하여 모델을 학습시키면 해당 주제를 생성하는 데 이용할 수 있습니다.

이런 방식으로 대량의 애니메이션 이미지를 추가적으로 학습시켜 상업적인 서비스를 제공하는 곳이 있습니다.
바로 Novel AI 입니다. 월 10달러에 서비스 중입니다.

산출물을 보면 누구나 애니메이션 작가가 될 수 있겠다는 생각이 들지 않나요?

 

 

StableDiffusion Model의 단점

DIffusion으로 생성한 그림

DIffusion으로 생성한 그림

이런 강력한 Stable Diffusion에도 단점이 존재합니다. 첫 번째로, 생성된 이미지를 자세히 보면 어색한 음식표현(그림2), 어색한 백미러 위치(그림3) 등 디테일에서 떨어지는 경우가 있습니다. 두 번째로, 생성된 이미지의 퀄리티가 고퀄리티와 저퀄리티가 섞여 있는 것이 보입니다. 그래서 선별작업이 필요합니다. 세 번째로, 모델을 개선하려면 사람이 어느정도 코드를 작성해야 합니다.

이러한 단점들은 저희 AIFFEL 과정을 수강하면 충분히 극복할 수 있는 수준이네요.
이상 StableDiffusion이였습니다!

참고자료
참고자료 : 우리딸아이 손봐줘