CLIP: Learning Transferable Visual Models From Natural Language Supervision
https://arxiv.org/abs/2103.00020
Last updated
Was this helpful?
https://arxiv.org/abs/2103.00020
Last updated
Was this helpful?
NLP는 MLM이나 auto regressive 같은 Task-agnostic(task에 관계없이 적용 가능한; foundation model을 만들고 여기저기 다양한 task에 활용할 수 있는) 방법론 덕분에 자연어 자체를 잘 이해할 수 있는 scalable한 모델을 만드는 방향으로 발전할 수 있었음 ⇒ Task에 맞는 output head나 데이터 없이도 zero-shot transfer이 가능함 (ex. GPT-3)
CV의 기존 CNN 기반 vision 모델은 zero-shot task에 대해서는 성능이 낮음
당시 ImageNet SOTA는 88.4%였지만 zero-shot setting으로 할 경우 11.5% 밖에...
본 논문은 4억개의 이미지-텍스트 쌍으로 학습한 ConVIRT의 간단한 버전 모델인 CLIP을 제안함
자연어에 포함된 supervision으로부터 학습하는 것이 핵심
자연어를 이용해 학습하는 것에는 다음과 같은 장점이 존재
라벨링을 할 필요가 없으니 dataset의 scalability가 커질 수 있음
이미지와 자연어 쌍은 비교적 Web 상에서 구하기 용이함
Natural language supervision은 representation을 학습할 때 언어에 대한 representation까지 학습하므로 zero-shot transfer이 가능할 것
MS-COCO, Visual Genome은 퀄리티가 높지만 양이 적음
YFCC100M는 1억개지만 각 이미지에 대한 meta 데이터가 sparse하고 품질에 일관성이 없음(=퀄리티가 낮음)
WIT(WebImageText)라고 명명한 4억개의 Image-Text 쌍의 데이터셋을 직접 만듬
미리 만들어둔 500,000개의 쿼리 중 단어가 하나라도 포함되어있다면 데이터셋에 추가
500,000개의 쿼리는 위키피디아에서 최소한 100번이상 등장해야하는 필터링을 적용
데이터 균형을 위해 쿼리당 쌍을 20000개 까지만 저장
ImageNet 데이터셋의 양 30배 이상의 규모
VirTex와 유사하게 CNN기반 image encoder와 transformer 기반 decoder를 이용해 image captioning 방법으로 함께 학습시켜봄
VirTex는 ConvNet + Transformer로 이미지에 대한 natural language caption을 생성하는 방법임
Image Captioning 방법은 이미지와 단어를 정확하게 예측하고자 하는 task임
한 이미지에 대해 서술되는 것이 다양할 수 있기 때문에 정확한 단어를 예측하는 것은 몹시 어려운 task
따라서 Figure 2처럼 Transformer 모델은 너무 느려서 비효율적임
본 논문은 한 단어가 아니라 text 전체를 쌍으로 놓고 학습시킴
최종 선택한 CLIP 모델이 image captioning baseline보다 4배 더 효율적임
Contrastive 방식이 predictive 방식보다 Representation을 학습하는데는 더 잘됨
1개의 batch에는 N개의 (image, text) 쌍이 존재
x 개의 가능한 (image, text) 쌍의 가짓수를 만들 수 있음
개의 positive pair, 개의 negative pair
각각의 image-text representation을 곱하여 cosine similarity를 구함
Pos pair에서의 유사도는 최대로, neg pair에서의 유사도는 최소가 되도록 각 유사도 점수들에 대해 symmetric cross entropy loss를 optimize함
데이터셋이 충분히 커서 overfitting 문제는 고려하지 않음
Image Encoder는 ImageNet weight를 사용하지 않음
Text Encoder도 pretrained weights를 사용하지 않음
data augmentation을 random square crop만 사용
훈련과정에서 softmax logit 범위를 조정하는 parameter를 사전에 고정하는 하이퍼파라미터로 설정하는 대신 optimize하도록
Image Encoder로는 2개의 모델 구조를 고려
ResNet-D: ResNet50, ResNet101, ResNet50x4, ResNet50x16, ResNet50x64
ViT: ViT-B/32, ViT-B/16, ViT-L/14
Layer normalization 추가
Text Encoder로는 Transformer 사용
base
63M parameter
12 layer
8 attention head
32 epoch 학습
Batch Size: 32,768
다양한 학습 및 메모리 최적화 기법 사용
Mixed-precision
gradient checkpoinint 등
Contrastive Language Image Pretraining 모델의 각각의 encoder로부터 feature embedding을 구하고 cosine similarity를 계산해서 softmax를 통해 확률분포로 정규화함
가장 높은 값을 정답으로 classification 하는 것
Visual N-Grams모델과 비교했을 때 월등히 zero-shot classification 성능이 좋음
Visual N-Grams 연구가 나오기 전에는 Transformer 모델도 없었으며 학습 데이터 양또한 CLIP이 많았기 때문에 공평한 조건의 비교는 아니라고 언급
image classification dataset은 label이 숫자 ID로 구성되는 경우가 많아 zero-shot transfer이 어려움
다의성(Polysemy) 문제도 존재
Class Name 만이 존재할 때 예를 들어 boxer
는 운동선수인지 강아지 종인지 모름
text pair가 single word로 존재하는 경우가 적고, image를 full sentence로 설명하는 경우가 많아서
⇒ default prompt template으로 A photo of a {label}
사용
프롬프트만 바꿔줬을 때, 4배 더 많은 연산을 한 모델과 같은 성능을 보임
GPT3 처럼 task마다 prompt text를 커스터마이징 해줌으로써 zero-shot 성능을 향상시킬 수 있었음
라벨이 자연어다보니 Prompt Engineering에 따라 img classification 성능이 천차만별
Prompt Engineering이 중요함
27개의 dataset을 가지고 ImageNet pre-trained ResNet50을 Linear probe한 모델과 Zero-shot CLIP의 성능을 비교
Linear Probe: Supervised Learning으로 Classifier만 fine-tuning
Encoder가 좋은 representation learning을 했다면 단순히 classifier만 학습해도 성능이 좋을 것이라는 전제
27개의 dataset 중 16개에서는 성능이 좋았지만 세부적인 representation learning이 필요한 데이터셋에서는 성능이 안좋음
General한 task에는 zero-shot transfer가 linear probe보다 좋음 ⇒ 튜닝을 한 것 보다 안한게 더 좋다.
MNIST에서도 성능이 안좋은데 이게 pretraining dataset에 MNIST 같은 류의 데이터셋이 없어서라고 논문에서는 말함
CLIP Zero-shot task는 다른 모델들(SimCLR, BIT)의 few-shot 결과보다 좋음
CLIP Zero-shot 성능은 4-shot linear probe CLIP의 성능과 비슷함
Zero-shot을 잘한다고 Representation learning 능력이 좋다고 단정짓기 어려우니 Linear probe을 할 때 FC layer를 사용하지 않고 Logistic Regression Linear Classifier를 사용
FC layer는 model의 representation failure를 가릴 수 있기 때문에 좀 더 representation 능력을 정확히 파악하고자함
12개 / 27개의 데이터셋을 평가한 점수를 평균냄
CLIP-VIT가 가장 성능이 우수함
image-text pair를 Contrastive Learning 하는 방법이 representation learning하는데 우수함
ImageNet dataset에 변형을 주고(distribution shift) ResNet과 Zero-shot CLIP 모델의 성능을 비교
Vision 모델의 공통적인 한계
학습한 데이터셋에 노이즈가 섞인다던가 등의 변형이 이루어지면 성능이 감소함== Robustness가 낮음
ImageNet에서 pretrained된 ResNet101보다 CLIP이 더 Robust함 ⇒ Multi-modal model은 기존 Vision 모델의 한계를 극복함
few-shot 이미지가 추가될수록 성능이 높아지지만 여전히 zero-shot의 robustness 성능이 더 좋
Fine-tuning을 잘못시키면 일반화 성능을 해칠 수 있음을 보임
Oxford IIT Pets test set으로 개와 고양이를 labeling하는 task를 수행
CLIP Zero-shot이 사람보다 성능이 좋음
CLIP Zero-shot은 ResNet50과 비슷한 수준이지만 SOTA보다는 낮음
SOTA 수준까지 성능을 올릴려면 계산량이 1000배 정도 늘려야함
여전히 몇몇 task들(지엽적인 이미지 분류)에는 성능이 낮음
Task specific한 모델들에 비해 fine-grained classification에서 성능이 낮음
abstract 및 systemic한 task(이미지에서 숫자 제거) 에서도 성능이 낮음
CLIP pretraining dataset에 없는 novel task에서도 성능이 낮음
CLIP이 generalization 문제를 완전히 해결하지는 못함
인터넷 상의 데이터로 학습했기에 Social bias를 학습할 위험 존재
"Is a Caption Worth a Thousand Images? A Controlled Study for Representation Learning" 논문 내용
CLIP은 data scale이 중요함. data scale이 뒷받침되지 않는 경우 language supervision은 모델 성능을 해칠 수 있음
Caption descriptiveness가 중요함
1개의 상세한 caption이 5개의 러프한 caption보다 낫다.
데이터 스케일이 작을 수록 descriptivness가 중요함
caption의 다양성은 성능에 악영향을 미침
image : caption = 1 : M이라고 하면 M=10 정도에서 saturation함함
하나의 image에 여러개의 object가 존재하는 경우 multi-object를 모두 묘사하는 경우 성능에 악영향을 끼침
Image-Text 대용량 데이터로 Contrastive Learning하면 Zero-shot transfer가 가능함을 보인 논문
NLP 분야에서 널리 쓰이는 task-agnostic pretraining 방식이 CV 분야에도 적용할 수 있음을 보임
"웹에서는이미지 데이터에 텍스트가 함께 있는 경우가 많으니 이 텍스트를 이용해서 supervision을 받아 학습을 하면 vision task도 task agnostic하지 않을까" 라는 가정에서 출발해서 이미지와 텍스트를 contrastive learning했더니 generality(zero-shot)이 좋았다를 정말 다양한 실험을 통해 증명한 논문
증명하기 위한 실험 설계하는 것을 많이 배울 수 있었음
Contrastive 방식이 predictive 방식보다 Representation을 학습하는데는 더 잘됨
그런데 In-batch negative 방식의 contrastive learning에서 batch size보면 진짜 데이터 스케일이 항상 엄청 크게 필요하다...😢
어려운 task에서는 zero-shot transfer가 linear probe보다 성능이 안좋은데, 언어모델을 pretrained weight을 사용하지 않아서 언어 representation에 대한 성능이 그다지 좋지 않아서가 아닐까?
그렇지만 본 논문의 목표는 raw text supervision으로부터 visual representation을 학습하는 것이었으니 transformer encoder의 pretrained weight를 사용하지 않는 선택을 할 수 있다고 생각함