해당 페이지에서는 Dall-E의 수학적인 개념(ELB, KL 등)은 제외하고 컨셉에 대해서만 기술하였습니다.
High-level idea
Transformer를 활용하여 Text2Img를 Auto-regressive하게 모델링 한다.
- 이렇게 한다고 자연어로 통제 가능할까?
- → 데이터로 해결하자. 2억 5천만개의 이미지-텍스트 쌍에대해서 학습했다.
- 모델이 2억 5천만개를 학습할만한 구조를 갖고 있는가?
- → 120억개의 파라미터를 가지고있다.
Motivation & Contribution
텍스트-이미지 생성은 전통적으로 고정 데이터 세트에 대해 더 나은 모델링을 찾는 데 초점을 맞췄다
→ 이러한 시도들은 구조를 복잡하게 만들고, 손실함수를 덕지덕지 붙이고, segment mask와 같은 부차적인 정보들을 사용하였다
→ Autoregressive한 트랜스포머 모델과 충분한 데이터를 활용함으로써 상기 문제를 해결하는데 의의가 있다.
Naive Approach
이미지와 텍스트를 적당히 임베딩해서 트랜스포머에 넣고 훈련시키면 되겠네 !
→ 이미지 토큰으로서 픽셀을 직접활용하면 고해상도 이미지에 대해서 엄청난 메모리가 소요됨
→ 우리가 이미지를 인식할 때의 이미지구조(low-frequency)보다 지나친 디테일(high-frequency)에 대해 학습하는데 지나친 모델링 자원 사용하게 됨
Dall-E에서는 2-stage 학습단계를 통해 상기 문제를 해결함
Stage 1 Learning the Visual Codebook
dVAE 관련
DALL-E를 이해하기 위한 개략적인 설명이므로 실제와는 조금 다를 수 있음
AE
Auto Encoder
하나의 Latent space에 임베딩 표현을 학습시키는 방법
VAE
Variational Auto Encoder
현실은 가우시안 분포를 따른다고 가정했을 때, Auto Encoder는 상대적으로 너무 sparse한 분포를 가지고 있다.
이런 문제를 해결하기 위해서, 분포가 가우시안 분포를 따른다고 가정하고 샘플링하는 방법이다.
Encoder에서 평균값과 편차값을 구하고 샘플링해서 디코더로 넘겨 생성한다.
VQ-VAE
트랜스포머처럼 vocab(code book)을 만든다. 즉, 양자화를 시키는 VAE 이다.
이미지에서 입력된 픽셀값들이 연산을 통해 가장 유사한 하나의 vocab을 고르게 된다. 해당 토큰의 집합은 디코더에서 입력 이미지와 똑같이 복원이 가능해야한다.
dVAE(discrete VAE)
VQ-VAE와 유사하다. 다만 VQ-VAE가 가장 유사한 vocab을 선택한다면, dVAE에서는 vocab을 선택하기 위한 분포자체를 가지고 학습한다.
Stage 1에서 해결하려는 문제
일반적으로 CNN기반 모델들은 입력 이미지의 크기를 줄이기위해서 resize하는 방식을 사용하지만, DALL-E는 dVAE를 사용했다.
- 고화질에대해서 연산을 많이 할 수 없음 (256x256개로 Autoregressive Generation하려면 연산량이 너무 많다.) → resize하기에는 복원률이 좋지 않아 AutoEncoder로 접근했다.
- AutoEncoder로 줄이고 늘린다고 하더라도 latent space에 dense하게 임베딩되기 힘들다 → 그래서 VAE로 감
- latent vector를 뽑는다고 해도 이걸 매번 새롭게 연산하면 너무 힘들다 → dVAE를 통해 코드북을 만들어버림
따라서, transformer가 처리해야 하는 context 크기를 192배 압축하면서, visual quality는 유지 가능하다.
- (256x256x3) / (32x32) = 192
Stage1에서는 dVAE를 학습하여 256x256 RGB 이미지를 32x32 그리드의 이미지 토큰으로 압축한다. 각 토큰은 vocab의 8,192가지 값을 가질 수 있다. 즉, 8,192개 vocab으로 32x32의 조합이 가능하다. 생성 가능한 이미지가 8192^1024개가 된다.
학습시에는 argmax를 사용하면 미분이 안돼서 훈련이 되지 않는다. 미분이 가능하도록 Gumbel-softmax Trick을 사용하였다.
추론과정에서는 역전파 과정이 필요하지 않으니 argmax를 사용하였다.
Stage 2 Learning the Prior
256개의 BPE-인코딩된 텍스트 토큰과 1024(=32x32)개의 이미지 토큰을 concat하여 트랜스포머에 입력한다
생성할때 autoregressive하게 1024개가 쌓일 때 까지 반복한다. 토큰 1024개가 쌓이면 dVAE의 decoder 부에서 이미지를 생성한다.
Data Collection
Conceptual captions (3.3M text-image pairs) 데이터셋으로 처음에는 1.2B 파라메터 모델로 학습
12B 파라메터 모델 학습을 위해 YFCC100M 데이터셋의 filtered subset(MS-COCO 검증 이미지 포함)과 위키피디아의 text-image pairs 사용(250 million text-images pairs from the internet.)
필터링을 통해 학습에 도움이 되지 않는 일부 데이터를 제외 (too short captions, non-English captions, boilerplate phrase로 주로 구성된 데이터, aspect ratio[1/2, 2] 범위를 벗어나는 경우)
- MS-COCO
- YFCC100M is a that dataset contains a total of 100 million media objects, of which approximately 99.2 million are photos and 0.8 million are videos, all of which carry a Creative Commons license. Each media object in the dataset is represented by several pieces of metadata, e.g. Flickr identifier, owner name, camera, title, tags, geo, media source.
Training
- dVAE
- 64장의 16GB V100 GPU 사용 (Batch size = 512, GPU당 batch size = 8, Total updates = 3백만)
- Transformer
- 1024장의 16GB V100 GPU 사용 (Batch size = 1024, GPU당 batch size = 1, Total updates = 43만)
Reference
https://littlefoxdiary.tistory.com/74
https://velog.io/@tobigs16gm/논문리뷰-Zero-Shot-Text-to-Image-Generation-DALL-E
https://www.youtube.com/watch?v=CQoM0r2kMvI&t=1981s
https://jiho-ml.com/weekly-nlp-40/
'인공지능 > CV' 카테고리의 다른 글
[논문리뷰]CLIP : Learning Transferable Visual Models From Natural Language Supervision (0) | 2022.07.01 |
---|---|
[논문리뷰] CoCa: Contrastive Captioners are Image-Text Foundation Models (0) | 2022.06.06 |
인공지능이 만드는 폰트 [ HAN2HAN : Hangul Font Generation] (0) | 2021.11.13 |
GAN에서의 미분 (Pytorch) (0) | 2021.10.13 |
YOLOv3를 이용한 턱스크찾기 프로젝트 (3) | 2021.05.01 |
댓글