Vision & Language

[논문 리뷰] Learning Transferable Visual Models From Natural Language Supervision (CLIP)

dhk1349 2022. 11. 13. 04:53

  안녕하세요. 오늘 리뷰할 논문은 OpenAI에서 발표한 Learning Transferable Visual Models From Natural Language Supervision이라는 논문으로, 보통 CLIP이라고 많이 부르기도 합니다. 개인적으로 해당 논문을 기점으로 Multimodal 관련 연구가 엄청나게 활발하게 진행되었고, CLIP이 여러 task에서도 활용이 되는 모습을 보여주었습니다. 

 

  CLIP은 image encoder에서 뽑아내는 embedding과 text encoder에서 뽑아내는 embedding이 같은 embedding space를 공유하도록 학습하는 것이 목적이고 가장 중요한 부분이라고 보시면 됩니다. Text encoder와 image encoder가 embedding space를 공유할 수 있게 되면 딥러닝 모델의 훨씬 유용해집니다. 예를 들어보면 "강아지 사진입니다."와 실제 강아지 사진이 같은 representation vector를 가지되는 것입니다. 

 

  본 논문의 1저자 중에 김종욱님 박사님이 계십니다. 개인적으로는 Deep Learning 분야에 한 획을 그은 논문 중에 하나라고 생각을 하는데, 논문에 한국 분이 계셨다는게 굉장히 신기했습니다. 이번에 블로그 논문 리뷰를 하면서 김종욱님의 Bio 웹페이지를 보게 되었는데 NC와 카카오에서 일을 하셨었다고 합니다(ㅇㅁㅇ). 해당 논문은 본문만 해도 26페이지나 되기 때문에 가장 중요한 부분만 리뷰해보도록 하겠습니다.

 

(해당 글은 개인적인 기록을 목적으로 잘못된 내용이 있을 수 있음을 알립니다.)

(https://arxiv.org/abs/2103.00020)

 

0. Abstract

  일반적으로 computer vision의 최신 모델들을 보면 정해진 범주의 객체들을 가지고 학습을 진행하는게 일반적이라고 합니다. 데이터셋에 보통 클래스의 갯수가 정해져있고 그걸로 학습을 한다는 뜻입니다. 하지만 이렇게 제한된 상황 속에서 모델을 학습시킨다면 모델의 범용성이 떨어지기 마련입니다. 그래서 잘 정되된 데이터셋의 라벨이 아니라 이미지들에 대한 가공되지 않은 raw text를 사용하고, 저자들은 이를 통해 모델의 범용성을 넓히려는 시도를 했습니다. 저자들은 굉장히 간단한 방식으로 인터넷에서 모은 방대한 양(400M의 image,text pair)의 데이터 셋을 효과적이고 scalable하게 사전학습(pre-train)을 했다고 합니다. 

  

  Pre-train을 하고 난 후에는 zero-shot image classification을 시작으로 30개 이상의 굉장히 다양한 downstream task에서 준수한 성능을 보여주면서 해당 모델의 유용함을 증명하였습니다. 또한 이러한 결과를 통해 기존의 vision encoder들과는 다르게 dataset specific한 지식에 의존하는 경향이 적다는 것을 보여주었습니다. 이는 새로운 task에 적용을 하기 위해서 별도의 tuning을 거칠 필요가 적

다는 것을 이미하기 도 합니다. 

 

  아래는 CLIP의 github입니다. 코드는 굉장히 간단하게 구현이 되어있어서 관심이 있으신 분은 구경하셔도 좋을 것 같습니다. 그리고 model weight를 제공하고 있기 때문에 REAME에 나와있는 코드를 사용해서 직접 사용해보실 수도 있습니다. COLAB에서도 돌아가니 참고 하시면 좋을 것 같습니다. 

 

1. Introduction and Motivating Work

  NLP 분야는 pre-train perspective, seq-to-seq I/O, MLM & autoregressive task agnostic objective 덕분에 특정한 task에 구애 받지 않고 자연어 자체를 잘 이해할 수 있는 scalable 모델을 만드는 방향으로 발전이 되어왔습니다. 이 부분은 transformer가 섞여있는 vision 논문에서 자주 나오는 말 같습니다. 이미지 representation를 라벨이 아닌 자연어를 통해 학습을 시키려는 시도가 처음은 아닙니다. 하지만 애초에 컴퓨팅 파워의 급격한 상승과 함께 찾아온 딥러닝의 부흥에 빠질 수 없었던 것에 잘 구축된 데이터셋(라벨)이었던 만큼 noisy language supervision은 학습을 방해하는 큰 요소입니다. 물론 라벨링에서 자유로우면서, 자연어를 supervision으로 사용, 이해할 수 있게 하기 위해서는 엄청난 량의 데이터를 필요로 한다고 합니다. 그렇기에 저자들을 400M개의 image, text pair로 구성된 데이터셋을 구축하였고 ConVIRT로부터 영향을 받은 CLIP(Contrastive Language-Image Pre-training)이라는 모델을 제안합니다. CLIP에 이름에도 나와있듯이 거대한 양의 데이터셋 뿐만 아니라 모델 학습을 위해 사용된 contrastive learning method도 학습을 위해 중요한 요소임을 유추해볼 수 있습니다. 

 

  Abstract에서도 언급된 것처럼 CLIP은 pre-train 과정에서 정형화되있지 않고 다양한 이미지와 자연어를 학습하면서 zero-shot downstream task들에서 굉장히 강한 모습을 보여줍니다. 

 

 

2. Approach

2.1. Natural Language Supervision

  저자들은 과거의 연구에서는 복잡도가 높은 자연어를 처리하기 위해서 n-gram representation이나 topic model 등의 방법을 사용했다고 하는데 지금은 뛰어난 language model들이 있어서 굳이 이런 노력 없이도 자연어의 representation을 잘 뽑아내는 것이 가능해졌습니다. 과거에는 human prior가 많이 주입하여 encoder를 만들고 자연어의 representation을 뽑아서 사용하려 했다면 지금은 그런 prior 없이도 자연어를 잘 이해하는 모델을이 많이 때문에 자연어로 model supervision을 제공하기가 더 용이해졌다고 생각하면 될 것 같습니다. 

 

  또한 자연어를 model supervision의 수단으로 사용하게 되면 dataset의 scalability가 말도 안되게 커진다는 장점이 있습니다. 라벨링을 하는 수고로움이 없으니 쉽게 데이터셋의 사이즈를 쉽게 키울 수 있게 됩니다. 또한 natural language supervision은 representation을 학습할 때 이를 여러 token들로 이루어진 자연어와 유동적으로 관련지어가며 학습하기 때문에 zero-shot 성능이 좋게 나오게 됩니다. 

2.2. Creating Sufficiently Large Dataset

  Computer vision에서 주로 사용되는 MS-COCO, Visual Genome, YFCC100M 등의 데이터셋은 모두 어느정도 한계를 지니고 있습니다. 데이터셋이 양질이면 샘플의 수가 부족하고, 데이터셋의 사이즈가 충분하며 질이 떨어지는 trade-off 현상이 불가피하게 보입니다. YFCC100M 같은 경우는 유용한 샘플을 추려내면 데이터셋 크기가 ImageNet과 비슷해진다고 합니다. 

 

  저자들은 인터넷을 통해서 natural language supervision의 lower bound quality가 어느정도 보장된 대용량 데이터셋을 구축하기로 합니다. 최대한 넓은 범위의 이미지를 포함할 수 있도록 하기 위해서 인터넨 상에 존재하는 (image, text) pair의 text에 미리 만들어둔 500,000개의 쿼리 중 하나의 단어가 최소한 하나라도 포함되어있기만 하면 데이터셋에 추가하였다고 합니다. 여기서 나온 text는 image에 대한 caption 정보입니다. 그리고 500,000개의 쿼리셋은 영어판 위키피디아에서 최소한 100번 이상 등장해야하는 등의 필터를 적용하여 만들었다고 합니다. 또한 쿼리 당 (image, text) pair가 최대 20,000개까지만 저장되도록 하였습니다. 

2.3. Seleting an Efficient Pre-Training Method

  기존의 computer vision SOTA 모델들이 엄청난 연산량을 통해서 학습을 했음에도 불구하고 1000개짜리 클래스 갯수를 가진 데이터셋에서만 작동한다는 것을 감안하면, 해당 논문에서 범위가 거의 정해지지 않은 이미지들을 이해할 수 있게하는 모델을 만들려고 하는 시도는 파격적이라고 볼 수 있습니다.

VirTex Pretrain setup
VirTex Pretrain setup

  몇 가지 학습 방법을 시도하였는데 첫 번째가 위 VirTex와 같은 모양으로 transformer language encoder를 함께 학습시키는 방법이었습니다. 하지만 transformer encoder가 visual encoder인 ResNet-50보다 2배의 연산량을 잡아먹으면서 ImageNet 데이터셋 기준으로 학습 효율이 다른 방법에 비해 훨씬 떨어졌다고 합니다. 해당 방법보다 훨씬 간단했던 bag-of-word를 예측하는 방식이 더 효율적이고 성능도 좋았다고 합니다. (bag-of-word prediction 방식)

 

  마지막으로 가장 성능과 효율이 좋았던 방식인 bag-of-words contrastive 방식입니다. 아래 그림과 함께 간단하게 설명해보겠습니다. 모델에 forwarding하는 N개의 (image, text) batch가 있다고 가정해보겠습니다. N개의 image와 text는 각각 image encoder와 text encoder에 통과되어 N개의 image representation과 text representation을 구하게 됩니다. 이렇게 구한 representation은 NxN으로 곱해주게 됩니다. 각각의 image/text representation은 동일한 dimension을 가지고 있으며 두 벡터를 곱해주면 image representation과 text representation의 cosine similarity라고도 해석이 가능합니다. 그래서 위에서 말한 방식 대로 계산을 하면 총 NxN개의 cosine similarity 값이 나오게 됩니다. 이 중에서 대각선 위치에 있는 pair들(아래 그림에서 파란 색으로 칠해진 부분)이 올바는 쌍이고 나머지는 맞지 않는 쌍이 됩니다. 그래서 파란색 부분은 유사도가 높게 나머지 부분은 유사도가 낮아지도록 하는 방향으로 학습을 하게 됩니다. bag-of-words contrastive라는 이름에 맞게 contrastive 방식으로 모델을 학습 하는 것입니다. 

 

CLIP의 구조
CLIP의 구조

 

학습 과정의 수도코드도 참고 하면 이해에 도움이 될 것 같습니다. 

 

Pseudo code
Pseudo code

2.4. Choosing and Scaling a Model

Image encoder 부분은 ResNet을 자체적으로 계량한 모델과 ViT를 선택을 했다고 합니다. Text encoder 부분은 Transformer(63M)를 사용했다고 합니다. 

2.5~

  보통 classification task를 가지고 다른 모델들과 비교를 하는데, inference를 할 때는 클래스 이름(보통 단어 하나)를 넣기보단 해당 클래스가 들어간 문장을 만들어 주는 식으로 성능을 소폭 상승시켰다고 합니다. 이 방식은 prompt engineering이라고 부르며, 예를 들어보면 "A photo of a {label}, a type of pet."  같은 식으로 만들 수 있습니다. 그리고 클래스 이름이 다른 의미로 해석 될 수 있기 때문에 "A type of pet" 같은 문구를 추가해준 것 입니다. 

 

  CLIP은 특정 데이터셋으로 tuning을 하지 않은 채로 supervised 방식으로 학습된 ResNet50과 27개의 데이터셋에서 비교했을 때 16개 데이터셋에서 더 좋은 성능을 보였다고 합니다. 또한 ImageNet zero-shot, few-shot 세팅에서는 SimCLR 같은 모델들과 비교를 진행했는데 여기서도 좋을 성능을 보였습니다. 실험에 대한 자세한 내용은 논문을 참고해주시면 좋을 것 같습니다.