pix2pix-zero: Zero-shot Image-to-Image Translation 논문리뷰
0️⃣

pix2pix-zero: Zero-shot Image-to-Image Translation 논문리뷰

Tags
논문리뷰
CV
Published
Published February 9, 2023

ArXiv, Website, Github

  • 글작성 2023.02.09 기준 아직 공식 Repo에 코드가 올라오지 않음
 

어떤 문제를 풀기 위한 연구인가?

이미지 → 이미지로 변환하는 과정에서 텍스트 Prompt를 따로 작성하지 않고서도, 그림 내 존재하는 사물(ex; dog)를 다른 사물(ex; cat)로 변환하는 과정에서 생기는 여러 문제를 풀기 위한 모델이다.
기존의 이미지-이미지 모델에서도 새로운 prompt에 맞게 그림을 변환하려는 시도가 있었지만, 아래와 같이 그림의 일부(배경)만 보존하고 완전히 Re-drawing을 하는 경우가 더 많았다.
notion image
 
이러한 현상을 극복하기 위해서 여러 후속 방법론들이 나왔고, 대표적으로 아래 그림의 경우 작년(2022) 11월에 나온 instruct-pix2pix 모델인데, 아래와 같이 Instruct 형식의 prompt를 추가로 넣어주는 것을 통해 기존 이미지를 새로운 이미지로 그리는 모델이다.
https://github.com/timothybrooks/instruct-pix2pix | https://arxiv.org/abs/2211.09800
InstructPix2Pix: Learning to Follow Image Editing Instructions
한편, 위 모델의 경우는 모델에게 일종의 “Insturct”를 학습시키는 방법으로 학습을 추가로 진행했고, 즉 아래와 같이 Training Data generation 과정에서 생성되지 않은(=모델 학습데이터에 들어가지 않은) 경우에는 Instruct를 넣더라도 제대로 동작하지 않는다는 단점이 있다.
또한, “추가 학습”으로 인한 Cascading forget이 발생한다는 것도 여전히 배제할 수 없는 이슈다.
https://github.com/timothybrooks/instruct-pix2pix | https://arxiv.org/abs/2211.09800
InstructPix2Pix: Learning to Follow Image Editing Instructions
실제로 모델 사용시, CFG(Classifier-Free Guidance) 레벨에 따라서 이미지와 Instruct prompt간 Guidence로 인해 이미지가 망가지는 경우가 많아 CFG 파라미터를 굉장히 세심하게 조절해야하는 단점이 있다.
(원하는 수준으로 적절히 조합되는 것을 찾는 것에 어려움이 있다.)
https://github.com/timothybrooks/instruct-pix2pix | https://arxiv.org/abs/2211.09800
InstructPix2Pix: Learning to Follow Image Editing Instructions
 
pix2pix-zero (이 연구)에서는 InstructPix2Pix의 ‘학습’이라는 한계를 넘고, 이미지 내에 존재하는 ‘바뀌지 않는 object를 유지’한다는 측면에서 여러 방법론을 제안한다.
 

Methods

pix2pix-zero 설명하는 GIF. (from: https://github.com/pix2pixzero/pix2pix-zero)
pix2pix-zero 설명하는 GIF. (from: https://github.com/pix2pixzero/pix2pix-zero)
pix2pix-zero는 크게 2가지의 장점을 내세운다.
  1. Training-Free
  1. Prompt-Free
사용자가 Cat ⇒ Dog 와 같이, 기존것 → 신규 라는 것만 적으면, 생성 단계에서 위와 같이 그림을 새로 그려줄 수 있다.
이 과정에는 크게 두 단계가 들어간다.
  1. FROM : TO (cat : dog)의 클립 임베딩 추출로 변환 벡터 찾기
  1. Cross-attention을 통해 content 유지하기(이미지 변형을 최소화)
또한, 이 논문에서는 DDIM 샘플링의 Gaussian Noise가 제대로 적용되지 않는 이슈를 보완하는 Inversion을 제안(Autocorrelation regularization)하고, Diffusion 대신 GAN 방식으로 보다 이미지를 빠르게 생성하는 방식으로 Diffusion 모델을 distill한다.(Conditional GAN distillation)
 

첫 단계: FROM-TO 간 변환 벡터 찾기

FROM(source)-TO(target) 텍스트 간 차이의 Direction 찾기.
FROM(source)-TO(target) 텍스트 간 차이의 Direction 찾기.
 
Cat과 Dog라는 각 FROM-TO 텍스트가 있으면, 해당 텍스트간 차이 값을 구할 수 있다.
이때 CLIP Embedding을 사용하는데, 단순히 cat, dog라는 단어에 대해 Embedding vector를 구해서 차이를 구하는 것이 아닌, 해당 단어가 들어간 다양한 문장을 GPT-3을 사용해 생성, 혹은 사전에 정의한 Template에 단어를 넣어서 만든 문장들을 CLIP에 넣어서 Vector를 생성한다.
💡
Contextual Text Embedding 모델에서는 각 단어의 임베딩이 다른 값의 벡터로 나오기 때문에, 이와 같이 사전에 정의한(혹은 GPT가 생성한) 문장들을 mean 해서 해당 단어의 벡터값으로 사용한다. 특히 이 논문에서 사용하는 것과 같이 Delta 값을 사용한다면 해당 차이 벡터는 유의미한 Direction이 된다.
이렇게 할 경우 Cat으로 생성한 문장들의 CLIP Vector와 Dog로 생성한 문장들의 CLIP Vector가 있고, 각 벡터들을 mean 한 것에 대해 Delta값을 구하면 이 나온다. (*mean difference)
CLIP 임베딩은 주로 77Tokens(고정) * 768 이기 때문에, mean 벡터간 차이값 역시 동일하게 77*768 사이즈로 나온다.
페이퍼에는 나와있지 않은데, 만약 GPT-3을 사용해 문장을 ‘생성’한다면 해당 문장들 역시 확률적으로 생성되기 때문에, 다른 토큰들에 의해 영향을 받는 shift가 일부 있을 수 있겠다. Template보다 GPT-3으로 생성하는 문장이 좀 더 ‘말이 되는 문장’이기 때문에 괜찮을까?
논문에서는 해당 과정이 수 초 내로 진행된다고 하지만, 만약 GPT-3로 문장을 생성한다면 이미 그 속에서 수십초의 시간이 지나갈 것으로 예상된다. Production에 사용하려면 적당한 Text template를 미리 만들어서 사용하는 방법이 적당할까?
위 방법을 통해서 새로 나온 를 새로운 이미지 생성에 사용하면 새로운 이미지를 만들 수 있다.
 

둘째 단계: Cross-Attention Guidance를 통해 이미지 수정하기

notion image
하지만 위 첫 단계만 사용할 경우, 기존 이미지 대비 너무나 많은 수정이 이뤄진다는 것을 볼 수 있다. (윗 그림 우측 아래 강아지 그림)
이를 방지하기 위해 Reference Image(512x512)에서 사용되는 Inversion에서 Cross-Attention을 붙여 Diffusion과정을 진행한다. 해당 Attention Map은 64x64 사이즈로 사용되며, 각 Pixel-wize로 2x2 pooling(~ 8x8 feature size)으로 Noise map을 구성해, 각 Pixel별로 KL divergence 줄이는 방식으로 Inversion을 진행한다.
둘째 단계: Cross-Attention Guidance를 통해 이미지 수정하기
둘째 단계: Cross-Attention Guidance를 통해 이미지 수정하기
Cross Attention Loss는 간단한 L2 loss(아래)로 사용한다.
notion image

+: Deterministic Inversion

Stable Diffusion등에서 자주 사용하는 샘플링 방식인 DDPM의 경우 stochastic하다는 이슈로 인해, 위 그림(둘째단계)에서 Reference Image Reconstruction이 잘 진행되지 않는다.(즉, Reference image와는 다른 이미지가 생성될 수도 있다.)
따라서 이 페이퍼에서는 Deterministic DDIM을 사용한다. 원본 이미지에서 Diffusion의 Reverse방식(아래 수식)으로 각 Step에서의 이미지를 생성해 사용한다.
 

GAN으로 좀더 빠르게

notion image
Diffsuion과정이 워낙 느리니까, GAN을 써보기도.
Paired Dataset 만들어서 → GAN을 추가 학습해봄.
💡
그런데 당연히 학습이 들어가니 제한된, 학습된 것만 진행이 될테니 아쉬운게 있음. 하지만 인기있는 conversion이 있다면 이런 방식으로 Production-Ready 식 “FILTER”로 만들어서 쓸 수 있는 수준이 됨 (A100 GPU 기준 0.018s/image)

Limitations

notion image
위 그림과 같이
  1. Object의 방향이 다르면 잘 바뀌질 않거나
  1. Cross-Attention map(64x64) 크기의 한계로 인해 우측 말 다리와 같은 디테일을 놓칠 수 있음.
 
위 경우 둘다 Cross-Attention의 크기가 커진다면 (당연히 계산량도 늘겠지만) Fine-grained 파트도 잘 나올 수 있으리라 기대.