Machine & Deep Learning

[yongggg's] CLIP: Learning Transferable Visual Models From Natural Language Supervision paper review

Yonggg 2024. 11. 5. 10:06

요새 멀티모달의 연구가 활발히 진행되고 있습니다. 저도 이 분야에 관심이 생겨서 제일 기초가 되는 중요한 논문을 하나 리뷰하고자 합니다. 이 논문이 나오기 전, 컴퓨터 비전 SoTA 모델은 특정 카테고리 내에서 이미지-라벨 처럼 고정된 형태(ex; 특정 카테고리 내의 데이터, 간단한 짧은 텍스트 및 레이블이 붙은 데이터)의 데이터를 학습했습니다. 이 방법은 모델의 generality와 다른 task에서 사용 가능성이 줄어듭니다.  

하지만 이미지와 이 이미지를 설명하는 조금 더 상세한 텍스트(raw text)를 라벨로 사용한다면 위의 문제를 해결할 수 있을 것입니다.

어떻게 CLIP을 구현했는지 자세하게 알아봅시다!

Introduction

자연어처리 분야에서 raw text를 이용해 pre-training 하는 방식은 계속 발전했다. MLM(Masked LAnguage Modeling) 방법은 task에 구애받지 않는 (task-agnostic) 학습을 대규모 데이터를 이용하여 구현했다. 또, text-to-text 방식을 사용하면서 task 마다 다른 token을 사용하는 등 task 마다 다르게 사전 작업해줘야 할 일도 사라졌다.

이렇게 발전된 pre-training 방법을 모두 적용한 GPT-3는 labeling 되어 있지 않은 데이터셋으로도 다양한 task에서 좋은 성능을 낼 수 있었다. (즉, 자연어처리 분야에서는 적은 양의 고품질 labeled dataset 보다, 많은 양의 웹 상에서 수집된 label 없는 데이터가 학습에 더 용이하게 사용된다.) 하지만, 컴퓨터 비전 분야에서는 적은 양의 고품질 labeled dataset을 이용해 계속 학습했다.

 

본 연구에서는 자연어처리 분야처럼 웹 상에서 수집된 text로 부터 pre-training 하는 방식을 컴퓨터 비전 분야에 적용할 수 있다고 주장한다.

text로 부터 image representation을 학습시키는 방법론은 이전부터 있었고, 최근(2021년) 방식은 transformer-based의 language modeling, masked language modeling 및 contrastive objectives 등을 이용하는 방법이 있다. 그러나 text 로 부터 image의 representation 을 학습시키는 방법론올 사용한 연구는 다른 방법론에 비해 성능이 좋지 않다. 예를 들면, text 로 부터 image representation을 학습시키는 방법론인  Learning Visual N-Grams from Web Data, Li et al., 2017 연구에서는 ImageNet의 정확도가 11.5%밖에 되지 않았는데, 가장 좋은 성능(SOTA)은 88.4%기 때문이다.(Self-training with Noisy Student improves ImageNet classification, Xie et al., 2020) 대신 weak supervision의 사용은 성능 향상을 보였다.

weak supervised model과 최근 연구되는 자연어 처리를 이용한 image representation model과의 차이점은 크기(scale)이다. 최근 모델들은 수백만에서 수십억개의 이미지를 사용하지만, VierTex, ICMLM, ConVIRT와 같은 이전의 weak supervised 모델들은 20만 개의 이미지만을 이용해 학습되었다. 최근에는 웹 상으로부터 데이터를 얻기가 더 쉬워졌기에 우리는 4억개의 image-text pairs를 만들었으며, 이를 ConVIRT의 간단한 버전을 이용해 학습했는데, 이를 Contrastive Language-Image Pre-training, 줄여서 CLIP이라 부른다. GPT 모델과 같이, CLIP 또한 다양한 분야의 task에 적용할 수 있으며, 특정 Task만을 위해 만들어진 모델과 비교도 할 수 있다.

특히, linear-probe 방식을 이용한 fine-tuning에서 CLIP이 다른 모델들보다 성능이 좋으며 효율적이라고 한다. 또한 zero-shot CLIP 모델이 같은 정확도를 가지는 다른 모델들보다 더 robust 하다.

Approach

Natural Language Supervision

본 연구에서는 자연어를 이용한 지시(Natural Language Supervision)이 핵심이라고 한다. 이전 연구에서도 본 연구에서 사용한 방법론을 이용한 학습을 했는데, 방법론을 부르는 명칭은 다양했다.(unsupervised, self-supervised, weakly supervised, supervised ...)

 

자연어를 이용한 방법론은 다음과 같은 장점이 있다.

1. scale을 키우기 쉽다. (이전에는 scale을 키우기 위해, 하나하나 라벨링 데이터를 만들었다.)

2. 단순히 이미지를 text representation으로 학습하는 것이 아니라 모델이 이미지를 조금 더 깊게 이해할 수 있도록 'zero-shot transfer'를 가능할 수 있게 한다.

Creating a Sufficiently Large Dataset

이때까지의 연구들은 주로 세 가지 dataset(MS-COCO, Visual Genome, YFCC100M)을 사용했다. MS-COCO와 Visual Genome은 양질의 Labeled dataset이지만 개수는 10만개 정도로 적다. 또, 35억개의 인스타그램 사진(Exploring the Limits of Weakly Supervised Pretraining, Mahajan et al., 2018)을 이용해 학습하기도 한다. YFCC100M dataset은 1억개의 사진이 있어 비교적 데이터 양이 크지만, 비교적으로 양질의 데이터가 아니다. 본 연구에서 새로운 데이터셋을 새로 만들었는데, 약 4억개의 인터넷에서 수집한 Image-text pairs이다.

데이터의 다양성을 얻기 위해, 약 5만 개의 Text query를 이용했으며, 하나의 쿼리에서 2만개가 넘는 Image-text pairs를 갖지 않도록 했다.(query를 이용해 text-image 매칭을 한 뒤, pair를 만들어주는데, 한 query 당 image가 2만개를 넘지 않도록 했다.) 사용된 dataset의 총 단어 수는 GPT-2에서 사용한 WebText 양과 유사하며 본 연구에서 사용한 데이터셋은 WebImageText(WIT)라고 부르기로 한다.

Selecting an Efficient Pre-Training Method

기존 연구에서는 ImageNet dataset에서 1000개의 class를 분류하기 위해 많은 GPU memory를 사용했다. 본 연구에서는 효율적으로 학습하는 것이 중요하다고 생각했고 방법을 고심했다.

본 연구의 초기 접근 방법은 VirText와 유사하게 이미지는 CNN으로, text는 transformer를 이용해 학습하고 각각 Image와 Image에 대한 설명 텍스트(caption)을 예측하는 task를 수행했다. 그러나 이 방법으로는 효과적으로 모델의 크기(scale)를 증가시키기 어려웠기 때문에, 이미지에 해당하는 text를 예측하는 Task를 수행할 때의 과정을 수정하여 효율적인 학습이 가능하도록 했다.

기존 방식은 text 문장을 예측할 때 단어의 순서까지 정확히 맞추는 Task로 학습을 했지만, 본 연구에서는 순서는 고려하지 않고 예측할 수 있도록 bag-of-words encoding을 사용하여 contrastive learning을 했다.

학습 방법:

  1. 기본적으로 batch 단위로 학습한다. 예를 들어 batch size가 N이면, N개의 Image-text pair가 있는 것이다.
  2. text는 Text Encoder를 이용하여 vector 값으로 표현하고, 이미지는 Image Encoder를 이용해 vector 값으로 표현한다.
  3. N개의 text vector와 N개의 image vector사이의 코사인 유사도를 구한다.
  4. 총 $ N \times N = N^{2} $개의 값이 나오는데, N개는 실제 image-text pair에서 나온 값이며, $N^{2} - N$개는 다른 image-text pair에서 나온 값이다.
  5. 이 유사도 값을 이용하여 Cross Entropy loss 값을 계산하고 최적화한다.(pseudocode)

본 연구에서는 사용한 dataset의 개수가 많기 때문에, over-fitting 문제는 고려하지 않았다. 따라서 CLIP의 Text Encoder와 Image Encoder에는 다른 pre-trained weight / ImageNet weight을 사용하지 않고 처음부터 학습했다.

이전의 연구들과 다르게 Image와 text representation을 multi modal embedding으로 보낼 떄, non-linear projection을 하지 않고 linear projection을 했다.($np.dot(l_{f}, W_{i}), np.dot(T_{f}, W_{t})$, 실험적으로 non-linear와 linear의 성능의 차이가 없었다.)

Choosing and Scaling a Model

본 연구에서는 Image Encoder로 두 가지 모델을 이용했으며 (Resnet-50, Vision Transformer: ViT), Text Encoder로는 Transformer를 이용했다.

이전의 컴퓨터비전 연구에서는 모델의 너비 혹은 깊이 중 하나만 이용해 모델을 확장했지만, 본 연구에서는 ResNet Image Encoder의 너비, 깊이, 해상도 모두를 확장했으며(세가지를 확장하는 것이 성능적으로 우수함.), Text Encoder의 경우 ResNet 너비와 맞췄으나, 추가적인 깊이의 증가 없이도 CLIP 성능이 크게 바뀌지 않는다는 것을 알았다.

Training

5가지 ResNet 모델(ResNet-50, 100, RN50x4, RN50x16, RN50x64)을 사용했고, 3가지의 Vision Transformer 모델(ViT-B/32, ViT-B/16, ViT-B/14)을 사용했다.

효율적인 학습을 위해서 1) 32,768의 minibatch 사용, 2) gradient checkpointing, 3) half-precision Adam statistics, 4) half-precision stochastically rounded text encoder weights를 사용했다.

가장 큰 ResNet모델인 RN50x64 모델은 592대의 V100으로 18일이 걸렸으며, 가장 큰 ViT 모델은 256대의 v100을 이용해 12일이 걸렸다.

Experiments

Zero-Shot Transfer

본 연구에서 정의하는 zero-shot transfer는 학습 때 사용하지 않은 dataset에 대해 image classification하는 task를 의미한다.(image classification에서 zero-shot transfer를 처음 사용한 연구는 Visual N-Grams이다.)

모든 dataset에 대해 Visual N-Grams의 zero-shot transfer 성능을 CLIP 성능이 능가하는 것을 볼 수 있다.

GPT-3 논문에서 prompt engineering을 잘하는 것(prompt를 잘 짜는 것)이 zero-shot 성능을 높일 수 있다고 밝혔다. 따라서 본 연구에서는 "A photo of a {label}, a type of pet"과 같은 형식의 prompt를 default로 사용했으며, ImageNet에서는 80개의 다른 prompt를 사용하는 것이 하나의 default prompt를 사용하는 것보다 3.5% 높은 성능을 기록했다. 최종적으로 prompt engineering을 사용함으로써 5%의 성능 향상을 이끌어냈다. 

CLIP의 성능을 확인하기 위해 linear probe 방식(모델의 parameter는 그대로 두고, 모델의 맨 마지막 출력 부분에 Classification을 위한 Linear layer만 추가하여 그 부분만 학습하는 방법)을 통해 fine-tuning 시킨 ResNet-50과 여러가지 데이터셋에 대해 성능을 비교했는데, 그 결과는 위의 그림과 같다. 총 27개의 dataset 중, 16개의 datset에서 CLIP이 더 좋은 성능을 보였다. CLIP이 더 낮은 성능을 보인 dataset은 복잡하거나 추상적인 task였다. 제일 성능이 낮은 EuroSAT dataset은 인공위성 이미지를 분류하는 task인데, 이 task에서 supervised learning을 한 모델(ResNet-50)과 그렇지 않은 모델(CLIP)을 비교했기 때문에 이를 정말 못한다고 단정 지을 순 없다.

따라서, zero-shot CLIP 모델을 few-shot 모델들과 추가적으로 비교했다.

SimCLR의 few-shot 그래프를 보면, 16-shot SimCLR가 Zero-shot CLIP과 성능이 비슷한 것을 알 수 있다.

Reresentation Learning

CLIP을 포함한 모든 모델에 linear probe을 사용해여 성능을 비교했다. 각각 12개, 27개의 dataset에 대한 점수를 평균냈으며, 모든 크기에서 CLIP이 다른 모델보다 좋은 성능을 가졌다.

Robustness to Natural Distribution Shift

2015년에 개최됐던 ImageNet 대회에서는 deep learning이 인간을 뛰어넘었다고 발표했지만, 여전히 simple task에서 실수를 하는 모습이 보였고 benchmark dataset에서는 인간본다 좋지 않은 정확도를 내기도 했다. 이 문제의 추정 근거로는 over-fitting을 유력하게 꼽았다. 즉, train dataset에 존재하는 Image의 in-distribution 특성을 외워버렸고 이 분포와 비슷한 분포의 Image만을 잘 맞춘다는 것이다.

이러한 측면에서 CLIP은 다른 분포의 데이터에 대해서도 훨씬 Robustness 하다고 할 수 있다.

이 그림은 ImageNet의 점수와 다른 Task에서의 점수(Transfer score)의 비교를 나타낸 그림이다. CLIP 모델이 ImageNet의 score와 Transfer score가 조화를 이루며, 분포한다는 것을 볼 수 있다.

Comparison to Human Performance

본 연구에서는 인간의 성능과의 비교를 위해, Oxford IIT Pets datasets의 3669개의 이미지를 37개의 class로 분류하는 작업을 human이 Check하도록 시켰다.

위의 표를 보면, Zero-shot human에서 One-shot human으로 갈 때에는 유의미한 성능 향상이 있었지만, One-shot human에서 Two-shot human으로 갈 때에는 성능 변화가 미미했다. 이 말의 뜻은 '인간은 본인이 무엇을 알고 무엇을 모르는지 알고 있다는 것이다.'(Zero-shot에서 몰랐던 내용 중, 예시 하나를 주었을 때(One-shot) 알게 되는 내용이 생기지만 예시를 더 준다고 해도 모르는 것을 알 수 있는 것은 아니다.)

CLIP은 이 결과와 다르게 shot을 늘려갈수록 성능이 계속 증가했는데, 이는 알고리즘적으로 개선할 사항이 있다고 판단했다.

Limitations

CLIP은 대부분의 task에서 general 하게 성능이 좋으나, 여전히 좋지 않은 성능을 보이는 Task가 존재한다. 특히, Car의 모델을 분류하는 task, 꽃의 종을 분류하는 task 등 복잡한(fine-grained classification) task의 경우에 성능 저하가 심했다. 또한 CLIP은 인터넷에서 가져온 image-text pairs를 가지고 학습했는데, 이 때 필터링이 되지 않았고 이는 social biases를 그대로 학습했을 수도 있다는 문제가 있다. 또, human performance와의 비교 실험에서 인간과 다르게 CLIP은 zero-shot에서 few-shot으로의 전환에서 성능이 떨어지는 결과를 보였다. CLIP의 강력한 zero-shot 방법과 few-shot 방법의 효율적인 결합 방법이 요구된다.