ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [논문 리뷰] DALL-E 2 : Hierarchical Text-Conditional Image Generation with CLIP Latents
    Machine Learning/Multimodal Learning 2022. 5. 8. 00:36
    728x90

     

    최근 OpenAI에서 발표한 Text-to-Image 모델 DALL-E 2의 논문을 리뷰합니다.
    작년에 발표한 DALL-E 1 보다 더 사실적이면서, 캡션을 잘 반영하는 고해상도(4x) 이미지를 생성해 많은 관심을 받았습니다.
    리뷰에서는 논문의 다양한 이미지 생성 예시와, 제안한 모델의 구조적 특징 및 관련 연구들을 소개합니다. 
    추가로, 서비스에서 활용 가능한 이미지 조작(image manipulation)에 대해서도 자세히 다루겠습니다.
    Blog / Paper / Instagram ]

     

    "a painting of a fox sitting in a field at sunrise in the style of Claude Monet"

     

    Abstract

    CLIP과 같은 contrastive model들은 이미지의 robust 한 representation(semantic, style 등)을 잘 학습합니다. 저자들은 이 representation을 '이미지 생성'에 활용하기 위해 2-stage model을 제안합니다.

      1. prior : 텍스트로 CLIP image embedding을 생성 (autoregressive / diffusion model 실험, 후자 선택)
      2. decoder : prior의 image embedding을 condition으로 받아, diffusion model로 이미지 생성

    이러한 방법을 통해 캡션(텍스트)이 주어졌을 때, 캡션과의 유사성을 높게 유지하면서 시각적으로 사실성이 높은 이미지를 생성합니다. 뿐만 아니라 이미지가 주어졌을 때, 그 이미지의 주요 의미와 style은 유지하며 다양한 variation을 가진 이미지도 생성할 수 있습니다. 추가적으로 CLIP의 (text-image) joint embedding space는 language-guided image manipulation을 가능하게 합니다.

     

     


     

     

    1. 다양한 이미지 생성 예시

    캡션(텍스트)이 주어졌을 때, 캡션과의 유사성을 높게 유지하면서 시각적으로 사실성이 높은 이미지를 생성합니다.
    기존에 우리 주변에서 볼 수 있는 이미지뿐만 아니라 '상식'과 '상상'이 필요한 이미지들까지 잘 만들어 냅니다.

     

     


     

     

     원본 이미지의 semantics과 style은 유지하며 다양한 variation을 가진 이미지를 생성합니다.
    이미지 속 객체, 화풍, 패턴 등 주요한 특징을 잘 보존하면서도 기존과 다른 새로운 이미지를 만들어 냈습니다.

     

     


     

     

    양쪽 끝에 있는 두 이미지로부터 content와 style을 자연스럽게 blend 합니다.
    어느 이미지와 더 가까운 이미지를 만들지 조절할 수 있어, 디자이너나 제작자들이 두 오브젝트의 특징을 결합한 새로운 작품 혹은 제품을 만들고 싶을 때 참고용으로 사용할 수 있을 것 같습니다. 이 과정에서 사용자가 원하는 특징(화풍, 객체 등)을 지정해 변하지 않도록 할 수 있다면 적용 가능한 곳이 더 늘어날 것입니다.

     

     


     

     

    language-guided image manipulations. 각 행에서 가장 왼쪽에 있는 원본 이미지(왼쪽 캡션으로 생성한 이미지)를 두 캡션을 이용해 변형합니다. 첫 번째 예의 경우 '고양이 사진'에서 '슈퍼 사이어인 고양이의 애니메이션 그리기'로 서서히 변화하는 중간과정까지 보여주고 있습니다. 위에서 말한 사용자가 원하는 특징을 이와 같이 텍스트로 지정해, 변화를 주고 싶은 부분(그리고 방향)과 유지하고 싶은 부분을 구분하는 기능의 가능성을 보여주는 듯합니다.

     

     


     

     

    전체 이미지 중 사용자가 원하는 부분을 지정해 language-guided로 수정할 수 있음을 보여줍니다. 이렇게 이미지에서 지정한 부분을 수정하는 것을 in-painting이라고 말하며, 놀라운 점은 지정한 부분에 플라밍고가 추가되는 것 외에도 물에 플라밍고가 비친 모습도 추가되었다는 것입니다. 개인적으로는 '성능이 좋다고 가정했을 때, 서비스에 가장 빠르게 적용할 수 있는 기술이지 않을까'라고 생각하는 기술입니다.

     

     


     

     

    2. Method

     아래 full text-conditional image generation stack이 unCLIP, 이 방식으로 학습한 모델이 DALL-E 2입니다.

    A high-level overview of unCLIP
    A high-level overview of unCLIP

     

    점선의 윗부분은 CLIP 학습 과정을 묘사하고, text-image의 joint representation space를 학습합니다. 점선 아래는 text-to-image 생성 과정을 묘사하고 있으며, CLIP의 text encoder에서 나온 text embedding을 prior에 넣어줘 image embedding을 생성합니다. 이렇게 생성한 image embedding과 캡션을 이용해 decoder가 최종 이미지를 생성합니다. prior와 decoder를 학습할 때 CLIP model은 frozen 상태로 학습을 하지 않습니다.

    CLIP
    - image encoder : ViT-H/16, consume 256x256 resolution images, width 1280 with 32 Transformer blocks
    - text encoder : Transformer with a causal attention mask, width 1024 with 24 blocks

    Dataset
    - Encoder : CLIP, DALL-E에서 사용한 데이터셋, 650M images
    - Decoder, upsamplers and prior : DALL-E 데이터셋, 250M. images

     

    2.1. Notation

    이미지-텍스트 pair dataset
    - $x$ : image
    - $y$ : text

     

    이미지 $x$, 해당 이미지에 대한 텍스트(캡션) $y$가 주어졌을 때, 각 encoder를 거쳐 나온 embedding
    - $z_i$ : CLIP image embedding
    - $z_t$ : CLIP text embedding 

     

    텍스트로부터 이미지를 생성하는 두 구성 요소
    1. $P(z_i|y)$ : 텍스트 $y$로부터 CLIP image embedding $z_i$ 생성 (prior)
    2. $P(x|z_i, y)$ : prior에서 생성한 $z_i$로부터 이미지 $x$ 생성 (decoder)

     

    모델 $P(x|y)$ : prior, decoder 두 구성 요소를 쌓아 텍스트 $y$가 주어졌을 때 이미지 $x$를 생성합니다.

    $P(x|y) = P(x, z_i|y) = P(x|z_i, y)P(z_i|y)$

    - 첫 번째 equality는 image embedding $z_i$ 가 이미지  $x$의 deterministic function이기 때문에 성립합니다.
    - 두 번째 equality는 chain rule로 성립함 보일 수 있습니다.

     


     

    2.2. Decoder

    Diffusion model을 사용하고, prior로 만든 CLIP image embedding을 condition으로 받아 image를 생성합니다.

    decoder

     

    GLIDE의 architecture를 수정(3.5B parameter GLIDE model)
    - 기존 timestep embedding에 CLIP embedding을 projecting & adding
    - CLIP embedding을 4개의 추가 tokens으로 projecting 한 후, 이를 GLIDE text encoder의 출력 시퀀스에 concat
    (GLIDE에 대한 구체적인 설명은 GLIDE 포스팅을 참고해주시기 바랍니다.)

    고해상도 이미지 만들기 위해 2개의 diffusion upsampler model(ADMNet) 학습
    - [64x64] → [256x256] (27 sampling steps) & [256x256] → [1024x1024] (15 sampling steps)
    - 학습하는 동안 첫 번째 upsampling stage에서는 gaussian blur로 이미지 corrupt, 두 번째 stage에서는 더 다양한 BSR degradation으로 corrupt 적용(BSR-dgradation : applies JPEG compressions noise, camera sensor noise, different image interpolations for downsampling, Gaussian blur kernels and Gaussian noise in a random order to an image) (ADMNet, Diffusion model 공부 필요, blog 참고)

     

     


     

     

    2.3. Prior

    텍스트 $y$로부터 CLIP image embedding $z_i$를 생성하기 위해, 두 개의 prior 모델에 대해 실험을 진행합니다.

     

    1) Autoregressive(AR) prior

    텍스트 $y$를 discrete code의 시퀀스로 변환하여 CLIP image embedding $z_i$ 형성, autoregressively 예측

    - Transformer text encoder(width 2048, 24 blocks), deocder(causal attention mask, width 1664, 24 blocks

    AR prior 효율적으로 학습하고 뽑기 위해, Principal Component Analysis(PCA)로 $z_i$의 dimensionality를 줄임
    - CLIP을 SAM optimizer로 학습하면 representation space의 rank를 굉장히 줄일 수 있음
    - 1024 중 319개의 principal component만 유지해도 거의 대부분의 정보를 보존 가능
    - PCA 적용 후 각 319 dimensions을 1,024개의 discrete buckets에 quantize
      (DALL-E 1의 codebook 만드는 과정 참고)
    - 이러한 과정 덕분에 inference 중에 예측되는 토큰 수가 1/3로 줄고, 학습의 안정성이 향상됨

    [ DALL-E 1, Zero-Shot Text-to-Image Generation ]

    Stage 1
    - Train a discrete variational autoencoder (dVAE) to compress each 256×256 RGB image into a 32 × 32 grid of image tokens, each element of which can assume 8192 possible values. ( each token project into 8192 discrete code) This reduces the context size of the transformer without a large degradation in visual quality

    Stage 2
    - We concatenate up to 256 BPE-encoded text tokens with the 32 × 32 = 1024 image tokens, and train an autoregressive transformer to model the joint distribution over the text and image tokens.

     

     

    2) Diffusion prior

    Continuous vector $z_i$를 캡션  $y$가 condition으로 주어진 Gaussian diffusion model을 통해 재구성
    - Decoder-only Transformer(with a causal attention mask, width 2048, 24 blocks) 학습


    - 시퀀스 순서 : encoded text, CLIP text embedding, an embedding for the diffusion timestep, noised CLIP image embedding, a final embedding whose output from the Transformer is used to predict the unnoised CLIP image embedding
    - 샘플링 모델 : Analytic DPM with 64 strided sampling steps
    - 샘플링 때 두 개의 $z_i$를 생성하고, 이 중 $z_t$와 내적(similarity, 유사도)이 높은 샘플을 선택 → quality 향상

    DDPM에서 사용한 mean-squared error loss 수정해 학습 (DDPM 공부 필요, blog 참고)

    위의 식을 간단하게 설명하면,
    noisy 한 image embedding $z_i^{(t)}$와 time stamp $t$, 캡션 $y$를 diffustion prior의 input으로 줬을 때
    그 output이 original image embedding $z_i$에 최대한 가깝게 reconstruction 되게 하는 loss입니다.

     (설명 추가 예정)

     

     


     

     

    3. Image Manipulations

    unCLIP 구조를 통해 주어진 이미지 $x$를 bipartite latent representation $(z_i, x_T)$로 encoding 가능하고, 이 latent space를 조작하여 새로운 이미지를 생성할 수 있습니다. 

    - $z_i$ : CLIP에서 인식하는 이미지에 대한 정보, CLIP image encoder에 이미지를 forwarding 해서 얻음
    - $x_T$ : decoder가 이미지 $x$를 재구성하는 데 필요한 모든 residual information을 인코딩, DDIM inversion [Appendix F in this paper]을 통해 얻음

    논문에서는 이렇게 얻은 bipartite representation을 이용한 3가지 manipulation을 보여줍니다.

     

    기존 Text-to-Image 과정에서는 decoder에 캡션을 prior에 forwarding 하고 이를 통해 만들어낸 image embedding을 condition으로 줬습니다. 하지만 image manipulation을 위해서는 이미지 자체를 CLIP image encoder에 넣어 '진짜 image embedding'을 얻고, 이를 interpolation을 통해 원하는 방향으로 representation을 조작한 뒤 decoder에 넣어주는 것으로 이해했습니다.


    ( DDIM inversion : Interpolating Between Dataset Images Using DDIM 추가 필요 )

     

    3.1. Variations

    DALL-E 2 can take an image and create different variations of it inspired by the original. [https://openai.com/dall-e-2/]

    게임 혹은 애니메이션 캐릭터의 초안을 그려놓고, 다양한 변형을 주어 원하는 혹은 생각하지 못했던 새로운 캐릭터를 그릴 수 있을 것 같습니다. 뿐만 아니라 실제 사람이 실내 인테리어를 할 때도 자신의 집을 찍어서 변형된 이미지를 생성해 새로운 구상을 해볼 수 있고, 인테리어 전문가들이 도안을 생성하는 도구로도 사용할 수 있을 것 같습니다.

     

    위 예시와 같이, 주어진 이미지의 주요한 content를 유지하면서 색감, 객체 등의 변화를 준 이미지를 생성할 수 있습니다. 이러한 변형된 이미지를 생성하는 과정에서 DDIM의 하이퍼파라미터 𝜂 를 통해 그 변형 정도를 조절할 수 있습니다. 𝜂=0 일 때, decoder는 deterministic 하게 되고 주어진 이미지 $x$를 reconstruct 합니다. 𝜂 가 커지면 샘플링 단계에 확률성(stochasticity)이 도입되어 원본 이미지 $x$를 중심으로 변형이 일어납니다. 𝜂가 증가함에 따라 일어나는 변형을 관찰하면, CLIP image embedding에서 캡처한 정보(샘플 전체에서 보존된 정보)와 손실된 정보(변화된 부분)를 알 수 있습니다. 즉, CLIP embedding을 해석하는 도구로 사용할 수 있습니다.

     

     


     

     

    3.2. Interpolations

     

    위의 예시와 같이, 두 이미지를 blend 할 수 있습니다. 두 이미지 $x_1$, $x_2$에 대하여 두 개의 CLIP image embedding을 $z_{i1}$, $z_{i2}$라고 하면, 가운데 있는 이미지들은 두 CLIP 이미지 임베딩 공간 사이의 concept들을 탐색하는 과정이라고 생각할 수 있습니다. 이를 위해 저자들은 spherical interpolation을 이용해 intermediate CLIP representation $z_θ$ = slerp($z_{i1}$, $z_{i2}$, θ)를 얻었습니다(θ는 0부터 1 사이의 값). 이렇게 만든 representation을 decoder의 condition으로 전달해 위와 같은 intermediate 그림들을 생성합니다.

     


     

     

    3.3 Text Diffs

     

    image representation을 위해 다른 모델이 아닌 CLIP을 사용하는 것의 가장 핵심적인 이점은 image와 text를 같은 latent space에 임베딩 한다는 것으로, 이는 language-guided image manipulation(=text diffs)을 가능하게 합니다. 새로운 캡션 $y$를 반영해 이미지를 수정하기 위해서, 우선 이 캡션의 CLIP text embedding인 $z_t$와 이미지를 설명하는 기존 캡션의 CLIP text embedding $z_{t0}$을 얻어야 합니다. 그 뒤 text diff vector $z_d$ = norm$(z_t-z_{t0})$을 구합니다. 이렇게 구한 $z_d$와 이미지의 CLIP embedding $z_i$에 spherical interpolation을 적용해, intermediate CLIP representation인 $z_θ$ = slerp$(z_i, z_d, θ)$를 구합니다. 이때 θ 값을 선형적으로 증가시키며 representation을 decoding 해 위와 같이 language-guided로 이미지를 manipulation 합니다. 

     

     


     

     

    3.4 Text-conditional image inpainting (feat. GLIDE)

    논문에는 설명이 없지만 OpenAI 공식 블로그에 나와있는 예시와 GLIDE의 예시를 보여드리겠습니다.

    왼쪽 original image의 1번 위치에 코기가 추가되었습니다. 이는 전체 이미지 중 사용자가 원하는 부분만 지정해 text로 수정할 수 있음을 보여줍니다. (이러한 text-conditional image inpainting을 어떻게 구현 가능한가에 대한 설명은 GLIDE 포스팅을 참고해주시기 바랍니다.) 

     

    GLIDE에 코기 이미지가 많은 것으로 봐서, 저자 중에 코기를 키우거나 정말 좋아하는 분이 있는 것 같습니다

    GLIDE에 나와있는 예시로, 원하는 부분을 지정하고 텍스트 캡션을 입력해 캡션에 맞는 이미지가 순차적으로 생성되는 것을 보여줍니다. 이러한 기술은 웹툰이나 영화와 드라마의 콘티를 그릴 때 유용하게 사용할 수 있을 것 같습니다. 그 외에도 많은 디자이너 분들도 활용 가능할 것 같으며, 일반인들도 사진을 보정하고 수정할 때 이러한 기능을 사용할 수 있을 것으로 보입니다. 아직은 모델이 너무 크기 때문에 이를 서비스화 하기가 쉽지는 않겠지만, 우리는 늘 그랬듯 답을 찾을 것이라고 기대합니다.

     

     


     

     

    Conclusion

    지금까지 DALL-E 2에 대해 살펴보았습니다. 논문에 나와있는 예시들을 통해 다양한 방법으로 이미지를 생성 및 변형 가능함을 알 수 있었습니다. 이러한 다양성을 가질 수 있었던 구조적 특징을 관련 연구들과 함께 설명했지만, 관련 연구들을 모두 이해한 것이 아니기 때문에 공부하며 추가 및 보완하겠습니다. 이번 리뷰에서 다루지는 않았지만 논문에는 CLIP latent space에 대한 분석과 prior의 중요성, 실제 사람들을 대상으로 설문해 GLIDE와 비교한 내용, 한계와 리스크에 대한 설명도 있으니 궁금하신 분들은 논문을 참고해주시면 좋을 것 같습니다. 리뷰 중간중간에 기술들을 어디에 적용할 수 있을지 고민하는 과정이 재미있었고, 이런 최신 기술이 우리 삶을 어떻게 바꿀지 매우 기대됩니다.

     


     

    Our hope is that DALL·E 2 will empower people to express themselves creatively.
    DALL·E 2 also helps us understand how advanced AI systems see and understand our world,
    which is critical to our mission of creating AI that benefits humanity.   - OpenAI

     


     

    관련 포스트 

    [논문 리뷰] GLIDE: Towards Photorealistic Image Generation and Editing with Text-Guided Diffusion Models  

     

    [논문 리뷰] GLIDE: Towards Photorealistic Image Generation and Editing with Text-Guided Diffusion Models

    DALL-E 2의 기본 구조가 되었던 GLIDE 논문을 리뷰합니다. OpenAI에서 발표한 Text-to-Image 모델이며, 기존 GAN이 주축이던 Text-to-Image domain에 DIffusion model을 도입해 사실적인 이미지를 생성했습니다...

    cocoa-t.tistory.com

     

    [코드 분석] GLIDE 코랩 데모 : Text-guided Image Editing(feat. in-painting)

     

    [코드 분석] GLIDE 코랩 데모 : Text-guided Image Editing(feat. in-painting)

    지난 포스트에서 DALL-E 2의 디코더로 사용된 GLIDE에 대해 알아보았습니다. Diffusion models을 Text-to-Image에 적용했으며, 그 결과 텍스트를 잘 반영하는 사실적인 이미지를 생성했습니다. 추가로 텍스

    cocoa-t.tistory.com

     

     

    728x90

    댓글

Designed by Tistory.