Programming, IT, Algorithm, Security
article thumbnail

 

 

요즘 Stable Diffusion 기반의 Novel AI가 큰 인기를 끌고 있다.

그래서 이에 대해 검색해보고 어떤 원리인지 이해하고 나서 정리를 해보았다.

이 글에서는 쉬운 이해를 위하여 자세한 수학적 원리나 매우 심도깊은 내용은 다루지 않을 것이다. 따라서 생략된 내용이 있을 수 있다.

Stable Diffusion 이란?

Stable Diffusion은 2022년에 발표된 text-to-image 딥러닝 모델이다.

 

이 모델은 Latent Diffusion 모델의 일종이고, 독일 뮌헨 대학교 Machine Vision & Learning Group (CompVis) 연구실의 "잠재 확산 모델을 이용한 고해상도 이미지 합성 연구"를 기반으로  Stability AI, CompVis LMU, Runway의 협동과 EleutherAI, LAION의 지원으로 만들어졌다고 한다. 또한, 이 모델은 오픈 소스로 공개되었고, 이는 github에서 찾아볼 수 있다.

 

또한, 기존 모델과는 다르게 8GB 정도의 적은 VRAM 만으로 구동이 가능하여 일반 소비자에게도 접근성이 뛰어나다.

 

아래 그래프를 보면 Latent Diffusion 모델의 Rate(bits/dim)가 제일 낮은 것을 알수 있다. 더 적은 비트 수로 더 많은 Dimension을 내포할 수 있다는 것이다.

Latent Diffusion Model의 Semantic compression

Stable Diffusion의 모델 구조

Stable Diffusion은 Latent Diffusion 모델이므로 당연히 구조는 Latent Diffusion 구조이다.

 

아래 그림은 Latent Diffusion 논문에 첨부되어 있는 모델의 구조도이다.

 

이미지 생성 중심으로 표현한 latent diffusion 구조

와, 한눈에 봤을때 이해가 되는가?

필자는 이해가 안가서 논문읽고도 검색을 몇 번이나 해보았다.

이제부터 내가 이해한 대로, 모델 구조를 설명해보도록 하겠다.

 

 

Latent Diffusion 모델의 기반인 Diffusion 모델의 원리 

인터넷에서 Stable Diffusion 원리를 검색해보면 아래와 같은 설명이 돌아다니는 것을 보았을 것이다.

Diffusion Model

이미지에 노이즈를 주고 이를 다시 역산하여 신경망에 노이즈 이미지에서 일반 이미지를 복원시키도록 학습시킨 후, 이 신경망에 노이즈만 들어있는 이미지와 적절한 힌트를 주면 해당 힌트에 맞는 이미지를 출력한다.

 

 

 

Diffusion Model Process

이건 Stable Diffusion, 즉 Latent Diffusion 모델에 대한 설명이라기 보다는 사실 Diffusion 모델에 대한 설명이다. 물론, Latent Diffusion의 기본적인 이미지 생성 원리도 이와 같지만 더 발전했다. Latent Diffusion도 마찬가지로 노이즈에서 복원하는 것은 같지만 이미지를 바로 복원하는 것이 아니라 Latent vector를 복원한 후, 이 Latent vector가 다시 VAE를 거쳐야 이미지가 되는 것이다. 

 

Latent Diffusion의 원리

일단 자세한 작동 원리를 이해하기 위해서는 Latent Diffusion이 어떤 요소로 이루어졌는지 알아야 한다. 따라서, 작동 원리를 구성 요소로 나누어서 설명하겠다. 아래 그림은 이를 3가지 구성요소로 나눈 그림이다

 

Latent Diffusion 더 간단한 전체 구조도

 

Text Encoder

 

Text Encoder

Latent Diffusion에서는 prompt 텍스트를 입력받고 그 텍스트에 맞는 이미지를 출력한다. 이를 수행하기 위해, Latent Diffuion 모델의 CLIP 이라는 Text Encoder가 필요하다. 모델은 영어와 같은 언어를 이해할 수 없기 때문에 Text Encoder가 필요한것이다. Text Encoder는 Tokenizer를 이용해서 문장에서 단어를 추출하여 숫자로 변환하고(이 과정을 tokenize 라고도 한다), 이 숫자를 latent vector의 형태인 text embedding로 만든다. text embedding으로 변환하는 이 과정을 거쳐야 비로소 text가 이미지를 생성하는 Unet에 Conditioning을 할 수 있게 되기 때문이다. (Unet과 Conditioning에 대해서는 다음 섹션에서 설명한다.)

 

 

Unet (+ Scheduler)

 

Text Conditioned Latent UNet

먼저 간략하게 설명하자면, Text Encoder에서 만들어진 embedding 은 U-net으로 전달된다. U-net 에서는 text embedding에 따라 조건화(Conditioning)된 채로 random latent vector를 n번 반복하여 denoise 하는 과정을 거치게 된다. 바로 여기서 랜덤한 노이즈에서 이미지를 생성하는 부분이 초반부에 설명했던 Diffusion 모델의 원리이다.

 

그리고 이 모델은 text embedding에 의하여 조건화 되었기 때문에 텍스트로 우리가 원하는 내용을 입력하여 이미지를 출력할 수 있는 것이다. 이 조건화 과정은 attention 등의 방법을 사용하여 매우 복잡한 과정을 거쳐서 이루어진다.

 

또, 위에서 random latent vector를 n번 반복하여 denoise 한다고 했는데, 이때 반복전에 어떤 방식(노이즈의 세기, 종류, 확률 편미분 방정식 이용 등)으로 처리하고 반복하느냐를 결정하는 것이 바로 scheduler의 역할이다. scheduler의 종류로는 여러가지가 있는데 DDPM, DDIM, PNDM, Euler, Euler a, DPM++ 등이 있다.  Stable diffusion을 직접 사용해본 사람이면 많이 봤을법한 스케줄러(샘플러)들이다. 스케줄러의 정확한 작동방식은 너무 다양하고 어려우므로 이 글에서는 생략하도록 하겠다.

 

그래서 위 과정을 전부 거치고 나면 저해상도의(위 예제에서는 64x64) latent vector 값이 생성되게 된다. 이 값은 마지막으로 VAE로 전달되게 된다.

 

 

U-net의 세부적인 원리는 이 글이 설명하고자 하는 범위를 넘어서므로 생략하겠다.

 

 

VAE (Variational Auto Encoder/Decoder)

VAE

이걸 이해하기 위해서는 VAE가 어떤 역할을 하는지를 알아야 한다. 간략하게 설명하면, VAE에서 encoder는 어떤 값을 수학적 원리를 통해 그 값의 특징을 추출하여 학습하고 decoder는 임의의 값 z(특징에 대한 latent vector)가 주어지면 그 값을 바탕으로 원래 데이터로 복원하는 역할을 한다. VAE는 그 자체로 하나의 모델이며, VAE는 미리 학습되어 준비된 것(Pretrained Model)을 사용한다.

 

Latent diffusion VAE

Stable diffusion의 이 부분에서 Latent Diffusion Model 이냐 그냥 Diffusion Model 이냐의 차이가 발생한다. Latent Diffusion 모델에서는 U-net에서 학습되고 이를 바탕으로 생성된 값 자체가 Diffusion 모델 처럼 이미지의 픽셀과 같은 원본 값이 들어간게 아니라 VAE에 의하여 Encode 되어 latent vector화 된 값을 U-net에 학습해 주었기 때문에 U-net에서 복원되어 나온 저해상도의 Latent vector를 VAE로 다시 Decode하여 고해상도의 그림으로 만들어 주는 것이다.

 

Latent Diffusion은 바로 이런 방법을 통해 더 효율적으로 고해상도의 이미지를 얻을 수 있게 된 것이다.

 

결론

결과적으로, Latent Diffusion 모델은 이전과는 달리 더 효율적으로 고해상도의 이미지를 생성할 수 있게 되었다. 이 점이 현재 Stable diffusion에 대한 관심이 급속도로 증가하게 된 원인이라고 할 수 있을거 같다. 현재에도 계속해서 새로운 논문, 기술들이 발표되고 실제로 적용되는 중이다. 앞으로의 발전이 더 기대될 수 밖에 없다. 

 

다음 글은 latent diffusion 모델의 파인튜닝, 드림부스에 대하여 써볼 예정이다.

Stable Diffusion 과 Latent Diffusion 모델 파인튜닝에 대한 추가적인 궁금증이 있을경우 오픈 카톡방 https://open.kakao.com/o/g3yx5sOe 에서 질문할 수 있다.

 

 

참고자료

 

 

profile

Programming, IT, Algorithm, Security

@PITAS

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!