일반적으로 computer vision의 SOTA를 보면 정해진 class를 갖고 학습을 진행하는게 일반적이지만, 이렇게 제한된 class는 모델의 범용성이 떨어짐
따라서, 잘 정의된 데이터셋 label이 아니라 가공되지 않은 raw text를 사용하고, 이를 통해 모델의 범용성을 넓히려는 시도를 한 모델
-> 굉장히 간단한 방식으로 인터넷에서 모은 방대한 양(400M의 image,text pair)의 데이터 셋을 효과적이고 scalable하게 사전학습(pre-train)을 함
Pre-train을 하고 난 후에는 zero-shot image classification뿐만 아니라, 30개 이상의 굉장히 다양한 downstream task에서 준수한 성능을 보여주면서 해당 모델의 유용함을 증명함
또한 이러한 결과를 통해 기존의 vision encoder들과는 다르게 dataset specific한 지식에 의존하는 경향이 적다는것을 보여주고, 이는 새로운 task에 적용을 하기 위해서 별도의 tuning을 거칠 필요가 적다는 것을 의미하기도 함
BERT, OpenAI GPT 등 기존 연구들은 대규모 텍스트 데이터를 모아 사전학습 후 미세조정(pre-training and fine-tuning)하는 방식으로 자연어처리 분야에서 매우 뛰어난 성과를 얻음
그러나, 이런 방식이 computer vision 분야에서도 잘 작동할까?
이미지 분야에서는 CNN 기반 모델이 강한 면모를 보이기는 하지만, crowd-labeled dataset으로 pre-trained된 model을 사용하기 때문에 zero-shot learning에서는 매우 낮은 정확도를 보임
이러한 전통적인 pre-training method 대신, NLP처럼 web text로부터 직접적으로 학습할 수 있는 확장가능한 pre-training method를 개발하기 위해 많은 연구가 이루어졌고 VirTex, ConVIRT와 같은 모델들이 text에서 image-representation을 학습할 수 있는 가능성을 증명함
하지만 앞서 언급된 모델들은 pre-training시 작은 학습 데이터셋 크기의 문제로 다른 SOTA computer vision 모델들 보다 낮은 성능을 보였음
-> 이 논문에서 제시하는 모델인 CLIP은 대용량의 자연어 지도학습을 통해 데이터셋 크기의 차이를 줄이고 이미지를 학습
4억 개의 이미지 + 텍스트(caption) 쌍으로 대규모 학습한 모델로, 자연어 supervision을 사용하여 학습함
- Natural Language Supervision 을 사용하는 이유?
1) 기존에 vision task에서 사용되던 label에 비해 scaling이 쉽습니다.
기존에 사람이 직접 레이블링을 했지만, 그런 과정이 필요없고 자연어를 이용한 학습은 인터넷의 방대한 자료에 포함된 텍스트를 supervision으로 사용하여 학습이 가능합니다.
2) 언어에 대한 representation을 학습한다는 장점이 있습니다.
자연어를 이용하는 학습 방법은 un/semi/self-supervised learning 방법과는 달리 이미지 representation 뿐만 아니라, 언어 representation을 가지기 때문에 조금 더 유연하고 robust한 장점을 가지게 됩니다.
CLIP은 자연어를 supervision으로 주어 학습함
-> 이는 새로운 아이디어는 아니지만, 기존의 많은 image dataset과는 달리 별도의 번거로운 labeling 작업이 필요 없다는 강력한 장점을 갖음
또한, 이미지에 더해 자연어까지 representation learning을 수행할 수 있고, 다른 종류의 task로도 유연하게 zero-shot transfer이 가능함
CLIP에서는 WIT(WebImageText)라고 명명하는 새로운 데이터셋을 만듬
-> 이는 인터넷의 다양한 사이트에서 가져온 4억 개의 (image, text) 쌍으로 구성되어 있고, 최대한 넓은 범위의 이미지를 포용하기 위해 (image, text) pair에서 text는 최소한 하나의 단어라도 미리 정의해논 500,000개의 쿼리에 포함되어 있어야 데이터셋에 포함하고 쿼리 당 (image, text) pair가 최대 20,000개까지만 저장되도록 하여 양질의 데이터셋을 구축
처음의 접근은, Image CNN과 text trasformer를 join하여 이미지의 caption을 예측하도록 학습하였지만, 이미지마다 정확한 토큰을 학습하는 것은 어려우며 속도가 느림
-> 텍스트와 이미지의 관계를 잘 이해할 수 있는 representation을 만들기 위해 contrastive representation learning을 사용함
-> 이 기법은 representation이 데이터들 간의 유사도를 잘 학습하도록 하는 방법이고, 선행연구들에서 이러한 방법이 visual representation에 효과적이라는 것이 소개되기 했음
N개의 (이미지, 텍스트) 쌍의 배치가 주어지면, CLIP은 해당 배치에서 실제로 발생한 N × N 가능한 (이미지, 텍스트) 쌍 중 어떤 것을 예측할지를 학습
이를 위해 CLIP은 이미지 인코더와 텍스트 인코더를 동시에 학습하여 배치의 N개 실제 쌍의 이미지 및 텍스트 임베딩의 코사인 유사도를 최대화하고, N^2 - N 잘못된 쌍의 임베딩의 코사인 유사도를 최소화하도록 함
또한, 유사도 점수에 대해서 교차 엔트로피 손실을 최적화
그림 (2), (3)은 zero-shot prediction을 하는 과정
먼저 적용하고자 하는 특정 하위 문제(downstream task)의 데이터셋의 label을 text로 변환하고, 이를 text encoder에 통과시켜 텍스트 벡터를 구함
구해진 텍스트 벡터와 예측하고 싶은 이미지 벡터간의 유사도를 계산하여 높은 값을 갖는 텍스트를 선택
테스트 시에도 A photo of {object} 또는 A photo of {object}, a type of food 등의 텍스트에 모든 class label을 넣고 text encoder에 넣어 text imbedding feature를 만들고, image는 image encoder를 통과시켜 image imbedding feature 1개를 만듭니다. 이 때 모든 text feature들과 1개의 image feature 간의 similarity를 보고 가장 높은 similarity를 가지는 텍스트를 선택합니다.
아래와 같은 문장형식으로 prediction을 하는 이유는, 애완 동물의 종류 중 하나, 음식 중 하나, 등등의 추가 정보를 text encoding에서 반영할 수 있기 때문에 분류 성능이 향상되기 때문입니다.
"A photo of a {label}, a type of pet."
"a satellite photo of a {label}."
"A photo of big {label}"
"A photo of small {label}"
CLIP은 pre-trained weight를 사용하지 않으며, representation과 contrastive embedding space사이에 multi-modal 임베딩 공간으로의 linear projection만을 사용하함
-> Text가 대체로 한 문장 단위이기 때문에 text transformation function을 사용하지 않으며 image transformation function도 단순화 하여 사용함
위의 코드에서 image_encoder와 text_encoder가 있음
일반적인 computer vision연구에서는 모델의 width 혹은 depth를 독립되게 증가시키지만, CLIP에서는 width, depth, resolution 모두 추가적인 computing을 할당하였고 text encoder의 경우 width만 조절함
전부 32 epoch만큼 학습
3.1.1. Motivation
Computer Vision 분야에서 zero-shot은 처음보는 object에 대한 분류를 예측하는 방식을 말함
-> 본 연구에서는 처음보는 dataset에 대한 분류로 그 의미를 확장함
-> 기존의 일반적인 이미지 분류의 방법에 비해, CLIP은 제로샷을 통해 도메인 일반화에 대한 견고성 평가로 볼 수 있음
3.1.2. USING CLIP FOR ZERO-SHOT TRANSFER
(이미지 분류 task의 경우) 이미지가 주어지면 데이터셋의 모든 class와의 (image, text) 쌍에 대해 유사도를 측정하고 가장 그럴듯한(probable) 쌍을 출력
구체적으로는 아래 그림과 같이, 각 class name을 "A photo of a {class}." 형식의 문장으로 바꾼 뒤, 주어진 이미지와 유사도를 모든 class에 대해 측정하는 방식