Abstract
Recaption, Plan, and Generate라는 새로운, training이 필요없는 text-image generation/editing framework를 제안하는 논문이다.
Recaption(다시 설명하기) 단계에서는 입력된 복잡한 텍스트 설명을 이해하고, 이를 여러 간단한 설명으로 나눈다. Plan(계획하기) 단계에서는, 이렇게 나뉜 각각의 설명에 따라 이미지를 어떻게 생성할지 계획을 세우며, 이 단계에서는 MLLM을 사용해 전체 이미지를 만들기 위한 계획을 세운다. Generate(생성하기) 단계에서는 각 부분 설명에 맞는 이미지를 생성하고, 이를 조합해서 최종 이미지를 만든다. 이때 regional하게 이미지를 생성하는 " complementary regional diffusion" 를 이용해서, 각 부분이 조화를 이루도록 한다.
Related Works
최근 디퓨전 모델 SDXL이나 Imagen 이런거 보면 텍스트 프롬프트랑일치하는 현실적인 이미지 생성은 매우 잘하지만, 서로 다른 속성이랑 관계를 가진 여러 개체를 하나의 이미지로 구성하는, 복잡한 프롬프트는 정확하게 따르지 못함. 그래서 일부 연구들에서는 이런 문제를 해결하기 위해 다양한 방법을 제안했는데
- 추가 레이아웃이나 박스를 사용했음. 빨간 모자를 쓴 여자와 강아지 라는 프롬프트에서, 예를 들면 이미지 왼쪽 상단에 빨간 모자를 쓴 여자, 오른족 하단에는 강아지를 배치하는 방법.
- Prompt-aware attention guidance를 사용해 모델이 텍스트 설명을 더 잘 이해하도록 돕는 방법.
- GLIGEN처럼, 원래 모델의 학습된 부분은 그대로 유지하면서, 새로운 학습 가능한 부분을 추가해 공간적인 정보를 통합하는 방법. 예를 들면 bounding box등의 공간 입력을 추가해 모델이 객체를 어디에 배치해야하는지 더 잘 알 수 있게 했음.
- 아니면 RLHF처럼, pretrained text image 모델을 finetuning 하기 위한 reward모델을 학습시키는 방식
등이 있는데, layout이나 attention 방법은, 대략적이거나 최적화가 안된다는 한계점이 있었음. 예를 들어 attention 맵을 통해 어느 부분에 집중해야하는지 대략적으로 가이드는 하지만, 세부적인 배치나 객체 간의 관계까지는 정확히 가이드 할 수 없고, text랑 이미지의 align을 하지만, 이 과정이 잘 최적화되지 않아서 복잡한 프롬프트에서 원하는 결과를 얻기힘들다.
그리고 RLHF같은 방법은 피드백 수집을 해야하고 추가적인 training cost가 있다는 한계가 있다.
이 한계점을 해결하기 위해 RPG를 제안함.
Method
Overall process
- Multimodal Recaptioning
- text prompt를 더 상세하고, 설명적인 형태로 변환해서 디퓨전 모델이 더 잘 이해할 수 있게할 수 있도록 하는게 목표이다
- LLM을 사용해 text prompt를 여러 sub prompt로 분해하고, 이걸 더 자세한 설명으로 다시 설명한다
- 생성된 이미지랑 목표 프롬프트간의 의미적 차이를 identify하기 위해 MLLM으로 입력이미지를 recaption한다
- Chain-of-Thought Planning
- 이미지 공간을 complementary subregion으로 나누고, 각 subregion에 하나의 sub prompt를 할당해서, 복잡한 이미지 생성 작업을 여러 단순한 작업으로 분해한다.
- Complementary Regional Diffusion(Generate)
- 겹치치 않는 planned sub region이랑 이에 해당하는 prompt를 기반으로 text-image 생성의 유연성과 정확성을 높이는걸 목표로 한다.
- 지정된 sub region에서 sub prompt에 따라 독립적으로 이미지를 생성하고, 이걸 resize하고 연결하는 방법으로, 공간적으로 병합한다.
이 파이프라인을 통해 크게 두가지 task (T2I generation, Text guided image editing) 를 수행할 수 있다.
T2I generation부터 보자
Text to image generation
Prompt Recaptioning
주어진 text prompt가 매우 복잡한 경우, MLLM을 활용해 이거를 여러개의 간단한 하위 프롬프트로 분해하는 과정이다.
여러 개체와 다양한 속성 및 관계를 포함하는 복잡한 사용자 프롬프트 \( y^c \) 가 주어졌을 때, MLLM을 사용하여 \( y^c \) 내의 주요 구문을 식별하고 이를 하위 프롬프트로 분해한다
\[ \{ y^j \}_{i=0}^n = \{ y^0, y^1, ..., y^n \} \subseteq y^c \]
여기서 \( n \) 은 주요 구문의 수를 나타낸다. DALL-E 3에서 pretrained된 이미지-텍스트(I2T) 캡션 모델을 사용해서 이미지에 대한 프롬프트를 생성하고, 이미지-텍스트 쌍으로 새로운 데이터셋을 구성하는 것 처럼, 여기서 LLM을 텍스트-텍스트(T2T) 캡셔너로 사용한다. 이를 통해 각 하위 프롬프트를 더 정보가 풍부하고 상세한 설명으로 다시 generate 된다:
\[ \{ y^{0'}, y^{1'}, ..., y^{n'} \} = \text{Recaption}(\{ y^j \}_{i=0}^n) \]
이 방식으로 각 하위 프롬프트에 대해 더 구체적인 정보를 생성하여, 생성된 이미지의 정확성을 높이고 프롬프트와 이미지 간의 의미적 차이를 줄일 수 있다
CoT Planning for Region Division
Recaptioned 된 prompt를 기반으로, LLM의 멀티모달 chain-of-thought 추론 능력을 활용한다.
먼저, 이미지 공간 \( H \times W \) 를 여러 보완적인 영역으로 나눈다. 그리고 각 augmented subprompt \( \hat{y}^i \) 를 특정 영역 \( R^i \) 에 할당한다
\[ \{ R^i \}_{i=0}^n = \{ R^0, R^1, ..., R^n \} \subseteq H \times W \]
이때, 이 meaningful하고 정확한 subregion을 생성하기 위해서는 두가지 요소를 고려해야 하는데:
- region parameters:
- 행은 세미콜론(;)으로 구분한다
- 각 column은 쉼표(,)로 구분된 series of number로 나타낸다. 예를 들어, "1,1,1"은 한 행의 세 개의 영역을 나타냄.
- 구체적으로, 이미지를 여러 행으로 나눈 다음, 각 행 내에서 쉼표를 사용하여 여러 영역으로 나눈다.
- region-wise task specifications to instruct MLLMs:
- 이미지 각 구역에 대해 MLLM이 수행해야할 작업을 명확하게 정의하기 위해 MLLM의 chain of thought 추론 능력을 사용해 각 구역에 대한 작업을 추론하게 한다
- MLLM이 작업을 이해하고 수행할 수 있게 in context 예제를 통해, MLLM이 어떤 작업을 수행해야 하는지 명확히 이해할 수 있게 한다
- In context example은 모델이 특정 상황에서 어떻게 행동해야하는지를 보여주는 example
그리고 각 subprompt에 대한 구역을 추론하기 위해 두가지 원칙을 따르는데
- 같은 클래스 이름을 가진 경우
- 동일한 클래스 이름을 가진 객체(예: 다섯 개의 사과)는 숫자의 정확성을 보장하기 위해 서로 다른 구역에 할당된다
- 특정 entitiy의 appearance에 중점을 둔 경우
- 프롬프트가 특정 개체의 외형에 더 중점을 두는 경우, 이 개체의 서로 다른 부분을 별개의 entity로 취급한다
- 예를 들어, "A green hair twintail in red blouse, wearing blue skirt"라는 프롬프트가 주어지면, 이를 "green hair twintail", "red blouse", "blue skirt"와 같이 각각의 부분으로 나눈다
Complementary Regional Diffusion
기존의 접근 방식에서는 여러 잠재 변수를 단순히 layer로 쌓아서 이미지를 생성한다. 이러한 방식은 다음과 같은 문제를 일으킨다:
- 객체들이 겹치거나 충돌하는 경우 모호한 결과가 나올 수 있다
- 개별적인 요소를 하나의 통합된 이미지로 합치기 어렵다
예를 들면 Cross-Attention이랑 Layout 조정의 경우
Cross-Attention 은 텍스트와 이미지 간의 연관성을 찾기 위해 사용되며, 텍스트의 특정 부분이 이미지의 어떤 부분에 해당하는지를 찾는 과정이고,
레이아웃 조정은 이미지를 생성할 때 각 요소의 위치를 사전에 정해진 레이아웃에 맞추는 방법이다.
근데 이거의 한계점은, 각 요소를 개별적으로 처리하고, 그 결과를 한 이미지에 쌓는 방식으로 작동하여 여러 요소가 겹치는 영역에서 충돌을 일으킬 수 있고, 따라서 결과적으로 모호한 이미지를 생성할 수 있다
그래서 나온 새로운 접근 방식이, Complementary Regional Diffusion 이다.
Complementary Regional Diffusion 은 겹치지 않는 Complementary 직사각형 영역을 추출하여 각 영역별로 독립적으로 이미지를 생성함으로써 충돌과 모호함을 피하는 새로운 접근 방식이다.
각 영역에서 생성된 이미지를 리사이즈하고, 이를 연결하여 최종 이미지를 구성한다. 이렇게 하면 각 영역 간의 일관성을 유지할 수 있다.
기본 프롬프트와 다시 설명된 하위 프롬프트를 결합하여 생성된 각 영역의 일관성을 강화하고, 전체 이미지의 일관성을 유지한다.
\[ x_{t-1} = \text{CRD}(x_t, y^{\text{base}}, \{ \hat{y}^i \}_{i=0}^n, \{ R^i \}_{i=0}^n, t, s) \]
여기서 \( s \)는 고정된 random seed이고, CRD는 Complementary Regional Diffusion
\[ \text{Prompt Batch}: \{ y^{\text{base}}, \{ \hat{y}^i \}_{i=0}^n \} \]
기본 프롬프트 \( y^{\text{base}} = y^c \) 와 다시 recaptioning 된 sub prompt를 결합하여 프롬프트 batch가 구성된다.
각 타임스텝에서, 이 프롬프트 배치는 denoising network로 전달되고 cross attention layer를 통해 서로 다른 잠재 변수를 생성한다
\[ z_{t-1}^i = \text{Softmax}\left( \frac{(W_Q \cdot \phi(z_t))(W_K \cdot \psi(\hat{y}^i))^T}{\sqrt{d}} \right) W_V \cdot \psi(\hat{y}^i) \]
- \( z_t \): 현재 타임스텝의 이미지 latent로, 쿼리로 사용된다
- \( \hat{y}^i \): sub prompt로, 각 sub prompt는 키랑 value로 사용된다
- \( W_Q, W_K, W_V \): linear projection으로 각각 쿼리, 키, value의 차원 변환
- \( d \): 키와 쿼리의 dimension
이걸 통해 쿼리 \( z_t \)와 각 sub prompt \( \hat{y}^i \) 간의 유사성을 계산하여 가중치를 할당하고, 이를 기반으로 새로운 latent \( z_{t-1}^i \)를 생성한다
이렇게 생성된 잠재 변수들을 각 할당된 영역의 번호랑 비율에 따라 resize하고 연결한다
\[ z_{t-1}^i (h, w) = \text{Resize}(z_{t-1}^i, R^i) \]
- \( z_{t-1}^i \): 생성된 latent
- \( h \): 할당된 영역 \( R^i \)의 높이
- \( w \): 할당된 영역 \( R^i \)의 width
- \( R^i \): 각 sub prompt \( \hat{y}^i \)에 할당된 영역
이 단계에서는 각 latent를 해당 영역의 크기에 맞게 조정한다
\[ z_{t-1}^{\text{cat}} = \text{Concatenate}(\{ z_{t-1}^i (h, w) \}_{i=0}^n) \]
- \( z_{t-1}^{\text{cat}} \): 연결된 latent
- \(\{ z_{t-1}^i (h, w) \}_{i=0}^n \): 리사이즈된 각 latent를 포함하는 집합
resize 된 latent들을 spatial axes를 따라 연결하여 전체 이미지를 구성한다.
최종 denoising output 을 생성하기 위해 기본(base prompt) latent와 concatenated latent 변수를 결합한다
\[ z_{t-1} = \beta \cdot z_{t-1}^{\text{base}} + (1 - \beta) \cdot z_{t-1}^{\text{cat}} \]
- \( z_{t-1} \): 최종 output
- \( \beta \): hyperparam
- \( z_{t-1}^{\text{base}} \): base prompt의 latent 변수
- \( z_{t-1}^{\text{cat}} \): concatenated latent
이 단계에서는 \( \beta \)를 사용하여 base latent와 concatenated latent 간의 적절한 비율을 결정하고, 이를 통해 최종 output 을 한다.
이거 논문 좀 이해가 안갔던게, 어떻게 따로따로 생성하는데 저렇게 consistent하게 잘 나오지? base prompt가 0일떄도, 너무 잘 연결되어서 나오는데,, 이게 잘 와닿지는 않는다
그리고 latent space에서의 height랑 width가 왜 image pixel에서의 height랑 width랑 연결되는지도?
--> 코드 확인해보니 전체적으로 같은 유넷을 쓰고, prompt들끼리도 cross attention 되어진다. 독립적으로 처리되는 부분은 unet에 있는 특정레이어(attn2)에서만 독립적으로 cross attention 되어지는듯하다
그리고 latent space에서 height랑 width를 image 상에서의 height랑 width를 토대로 구한거 같은데, 코드를 봐도 명확하지느 않지만 결과보면 잘되는것 같다. latent space에서 어떻게 잘 나눠주면 완벽히는 아니더라도 대충 height랑 width로 나눌수 있나보다