Search
Login
🎨

Generative AI, 생성 모델 톺아보기(3) - Stable Diffusion

Created
2023/03/04
Editor
유현
유현

INTRO

안녕하세요 Generative AI 시리즈의 세 번째 이야기로 찾아왔습니다.
이번 아티클에서는 현재 이미지 생성 분야에서 아주 핫한 오픈소스 Text-to-Image 모델인 Stable Diffusion에 대해서 알아보겠습니다.
요즘 인공지능이 그린 미술 작품들이 많은 화제가 되고 있습니다. 2022년 9월에는 미국 콜로라도 주립 박람회의 미술전에서 1등을 수상한 그림이 알고 보니 AI가 그린 것으로 밝혀져 많은 관심을 받기도 했었죠.
제이슨 앨런(Jason M. Allen), <스페이스 오페라 극장>
바로 이 그림인데요. 르네상스 시대의 분위기도 나면서 조금은 초현실적인 느낌도 나는, 아름답고 환상적인 그림으로 보입니다. 앞서 말씀드렸듯이 이 그림은 AI가 그린 것으로, 프롬프트에 명령어를 입력하면 이미지를 생성해 주는 AI 모델 중 하나인 미드저니(Midjourney)를 이용한 것입니다.
단 한 줄의 텍스트와 잠깐의 기다림으로 이렇게 멋진 작품을 완성할 수 있다니, 정말 놀랍지 않나요? 요새 인공지능이 만들어 낸 그림들을 보고 있으면 정말이지 요술 지팡이가 따로 없습니다. 현재로서 ‘인공지능의 창작성’이라는 화두가 가장 잘 어울리는 분야가 바로 이 Text-to-Image 분야가 아닐까 하는 생각도 드네요.
Text-to-Image 모델에는 요즘 항상 함께 언급되는 3대장이 있습니다. 바로 앞서 언급한 미드저니와 더불어 DALL-E 2 그리고 Stable Diffusion입니다. 이 중에서도 오늘 살펴볼 Stable Diffusion은 오픈 소스로 출시되어, 텍스트 기반 이미지 생성 모델을 누구나 사용하고 응용할 수 있게끔 접근성을 높였다는 점에서 아주 큰 의의를 가지고 있습니다.
이제 “야, 너두 AI로 그림 그릴 수 있어!”를 외치며 느슨해진 미술계에 긴장감을 주고 있는 Stable Diffusion에 대해 자세히 알아봅시다
[ 목차 ]

1. 진입장벽은 낮추고, 효율은 끌어올리다

앞서 말씀드렸듯이, Text-to-Image 모델이란 사용자가 프롬프트에 입력한 텍스트를 기반으로 새로운 이미지를 만들어내는 생성 AI의 한 종류입니다. 잠시 Text-to-Image 모델의 변천사를 간략하게 살펴볼까요?
Stable Diffusion이 나오기 한참 전인 2021년 1월, OpenAI에서 DALL-E라는 이름의 Text-to-Image 모델을 발표했습니다. 2020년 텍스트 생성 모델 GPT-3가 대성공을 거둔 후 내놓은 GPT의 이미지 생성 버전이었죠. 그리고 2022년 4월, DALL-E의 후속작인 DALL-E 2가 공개되었습니다. GPT 기반이었던 전작과 달리 Diffusion 모델을 적용해 많은 성능 향상을 이뤘습니다. 같은 해 5월, 이에 질세라 구글에서 Imagen이라는 이름의 고성능 Text-to-Image 모델을 발표했죠. 그리고 두 달 뒤인 2022년 7월에는, 앞서 보았던 멋진 그림의 주인공 Midjourney가 탄생했습니다.
DALL-E가 많은 이들에게 신기함을 안겨주었다면, 이후 공개된 DALL-E 2와 Imagen 그리고 Midjourney는 놀라움 그 자체였습니다. 인공지능의 그림 실력이 인간의 능력을 넘어서는 날이 머지않았음을 느끼게 해 주었죠.
그러나, 이 모델들에게는 공통적으로 아쉬운 점이 한 가지 있었습니다. 바로 ‘접근성’이었죠. 이 모델들은 모두 오픈소스로 공개가 되지 않았습니다. 또한 소수의 사람들만 사용 가능하거나, 일정 크레딧 이상 사용하기 위해서는 유료 결제를 해야 하는 등의 제한이 있었습니다.
이러한 상황에서, 2022년 8월 22일 Stability.ai 사의 파격적인 오픈소스 Text-to-Image 모델이 공개되었고, 그 모델이 바로 오늘의 주제인 Stable Diffusion입니다!
Stable Diffusion이 모델, 코드 등을 모두 공개한 오픈소스 모델이라는 점이 왜 파격적인 걸까요?
DALL-E 2, Imagen, Midjourney와 같이 규모가 큰 모델의 학습 과정에는 많은 수의 GPU를 포함해 천문학적인 비용이 들어갑니다. 때문에 이렇게 많은 비용이 들어간 모델을 쉽사리 공개하기란 어려운 일이죠.
그러나 Stable Diffusion은, 마찬가지로 엄청나게 많은 리소스를 들여 학습했음에도 이것을 누구나 사용할 수 있도록 모두 공개했습니다. 실제로 깃허브 주소를 통해 코드를 내려받을 수 있으며, 파이썬 모듈을 이용해 코랩 환경에서 코드 몇 줄로도 이미지를 생성할 수 있습니다.
오픈 소스라는 특성으로 인해 누구나 고성능의 이미지 생성 AI를 사용할 수 있게 되었고, 이를 통해 수많은 응용 모델과 서비스의 탄생 가능성까지 내비치고 있으니, 정말 파격적인 모델이라고 할 수 있을 것 같습니다.
제아무리 오픈소스라고 해도, 일반 사용자의 컴퓨팅 환경에서 고성능 모델을 사용하기에는 부담이 있지 않을까요?
Stable Diffusion은 오픈 소스로 진입 장벽을 허물고, 높은 효율성으로 일반 사용자의 접근성을 극대화했습니다. 기존의 대형 모델들은 좋은 성능을 내지만 모델에 실제 데이터를 넣어 작업을 수행하는 Inference 과정에서 너무 많은 컴퓨팅 자원이 들어간다는 단점이 있었습니다.
그러나 Stable Diffusion은 일반 GPU 1개로 구성된 그리 높지 않은 성능의 환경에서도 충분히 Inference 가능할 정도의 효율성을 보인다는 연구 결과가 있습니다. Stable Diffusion의 오픈소스 출시가 누구나 사용 가능함을 의미한다면, 높은 효율성은 이를 누구나 ‘쉽게’ 사용 가능하도록 이끌었다고 할 수 있을 것입니다.

2. Diffusion 모델, 그게 뭔데?

Stable Diffusion에 대해 이해하기 위해서는, 먼저 Diffusion 모델에 대해 알아야 합니다. 그 이름에서도 알 수 있듯이 Diffusion이라는 생성 모델을 기반으로 하기 때문이죠.
Diffusion 이란 무엇일까요? 물이 담긴 컵에 잉크를 한 방울 떨어트렸다고 가정해 봅시다. 잉크가 물에 닿은 순간부터 퍼져나가 구석구석 번질 것입니다. 우리는 이것을 확산, 즉 Diffusion이라고 부릅니다.
그렇다면, 여기서 잉크가 물에 확산되기 전의 상황으로 되돌릴 수 있을까요? Diffusion 모델은 바로 이 지점으로부터 착안되었습니다. “잉크가 번져 형체를 알아볼 수 없게 된 이미지를 받아 차근차근 되짚어가며 최대한 원본에 가깝게 복원하는 것을 학습시킨다면, 그 후에 원본을 알 수 없는 이미지로부터 출발해도 약간의 힌트만 있다면 원본에 가깝게 복원할 수 있지 않을까?”라는 아이디어인 것이죠.
Note 주목할 만한 부분은 ‘원본에 가깝게 복원’한다는 것입니다. 여기서 ‘원본 데이터를 근사하는’, 즉 ‘충분히 있을 법하지만 새로운’ 이미지가 생성되는 것입니다. 생성 모델을 관통하는 핵심 개념이라고도 할 수 있죠.
그래서 Diffusion 모델은 학습 과정에서 이미지에 노이즈를 섞어 일부러 형체를 알아볼 수 없게 만듭니다. 그런 다음 완전히 노이즈로 뒤덮인 이미지를 역연산을 통해 한 단계씩 복원해나가는 것을 학습하죠. 즉, ‘시작 지점으로 되돌아가는 법’을 알아가는 것이 Diffusion 모델의 학습 목표입니다.
그리고 이 목표는 이미지에 노이즈를 추가하는 Forward(Diffusion) Process와 노이즈로부터 이미지를 복원하는 Reverse Process, 이 두 가지 프로세스를 통해 이루어집니다.

2.1 이미지에 노이즈 끼얹기: Forward Process

먼저, Forward Process의 목표는 이미지에 점진적으로 노이즈를 추가하는 것입니다. 점진적이라는 말은 즉, 잘게 나눠진 Time Step을 거치며 노이즈를 조금씩 주입한다는 뜻인데요.
Diffusion 모델을 소개한 논문 <Denoising Diffusion Probabilistic Models>에서는 이미지에 노이즈가 주입되지 않은 시점을 x0x_0, 이 이미지가 완전한 노이즈가 된 시점을 xTx_T로 표현했습니다. Forward Process를 다시 말한다면, 이미지(x0x_0)를 노이즈(xTx_T)로 만들어가는 과정이라고 할 수 있겠네요.
이제 이 과정을 일반화해 각 단계에서 어떤 일이 일어나는지 살펴보겠습니다. x0x_0xTx_T 사이의 어떤 시점 tt에 대해 xt1x_{t-1}에서 xtx_t로 가는 과정을 위 식과 같이 나타낼 수 있습니다.
조건부 확률을 사용해 xt1x_{t-1}이 주어졌을 때 xtx_t의 Gaussian 분포를 나타내었는데요. 이때 이전 시점 xt1x_{t-1}1βt\sqrt{1-\beta_t}를 곱한 것이 다음 시점 xtx_t의 평균이 되고, IIβt\beta_t를 곱해 분산이 됨으로써 노이즈가 추가됩니다. 여기서 βt\beta_t 가 노이즈를 결정짓는 상수로, 이미지가 노이즈에 가까워질수록 커집니다 (β0<β1<...<βT\beta_0<\beta_1<...<\beta_T).
따라서 Forward Process의 전체 과정을 식으로 나타내면 다음과 같습니다.

2.2 장인 정신으로 이미지 복원하기: Reverse Process

이제 Reverse Process를 살펴보겠습니다. Reverse Process의 목표는 노이즈(xTx_T)로부터 이미지(x0x_0)를 복원하는 것입니다. 이 과정을 통해 최종적으로 이미지가 생성되므로, Reverse Process가 곧 생성 모델이라고 할 수 있습니다.
이 과정에서는 Forward Process와 반대로 xTx_Tx0x_0 사이의 어떤 시점 tt에 대해 xtx_t에서 xt1x_{t-1}로 가는 과정을 살펴봐야겠죠? 다음과 같은 식으로 나타낼 수 있습니다.
이번에는 조건부 확률을 사용해 xtx_t가 주어졌을 때 xt1x_{t-1}의 분포를 표현했습니다. 마찬가지로 이전 단계인 xtx_t를 이용해 다음 단계인 xt1x_{t-1}의 평균과 분산을 나타내었네요. 여기서 μθ\mu_\thetaΣθ\Sigma_\theta는 학습을 통해 최적화되어야 할 파라미터입니다. 따라서 Reverse Process의 전체 과정을 식으로 표현하면 다음과 같습니다.
이렇게 노이즈를 조금씩 걷어내면서 이미지를 복원하는 과정을 Denoising이라고 합니다. 최종적으로 이 Reverse Process가 학습을 마치면, 이제 랜덤 한 노이즈를 입력으로 받아 Denoising을 통해 원하는 이미지를 생성해 내는 모델이 학습된 것입니다!

3. Stable Diffusion의 3요소

이제 Diffusion 모델을 기반으로 한 Stable Diffusion의 작동 원리를 알아봅시다. Stable Diffusion은 크게 세 부분으로 나눌 수 있습니다.
Stable Diffusion의 3가지 구성요소
1.
사용자가 프롬프트에 입력한 텍스트를 벡터로 임베딩하는 텍스트 인코더
2.
텍스트 임베딩 정보를 받아 그에 맞는 이미지 정보를 생성하는 이미지 생성기
3.
이 정보를 픽셀로 변환해 실제 이미지를 생성하는 이미지 디코더
이 3요소를 설명하기에 앞서, Stable Diffusion은 픽셀 공간에서 작동하는 기존 Diffusion 모델과 달리 Latent Space라고 하는 이미지 정보 공간에서 작동합니다. Stable Diffusion을 Diffusion 모델 중에서도 Latent Diffusion 모델이라고 부르는 이유이죠.
Latent Space란, 잠재 공간 혹은 임베딩 공간으로 불리는 것으로, 데이터를 몇 가지 특성에 따라 분류해놓은 다차원의 공간입니다. 이 Latent Space에서 작업하게 되면 이미지를 압축해서 표현할 수 있기 때문에 다루는 데이터의 크기가 훨씬 작아집니다.
기존의 픽셀 기반 계산 방식은 이미지의 크기가 1024x1024x3 픽셀만 되어도 엄청난 계산량을 필요로 하기 때문에 속도가 느리다는 단점이 있었지만, Stable Diffusion은 Latent Space를 도입해 압축된 이미지 표현을 사용하기 때문에 품질과 더불어 빠른 속도를 장점으로 내세울 수 있게 된 것이죠.
Stable Diffusion의 구조

3.1 텍스트 인코더 CLIP

먼저, 사용자가 그려달라고 요청한 텍스트를 이해해야 하겠죠? 첫 번째는 CLIP이라는 이름의 텍스트 인코더입니다. 이 텍스트 인코더가 하는 일은 입력으로 들어온 데이터를 Latent Vector로 임베딩하는 것입니다.
예를 들어 “An astronaut riding a horse”가 Input으로 들어왔다면, 이 텍스트 인코더가 단어 임베딩을 진행해 Astronaut, Horse 등의 토큰을 Latent Space에 위치시키는 식입니다. 따라서 이 단계의 출력은 임베딩된 Latent 벡터가 됩니다.

3.2 이미지 생성기 UNet과 Scheduler

두 번째는 이미지 생성을 담당하는 부분입니다. Stable Diffusion의 핵심이라고도 할 수 있죠. 이 부분에서 앞서 살펴봤던 Diffusion 모델의 원리가 쓰입니다.
이전 과정인 텍스트 인코더에서 만들어진 임베딩 벡터가 U자 모양의 UNet이라고 하는 네트워크 구조로 전달됩니다. UNet에서는 이 텍스트 임베딩에 따라 조건화(Conditioning) 된 상태로 랜덤 노이즈, 즉 Random Latent Vector를 Denoise 하는 과정을 반복합니다. 여기서 텍스트 임베딩을 이용한 조건화를 통해 텍스트의 내용과 맞는 방향으로 Denoise 되면서 이미지가 생성되는 것이죠.
또한 Denoising의 각 단계에서 추가될 노이즈를 조절해 주는 역할로 Scheduler가 사용됩니다. UNet과 Scheduler가 한 몸처럼 움직이며 조건화된 정보에 따라 Denoising 과정을 반복하는 것이죠.
최종적으로 UNet과 Scheduler로 구성된 이 과정을 거치고 나면, 생성할 이미지 정보를 담고 있는 저해상도의 Latent 벡터가 생성됩니다. 따라서 이 단계의 입력은 텍스트 임베딩 벡터와 랜덤 노이즈이고, 출력은 이미지의 정보를 담은 Latent 벡터입니다.

3.3 이미지 디코더 VAE

이미지 생성기에서 생성된 데이터의 형태가 Pixel 형태가 아닌 Latent 벡터 형태이기 때문에, 이를 실제 이미지로 만들기 위해 Pixel로 변환하는 Decode 과정이 필요합니다. 여기서 VAE(Variational Auto Encoder/Decoder)라고 하는 네트워크가 쓰입니다.
VAE는 들어온 입력을 바탕으로 Encoder와 Decoder 구조를 통해 새로운 데이터를 만들어내는 또 다른 생성 모델인데요. 여기서는 이 VAE의 Decoder 구조를 사용합니다. 이를 통해 최종적으로 Latent 벡터를 우리가 원하는 사이즈의 이미지로 Decode 함으로써 생성된 이미지를 얻을 수 있는 것입니다.

4. Stable Diffusion, 나도 한 번 써보고 싶다면?

백문이 불여일견이죠. 마지막으로 Stable Diffusion을 이용해 직접 이미지를 생성할 수 있는 웹사이트를 소개하겠습니다.

4.1 DreamStudio

DreamStudio는 Stable Diffusion을 개발한 Stability.ai 사에서 내놓은 공식 서비스입니다. 처음 가입하면 제공되는 200 크레딧을 소진하면 유료로 전환되는데요, 이미지 한 장 당 0.2 크레딧이므로 약 1,000장의 이미지를 무료로 생성할 수 있습니다.
사용 방법은 간단합니다. 가입 후 보이는 메인 페이지 하단의 프롬프트에 생성하고자 하는 이미지에 대한 설명을 작성하면 됩니다. 다음과 같은 프롬프트를 입력해 이미지를 생성해 보았습니다.
>> Deep dive into the world of Artificial Intelligence, concept art, matte painting, HQ, 4k
DreamStudio의 가장 큰 장점은 이미지 생성 시간이 5초 정도로 매우 짧다는 것입니다. 메인 페이지 우측의 기능들을 통해 생성할 이미지의 크기, 수 그리고 모델의 버전까지도 설정할 수 있어 조금 더 디테일한 이미지 생성이 가능하니 참고하시기 바랍니다.

4.2 HuggingFace의 Web Demo

두 번째로, HuggingFace에서 제공하는 Web Demo입니다. 현재 Stable Diffusion의 최신 버전인 2.1이 적용되었는데요, 이 HuggingFace Demo는 가입이 필요 없으며, 완전히 무료입니다.
사용 방법은 마찬가지로 메인 페이지 중앙에 있는 프롬프트에 생성하고자 하는 이미지를 설명하는 텍스트를 입력하는 것입니다.
다만, HuggingFace의 Demo에는 프롬프트가 하나 더 있는데요. 두 번째 프롬프트는 Negative Prompt로, 이미지 생성에 포함되지 않았으면 하는 요소를 입력하는 용도입니다.
DreamStudio에서와 같은 프롬프트를 입력해 이미지를 생성해 보았습니다.
>> Deep dive into the world of Artificial Intelligence, concept art, matte painting, HQ, 4k
HuggingFace의 Web Demo는 앞서 보았던 DreamStrudio보다 이미지 생성에 더 많은 시간이 소요됩니다. 평균적으로 약 1분 정도가 걸립니다.

OUTRO

DALL-E 2, Imagen, Midjourney 등 Text-to-Image 생성 모델 열풍의 중심에 Stable Diffusion은 이렇게 외치며 등장했습니다.
“야, 너두 AI로 그림 그릴 수 있어!”
Stable Diffusion의 등장으로 Text-to-Image 분야의 문이 활짝 열린 한편, AI가 예술가를 대체하는 것이 아니냐는 우려의 목소리도 나오고 있는데요. 아직은 예술가를 대체한다기보다, 예술가를 보조하는 창작 도구로서의 쓰임이 더 적합하다고 할 수 있습니다
Stable Diffusion의 오픈소스 출시가 가져올 또 한 번의 혁신을 주목함과 더불어, 끊임없이 발전하는 AI 모델을 어떻게 받아들이고 사용할지에 관한 논의가 함께 진행된다면, 다가오는 미래를 조금 더 현명하게 대비할 수 있을 것 같습니다. 이것으로 이번 아티클을 마무리하겠습니다🫡
에디터 @유현

참고문헌 및 출처

[3] Stable Diffusion과 생성 모델 관련 아티클: Stable Diffusion과 생성모델의 혁신 (brunch.co.kr)
[4] Stability.ai 공식 블로그: Stable Diffusion Public Release — Stability AI
문의사항 manager@deepdaiv.com