[이해해보기]stable diffusion은 대체 어떤 과정을 거쳐 문자(자연어)를 이미지로 토해내는가!? 3줄 요약 있음
본문 바로가기
ai 만들어보기(feat ai artwork lab)

[이해해보기]stable diffusion은 대체 어떤 과정을 거쳐 문자(자연어)를 이미지로 토해내는가!? 3줄 요약 있음

by mement0mori 2023. 6. 29.

저 같은 문외한, 문과글쟁이 관점에서 한 번 정리해보는 <'이해'해보기>입니다. 저는 정말이지 대체 이게 어떤 과정을 거쳐서 이렇게 되는 건지 너무 궁금하더라고요. 그래서 이것저것 자료를 찾아보고 chatGPT한테 물어도 보고 한 뒤에 -_-;; 저 또한 '대강 이해한' 내용을 이곳에 공유합니다. 사실 좀 후회한 게 걍 그림이나 줄창 뽑을 걸 괜히 팠네 싶을 정도로 문외한에겐 쉽지 않은 내용이더군요. 뭐든 단순하고 쉽게 제 스타일대로 풀어보겠습니다.

물론 너무 단순화, 쉬워지면 원래 의미나 기능을 곡해할 위험이 있지만, 일단 말 그대로 문외한이 stable diffusion으로 그림을 뽑는 원리를 대충이나마 알 수 있는 걸 목적으로 하기 때문에 무조건 쉬운 걸 우선으로 하겠습니다. 그렇게라도 이해를 하고 있으면 아무래도 마구잡이로 튜토리얼 따라 그림을 뽑고, 모델 트레이닝 하는 것보다는 나은 결과물을 얻을 수 있으리라 믿기 때문에 끝까지 파봅니다. 더하여 다른 전문가나 개발자가 보심 좀 수정보완해줬음 하는 바람이 있습니다. ㅋㅋ;;;

1. **자연어 입력**: 사용자는 자연어로 작성된 프롬프트를 제공합니다. 예를 들어 이런 식, "에일리언을 닮은 프레데터"

2. **토큰화(Tokenization)**: 자연어 프롬프트는 토큰화 과정을 거쳐 모델이 이해할 수 있는 형태로 변환됩니다. 토큰화는 쉽게 말해 문장을 일정 단위로 쪼갠다는 겁니다. 예를 들어 위 프롬프트는 {에일리언을, 닮은, 프레데터} 이렇게요. 왜 chatGPT 같은데서 토큰숫자를 단위로 돈 받아가는 것도 다 저런 겁니다. (모델이 학습하는 언어의 최소 단위!)

3. **벡터화(Vectorization)**: 그렇게 토큰화된 프롬프트는 벡터로 변환됩니다. 벡터란 수학개념으로 크기와 방향을 갖는 물리량을 의미한다고 하죠? 더 쉽게 말해 이건 컴퓨터가 알아먹을 수 있도록 만든다는 의미입니다. 이 2번과 3번 과정이 stable diffusion 설명시 등장하는 Text Encoder(CLIP text)에서 처리하는 부분이 되겠습니다.

4. **잠재공간 특정 지점 지정**(Image Information Creator): 벡터화된 프롬프트는 잠재공간의 특정 지점(애일리언, 닮은, 프레데터)을 가리킵니다.(잠재 공간 내에 매핑). 잠재공간이란 것도 아마 이 분야가 처음이면 처음 들어본 표현일 겁니다.(저처럼-_-;)한마디로 stable diffusion 모델이 학습한 이미지의 특성이 모여 있는 공간 정도로 이해하면 될 것 같습니다.

다시 인공지능이 학습한 수천수만의 '벡터화된 텍스트가 가리키는 이미지 특성'이 잠재공간에 있고, 우리가 입력한 프롬프트인 '벡터화된 텍스트'와 일치하는 지점이 우리가 만들고자 하는 이미지가 된다는 겁니다.

그냥 넘어가려다 중요한 개념인 거 같아서 강조합니다. 이 잠재공간이라는 이름이 암시하는 바가 있습니다. 즉 '확률공간'처럼 결과의 집합이 아니라 무엇이든 나올 수 있는 잠재적 공간이라는 의미로 완전히 새로운 무언가가 나올 수 있는 그런 공간이라는 겁니다. 모델이 데이터에 대해 배울 수 있는 '잠재적인' 정보와 가능성을 포함하고 있다는 것을 의미합니다. 이러한 정보와 가능성을 활용하여 모델은 새로운, 이전에 보지 못한 데이터에 대해 예측을 만들거나, 주어진 프롬프트에 따라 새로운 이미지를 생성할 수 있는 겁니다. "에일리언 닮은 프레데터"처럼.

5. **디코딩(Decoding)+디노이징(Denoising)**: 잠재 공간의 지점에서 시작하여 디코더는 해당 지점의 정보를 사용하여 초기 "노이즈" 이미지를 생성합니다. 여기서 '노이즈'가 등장하는데, 이는 애초에 학습(training)을 이미지에 노이즈를 먹여서 했기 때문입니다.

이 또한 stable diffusion 모델의 핵심적인 원리인데, 예를 들어 에일리언과 프레데터에 노이즈를 계속 노이즈를 추가하면 결국 두 이미지는 뭐가 뭔지 알 수 없게 되겠죠? (이걸 순방향 확산이라고 하고 스테이블 'diffusion'도 여기서 나온 겁니다. 사실 이 과정과 상관 없이 따로 더 정리해야 할 부분이긴 합니다.) 그다음 이걸 거꾸로 돌리면(역방향 확산) 다시 에일리언과 프레데터가 나올 수도 있겠죠? 그리고 잠재공간에서 이 노이즈가 중첩되면 에일리언 닮은 프레데터가 나올 수도 있겠죠? 물론 이렇게 단순하게 설명할 일은 아니긴 합니다. 에일리언 닮은 프레데터가 나오겠지만, 단순한 두 이미지의 평균이나 합성이 아닌 고차원 잠재공간에서 이미지 특성(에일리언 눈, 프레데터 입술 등등)이 여러 변수, 가중치에 따라 그런 개념을 반영한다- 정도로 이해하면 좀 더 정확할 것 같습니다.

그럼 이제 에일리언을 닮은 프레데터의 개념을 가지고 잠재공간에서 노이즈 이미지가 생성됐다면, 그 노이즈를 잘 빼주면 우리가 원하던 그 그림이 나오겠죠? 이 과정을 계속 반복하다 보면 노이즈가 0이 되는 순간이 오고 그럼 이미지가 생성되는 겁니다.

모델의 샘플링이라는 것이 바로 4-5번 과정을 통틀어 말하는 겁니다. 파인튜닝 모델들은 각기 다른 가중치를 가지고 노이즈를 예측하고, 제거합니다. 그래서 모델마다 서로 다른 이미지가 나오는 겁니다. 또한 이 과정에서 쓰이는 것이 바로 스테이블 디퓨전으로 그림을 뽑다 보면 보게 되는 VAE 파일(디코더, 인코더는 학습에 쓰임)입니다. VAE는 잠재공간 이미지를 픽셀공간에서 그려주고, 모델 학습과정에서 소실된 이미지의 세세한 부분을 그려주는 역할을 합니다.

6. **이미지 결과**: 최종적으로 생성된 이미지가 출력됩니다.

에일리언 닮은 프레데터....?

3줄 요약.

1. 프롬프트=에일리언 닮은 프레데터 그려줘

2. 잠재공간=에일리언+프레데터의 특성 포함한 잠재 노이즈 이미지 생성 후 노이즈 제거

3. 이미지 완성

 

 

 

출처 - AI ARTWORK LAB : 네이버 카페 (naver.com)

 

AI ARTWORK LAB : 네이버 카페

stable diffusion 기반 이미지 생성을 비롯한 자연어처리 인공지능을 연구합니다.

cafe.naver.com