본문 바로가기

AI

[AI 논문] CLIP: Learning Transferable Visual Models From Natural Language Supervision (2021)

당시 NLP에서는 raw data로부터 pre-training을 직접 시켜서 zero-shot transfer가 가능하였다.

 

여기서 zero-shot trasnfer이란 사전 학습 중에 본 적이 없는 새로운 작업이나 데이터에 대해 추가 학습 없이도 바로 성능을 발휘할 수 있는 능력을 말한다. 

 

근데 당시 CV에서는 사람이 직접 labeling한 ImageNet과 같은 데이터셋을 사용해 pre-training하는 것이 표준이었다.

 

만약 사람이 직접 labeling하지 않고 web에서 image를 설명하는 raw text data를 활용한다면, labeling 노동을 줄일 수 있을 뿐만 아니라, fine-tuning이 필요 없는 zero-shot trasnfer도 가능하지 않을까?

 

이것이 CLIP 모델이 탄생한 배경이다.

 

이제부터 이 모델이 어떻게 설계되었는지, 기존 방법과는 얼마만큼 성능이 차이나는지 알아보도록 하자!

 

 

출처

- https://arxiv.org/abs/2103.00020
- https://www.youtube.com/watch?v=dELmmuKBUtI&t=749s

 

Approach

CLIP에서는 인터넷으로부터 400 million의 (image, text) pairs를 수집했다.

주로 이용되던 MS-COCO, Visual Genome, YFCC100M 같은 dataset을 사용하지 않고 밑바닥부터 학습시킨 것이다. 

 

Image-text pair를 사용한 pre-training 기법은 이전부터 존재했지만 학습 효율이 떨어졌다.

Contrastive learning 방식은 image와 text를 매칭시킴으로써 이러한 비효율을 개선시켰다.

 

 

CLIP(Contrastive Learning Image Pre-traning)은 배치 단위로 이루어진 N개의 이미지와 텍스트를 각각 인코더에 통과시켜 임베딩 벡터를 산출한다. 

이때 image encoder는 Modified ResNet/ Vision Transformer를, text encoder는 Transformer를 쓴다.

 

이후 이미지와 텍스트 벡터간의 내적을 통해 코사인 유사도를 계산한다.

총 N^2의 쌍이 있다면 N개는 positive pair이고 (N^2 - N)개는 negative pair일텐데,

positive pair에 대해서는 코인 유사도를 maximize하고, negative pair에 대해서는 minimize하는 방식을 쓴다.

 

최종적으로 이러한 유사도 점수를 기반으로 계산되는 symmetric cross entropy loss를 최소화하는 방향으로 매개변수가 조정된다.

이로써 이미지와 텍스트의 임베딩 벡터가 정확하게 매칭되도록 학습되는 것이다!

 

 

Contrastive pre-training을 마치면, 이젠 test를 할 차례!

적용하고자 하는 특정 하위 문제의 데이터셋 레이블을 텍스트로 변환하는데, 이때 단순 단어가 아닌 'a photo of {object}'와 같은 구로 변환시킨다.

예를 들어 plane, car, dog를 입력하는 것이 아니라, 'a phot of plane', 'a photo of car', 'a photo of dog'를 입력한다는 뜻!

이렇듯 단어에서 구로 변환하여 text encoder에 입력하면 성능이 향상되었다는 실험 결과를 보여준다.

 

이후 학습된 텍스트 인코더에 통과시켜서 텍스트 임베딩 벡터값(T1, T2, T3, ..., Tn)을 산출한다.

 

마지막으로 예측하고자 하는 이미지를 학습된 이미지 인코더에 통과시켜서 이미지 임베딩 벡터값(I1, I2, I3, ..., In)을 산출한다.

그러면 코사인 유사도 계산 결과 상대적으로 높은 값을 갖는 텍스트를 선택하겠지?

 

이 방식은 fine-tuning 과정을 거치지 않아도 처음 보는 이미지에 대해 예측이 가능하다!

 

아래는 CLIP 모델을 numpy로 구현한 코드이다.

 

 

Analysis

 

위 실험은 27개의 데이터셋에 대해서 CLIP과 ResNet50 모델의 성능 차이를 비교하였는데, 무려 16개 데이터셋에 대해 CLIP이 더 좋은 성능을 보였다. (MNIST 데이터셋은 패배...)

 

 

또한, training set과 test set이 동일하지 않고 변형된 사진의 test에서도 CLIP 모델이 ResNet보다 좋은 성능을 보여준다.

 

Conclusion

우리는 이로써 서론에서 언급했던 궁금증을 CLIP 모델이 해소시켰음을 알게 되었다!

 

충분한 규모의 데이터셋으로 학습하면 CLIP은 특정 작업에 특화된 모델들과 경쟁할 만한 성능을 보여줄 수 있지만, 여전히 개선의 여지가 남아 있다.


이로써 CLIP 모델에 대한 공부도 막을 내렸다.

지금까지 본 4개의 논문을 완벽히 습득하진 못했지만, 대략적인 컨셉을 이해하고 관련된 키워드가 병리 논문에서 나왔을 때 적용할 수 있는 정도로는 학습한 것 같다!

 

다음은 본격적으로 병리 WSI 데이터를 다룰 때 자주 등장하는 기법인  MIL(Multiple Instance Learning)에 대해 알아보겠다!