[Paper] https://arxiv.org/pdf/2308.06721
[Github] https://github.com/tencent-ailab/IP-Adapter
Abstract
최근 high-fidelity 이미지들을 생성하는 text-to-image diffusion 모델이 많이 공개되고 있는데요, 하지만 복잡한 prompt engineering 을 수반하기 때문에 text prompt만으로 원하는 이미지를 생성하기는 어렵습니다. 그렇다면 text prompt를 대체할 수 있는 것이 있을까요? 본 논문에서는 이런 문구를 제시합니다.
"an image is worth a thousand words".
바로 이미지 자체를 prompt로 사용하자라는 아이디어입니다. 이러한 시도는 전에도 존재했었습니다. 하지만 대규모 computing resource가 필요하고, 다른 베이스 모델, text prompt, structural controls들과 양립할 수 없다는 단점이 있습니다.
본 논문에서는 이러한 문제점들을 개선하여 IP-Adapter를 제안합니다. 좀 더 자세한 내용은 introduction에서 설명하겠습니다.
1. Introduction
이미지는 텍스트 보다 훨씬 더 많은 것을 표현 할 수 있습니다. 따라서 본 논문에서는 텍스트가 가진 문제점을 해결하기 위해 이미지 prompt를 사용하는 방법을 제안합니다. 앞서 설명했듯이 이러한 방법은 이전의 연구에서 이미 시도되었습니다. 대표적인 예로 SD Image Variations 와 Stable unCLIP이 있습니다. 이 두 연구 모두 효과적인 image prompt 사용을 위해 image embedding에서 text-conditioned diffusion model 직접 fine-tuning 하는 것이 효과적임을 증명했습니다.
하지만 아주 명확한 단점도 존재했는데요,
첫째, 기존 모델에서 text prompt로 이미지를 생성하는 기능을 제거하고 fine-tuning하기 위해 대규모 computing resource가 필요합니다. 둘째, image prompt모델은 다른 text-to-image base 모델에서 파생된 다른 커스텀 모델로 transfer 할 수 없기 때문에 재사용이 불가능합니다. fine-tuning이 갖는 단점으로 인해 일부 연구는 fine-tuning을 제거하고 text-encoder를 image-encoder로 대체하는 방식을 선택했습니다. 하지만,,, 이 방법 또한 문제가 있습니다.
image prompt만 입력으로 받기 때문에 image와 text 두 가지 모두를 사용할 수 없었고, 이는 생성된 이미지의 퀄리티 감소로 이어지게됩니다.
본 논문에서는 앞서 언급한 문제점들이 f text-to-image diffusion의 cross-attention module에 있다고 주장합니다. pretrained diffusion 모델의 cross-attention layer 에 있는 key, value projection weights는 text feature를 조정하도록 학습됩니다. 이 방식은 결과적으로 image features 를 text features에 맞게 alignment 할 수 있지만, 잠재적으로는 이미지의 특정 정보를 놓치거나 reference 이미지와 coarse-grained controllable generation을 초래할 수 있습니다.
따라서, 본 논문에서는 이러한 점들 개선한 IP-Adapter를 제안합니다.
IP-Adapter는 image features 와 text features에 분리된 cross-attention메커니즘을 채택했습니다. diffusion의 UNet에 있는 모든 cross-attention layer에 image feature만을 위한 cross-attention layer가 추가됩니다. 학습단계에서 이 layer만 학습되고, 기존의 UNet은 freezing 됩니다. 때문에 parameter도 22M개로 매우 가볍고 효율적입니다. text prompt와 호환될 뿐만 아니라 성능 또한 우수하다고 합니다. 제안된 IP-Adapter를 사용하면 위 그림과 같이 다양한 이미지를 쉽게 생성해낼 수 있습니다.
2. Method
2.1 Prelimiaries
diffusion 모델은 forward/backward 두 개의 프로세스로 구성되어 있습니다. diffusion의 작동 방식이 궁금하다면 여기를 참고해주세요!
2.2 Image Prompt Adapter
본 논문에서 image prompt adapter는 pretrained text-to-image diffusion 모델이 image prompt로 이미지를 생성할 수 있도록 설계되었습니다. 현재 adapter는 fine-tuned image prompt model 또는 처음부터 학습된 모델의 성능을 일치 시키기 어렵습니다. 대부분의 방법들은 freezing 되는 cross-attention layers에 단순히 concat된 feature를 입력으로 주어 image prompt로 부터 fine-grained features 를 잡아내는 것을 방지합니다.
이 문제를 방지하기 위해 image feature는 새로운 cross-attention layers로 embedding되는 decoupled cross-attention 방법을 선택했습니다. 따라서 위 구조도에서 확인할 수 있듯이 IP-Adapter는 두 개의 부분으로 구성됩니다.
- image encoder: image prompt로 부터 image feature를 추출하는 부분
- adapted module: pretrained text-to-image diffusion 모델로 image feature를 embed하기 위한 decoupled cross-attention
2.2.1 Image Encoder
대부분의 방법들과 유사하게 본 논문에서도 pretrained CLIP image encoder를 사용해 image prmpt에서 image feature를 추출합니다. 이 feature 가 global image embedding 인데, image caption과 이미지의 스타일/content가 잘 정렬되어 있습니다. 학습단계에서는 CLIP은 freezing 입니다.
효율적으로 global image embedding을 분해하기 위해 , 길이 N의 embedding feature로 만드는데 이때 작은 projection network를 사용합니다. 이 차원은 text feature의 차원과 동일합니다. projection network는 linear layer 와 Layer Normalization으로 구성됩니다.
2.2.2 Decoupled Cross-Attention
image feature는 decoupled cross-attention 에 의해 pretrained UNet으로 통합됩니다. 기본 SD 모델에서는, CLIP text encoder의 text feature가 cross-attention layers에 feeding되어 UNet모델에 결합됩니다. query features Z 와 text features c_t가 주어지면 cross-attention의 아웃풋 Z'은 다음과 같이 정의될 수 있습니다.
Q = ZW_q, K = c_tW_k, V = c_tW_v
W_q, W_k, W_v => weight matrices
image feature 삽입하는 가장 빠른 방법은 text feature와 concat후 cross attention layer에 feeding 하는 것입니다. 그러나 이 방법은 효과적이지 않아 본 논문에서는 decoupled cross-attention mechanism 방법을 제안합니다. text feature와 image rfeature를 위한 cross-attention layer가 분리된 것이죠. 좀 더 명확하게, 기본 UNet에 있던 각각의 cross-attention layer에 새로운 cross-attention layer를 더하는 것입니다. image feature c_i가 주어지면 새로운 cross-attention 의 아웃 풋인 Z''는 아래와 같이 나타낼 수 있습니다.
Q = ZW_q, K' = c_tW_k', V = c_tW_v'
W_k', W_v' => weight matrices
결과적으로 각 cross attention laye에 W_k', W_v'만 추가해주면 됩니다. 빠른 수렴을 위해 W_k, W_v로 초기화됩니다. 그 다음 image cross attention의 output을 text cross-attention의 output과 더해주면 됩니다. 그러므로 최종적인 decoupled cross-attention의 수식은 아래와 같습니다.
이때, W_k', W_v'만 학습됩니다.
2.2.3 Training and Inference
학습 단계에서는 pretrained diffusion모델은 freezing되고 IP-Adapter만 학습합니다. IP-Adapter 또한 기존 SD와 동일하게 image-text 쌍으로 학습합니다.
Inference 단계에서 classifier-free guidance를 가능하게 하기 위해 image 조건을 랜덤으로 drop합니다.
만약 이미지 조건이 drop되었다면, CLIP 이미지 embedding을 간단히 0으로 설정하면 됩니다.
text cross-attention과 image cross-attention이 분리되면 inference 단계에서 이미지 조건에 weight를 주는 것도 가능합니다.
위 식에서 λ 는 weight factor이고, 이 값이 0이라면 기존의 text-to-image diffusion 모델과 동일해집니다.
3. Experiment
3.1 Experimental Setup
3.1.1 Training Data
LAION-2B [42] , COYO-700M => 약 1000만 개의 text-image pair
3.1.2 Implementation Details
SD v1.5기반, OpenCLIP ViT-H/1 사용