[ICML 2021] (CLIP) Learning Transferable Visual Models From Natural Language Supervision

Vision Language Model(VLM)의 근본인 CLIP 논문에 대해 리뷰해보겠습니다. 아이디어와 코드는 아주아주 간단한데, 현재시간 기준 19,543회의 인용률을 달성할 정도로 어마어마한 파급력을 가져온 논문이라는 것은 누구나 다 알고계실 것이라 생각이 됩니다. 해당 논문에 대해서는 이미 이전에 리뷰한 연구원이 있어, 저는 이번에 이해에 도움이 될 수 있도록, 간단한 코드도 함께 정리해보겠습니다.



Background

본격적인 CLIP에 대한 설명에 들어가기 전에, 인공지능 모델의 학습 방식에 대한 두 가지 접근법인 Label Supervision과 Natural Language Supervision에 대해 이야기해보려고 합니다.

Label Supervision, 전통적인 이미지 학습 방식

우선, Label Supervision은 가장 잘 알려져있는 대표적인 이미지 학습 방식이라고 할 수 있습니다. 여기서 “Label”은 이미지가 무엇을 나타내는지 알려주는 ”정답값”이 됩니다.

예를 들어, 상단 이미지와 같이 강아지 사진을 모델에 학습시키고 싶다면, 각 강아지 사진마다 “강아지”라는 레이블이 필요합니다. 이 방식의 단점은 당연하게도, 모든 이미지에 대해 하나하나 레이블링이 필요하다는 점이겠죠.

레이블링에는 많은 시간과 비용이 소요될거라는 건 뭐 다들 익히 알고 계실거라 생각합니다. 지금은 대규모 취급을 못받는 ImageNet (22,000개의 Object와 약 140만 장의 이미지) 을 구축하기 위해, 25,000명이 고용되었다고 합니다. 이렇게 실제 수치로 보니, 데이터셋 구축에 얼마나 많은 사람을 필요로 하는지 새삼 이해가 되었습니다.

문제는 ImageNet이 이제 대규모 데이터셋이라는 부분에 명함도 내밀지 못한다는 점입니다. 모델은 계속계속 커지고, 이에 따라 학습에 사용하는 데이터셋도 무진장 커지고 있습니다. 예를 들어, 현재 무료로 공개된 데이터셋 중 가장 큰 이미지 데이터셋인 LAION은 4억장의 이미지와 텍스트 쌍이 존재하죠. 이렇게 많은 이미지에 레이블링을 한다면 얼마나 많은 시간과 비용이 발생할까요?

이에 대응하여 등장한 방법이 Natural Language Supervision입니다. 이 방식은 NLP 분야에서 비롯되었습니다. 당시 NLP 분야에서는 데이터를 가공하지 않고, 원시(Raw) 텍스트로부터 직접 학습하는 사전학습 방식이 엄청난 인기였습니다. BERT와 GPT-3가 그 대표적인 예시입니다.

이 모델은 인터넷에 존재하는 방대한 양의 텍스트 데이터를 활용하여, 언어를 이해하고 생성할 수 있는 능력을 갖추게 되었습니다. 이는 컴퓨터 비전 분야에서도 유사한 방법으로 모델 학습을 할 수 있을 것이라는 희망을 가져왔고, 이에 Natural Language Supervision이 등장하게 된 것이죠.

Natural Language Supervision: 자연어를 사용한 학습 방식

Natural Language Supervision은 모델 학습에 텍스트 데이터를 활용하는 방법입니다. 이미지를 설명하는 자연어 문장을 그대로 사용하여 모델을 학습시키는 것이죠.

상단 이미지(강아지, 귀여운 강아지가 잔디 위에 앉아있다)와 같이 인터넷에는 수많은 사진과 그 사진에 대한 설명이 존재합니다. Natural Language Supervision에서는 이러한 사진과 설명을 그대로 모델에 제공할 수 있습니다. 즉, 모델은 이미지를 대표하는 추가적인 레이블 없이도 사진과 함께 제공된 설명을 통해 이미지를 이해할 수 있습니다.

이 방식의 큰 장점은 사람이 일일이 레이블을 붙일 필요 없이 이미 존재하는 데이터(이미지와 설명)를 그대로 활용할 수 있다는 점입니다.

결국 Natural Language Supervision는 이미지와 텍스트만을 사용해서 모델을 학습하는 방식입니다. 이게 바로 CLIP의 핵심 학습법입니다. 예시를 통해 설명하자면, 강아지를 나타내는 이미지와 ‘귀여운 강아지가 잔디 위에 앉아 있다’라는 텍스트가 임베딩 벡터 상에서 매핑이 되도록 학습하는 것이죠. 이를 위해 Contrastive Learning 과 같은 학습 기법을 활용하여 매핑되는 이미지와 텍스트 임베딩이 가까워지도록, 서로 다른 이미지와 텍스트는 멀어지도록 학습하는 방법이 많이 활용됩니다.

Related Work (Motivating Work)

그렇다면 Natural Language를 통해 Image를 학습하는 것은 CLIP이 처음일까요? 사실 그렇지는 않습니다. 이미지와 Raw Text를 직접적으로 학습에 사용하는 연구는 이 전에도 있었습니다.

Contrastive Learning of Medical Visual Representations from Paired Images and Text, Machine Learning for Healthcare 2022
VirTex: Learning Visual Representations from Textual Annotations, CVPR 2021

상단에 있는 ConVIRT, VirTex 와 같은 연구에서 이미 텍스트로부터 이미지 표현을 학습하는 데에 있어, Transformer 기반 언어 모델링, masked 언어 모델링, 그리고 contrastive objectives 을 활용하였습니다.

그렇다면.. 없던 방법론을 만든 것도 아닌데 CLIP이 엄청난 인기를 가져오게된 이유는 무엇일까요? 다름아닌 “대규모 이미지-텍스트 쌍 데이터셋”을 학습에 활용했다는 점이 되지 않을까 싶습니다. 다시말해, 기존 연구처럼 Text 임베딩 벡터와 Image 임베딩 벡터를 가깝거나 멀어지도록 학습하되, “인터넷에 존재하는 원본 데이터 바로 사용하는 대규모 모델”을 구축했다는 점이 CLIP이 가지는 기존과의 차별점입니다.

Creating a Sufficiently Large Dataset

기존 연구에서는 주로 MS-COCO, Visual Genome, YFCC100M 세 가지 데이터셋을 사용했습니다.

  • MS-COCO & Visual Genome: 고품질의 크라우드 소싱 라벨링 데이터셋이지만, 각각 약 100,000장의 학습 이미지만을 포함하고 있어 현재 기준으로는 너무 작은 크기의 데이터셋입니다.
  • YFCC100M: 1억 장의 사진을 포함하고 있으나, 각 이미지의 메타데이터가 희소하고 품질이 일관되지 않다는 특징을 가진다고 합니다. 텍스트인 제목이나 설명이 있는 이미지만 필터링하면 약 1,500만 장의 사진만 남게 되어 ImageNet과 비슷한 크기로 줄어든다고 합니다.

BERT나 GPT-3는 인터넷에 공개적으로 존재하는 방대한 양의 데이터셋을 사용하여 엄청난 성능 향상을 가져왔다는 점에서, MS-COCO과 같은 기존 이미지 데이터셋으로는 Natural Language Supervision를 충분히 반영하지 못합니다. 하여 OpenAI는 인터넷의 다양한 공개 소스로부터 400M (4억) 쌍의 이미지와 텍스트를 수집하여 새로운 데이터셋을 구축하였습니다. 데이터셋 구축 과정은 다음과 같다고 합니다

데이터셋 구축 과정

  1. 검색 : 최대한 다양한 시각적 개념을 포함하고자, 500,000개의 쿼리로 이미지-텍스트 쌍 검색
  2. 선별: 각 쿼리에 대해 최대 20,000개의 이미지와 텍스트 쌍을 포함하여 결과를 균형 있게 구성
  3. 최종 데이터셋: 최종적으로 생성된 데이터셋은 GPT-2를 훈련하는 데 사용된 WebText 데이터셋과 유사한 총 단어 수. 이 데이터셋을 WebImageText(WIT)라고 부름

Method: CLIP

이제 본격적으로 CLIP이 어떤 학습 방법론을 사용했는지를 알아보겠습니다. 학습 방식은 엄청 간단해서 아주 간단하게 이해하실 수 있을거라 장담합니다.

1) Selecting an Efficient Pre-Training Method

CLIP은 self-supervised learning 처럼 2-stage로 학습 과정이 구성됩니다. 지금 설명드릴 부분은 CLIP의 핵심이 되는 Pre-training 단계입니다. 여기서는 Contrastive를 통해 이미지와 텍스트 쌍이 동일 임베딩 상에 위치하도록 학습됩니다.

우선 설명을 위해 서로 대응되는 N개의 image-text 쌍이 존재한다고 가정해봅시다.

가장 먼저, 이미지와 텍스트 각각 feature를 추출합니다. 각 도메인에 특화된 인코더를 통해 feature를 뽑습니다.

  • Image encoder: 5 ResNet / 3 ViT
  • Text encoder: Transformer
  • Large minibatch size (32,768)
  • ResNet 592 V100 GPUs, 18days
  • (ViT-L/14 가 성능 제일 좋음. 모든 성능은 ViT로 리포팅)
class Projection(nn.Module):  
    def __init__(self, embedding_dim, out_dim, dropout=0.5):
        super().__init__()
        self.project = nn.Linear(embedding_dim, out_dim, bias=False)
        self.fc = nn.Linear(out_dim, out_dim, bias=False)
        self.layer_norm = nn.LayerNorm(out_dim)   
        self.dropout = nn.Dropout(dropout)                    

    def forward(self, x):
        projected = self.project(x)
        x = F.gelu(projected)
        x = self.dropout(self.fc(x))
        x = x + projected
        embeddings = self.layer_norm(x)
        return embeddings

그 다음으로, 인코딩된 이미지-텍스트 feature에 대해 한번 더 projection layer를 태워서, 동일한 차원의 임베딩 벡터로 위치되도록 합니다. 그 결과 Text, Image 모두 (n, d_e) 차원에 임베딩 벡터로 변형되었습니다.

이제 앞서 구한 Text, Image 임베딩 벡터 간의 유사도를 통해 (n, n) 차원의 matrix를 구합니다. 벡터 간 유사도를 구하기 위해서는 I_e \cdot {T_e}^\intercal를 수행하면 됩니다.

이제 CLIP은 N × N (이미지, 텍스트) 조합 중 실제로 발생한 쌍을 예측하도록 학습됩니다. 이를 위해 CLIP는 이미지 인코더와 텍스트 인코더를 공동으로 학습하여, 배치 내의 실제 쌍의 코사인 유사성을 극대화하고 서로 다른 쌍의 유사성을 최소화하여 학습하게 됩니다. 이를 위해 Cross-Entropy Loss를 사용하였습니다.

지금까지의 부분을 코드로 정리해보겠습니다.

"""
images: (nbatches, c, h, w)
texts : (nbatches, n_seq)
"""
vision_encoder = VisionEncoder(embedding_dim)
text_encoder = TextEncoder(embedding_dim)   

vision_projection = ProjectedHead(image_embedding)
text_projection = ProjectedHead(text_embedding)     

# Image and Text Features
I_f = vision_encoder(images)           # (nbatches, d_i)
T_f = caption_encoder(texts)           # (nbatches, d_t)

# Image and Text Embeddings
I_e = image_projection(image_features) # (nbatches, d_e)
T_e = text_projection(text_features)   # (nbatches, d_e)

# Similarity
logits = (T_e @ I_e.T) / temperature   # (nbatches, nbatches)
nbatches = logits.size(0)
labels = torch.arange(nbatches)        # (nbatches)

# Calculating Loss
loss_i = F.cross_entropy(logits.transpose(0,1), labels, reduction="mean")
loss_t = F.cross_entropy(logits, labels, reduction="mean")
loss = (loss_i + loss_t) / 2

이게 전부입니다, 아주아주 간단하죠?

2) inference: zero-shot

그 다음으로, CLIP이 엄청난 주목을 받은 두번째 이유인 파트입니다. 바로 zero-shot inference가 가능하다는 점입니다.

컴퓨터 비전에서 제로샷 학습은 보통 이미지 분류에서 보지 못한 객체 카테고리로의 일반화를 연구하는 것을 의미합니다. 그러나 CLIP에서는 이 용어를 더 넓은 의미로 사용하여 보지 못한 데이터셋으로의 일반화를 연구하였다고 합니다.

해당 논문에서는 보지 못한 카테고리로 클래스를 추정하는 inference 방식을 제안하였는데요, 이 때 추가적인 Fine-tuning 없이 image classification 가능하다는 엄청난 장점이 있습니다.

그럼 예측은 어떻게 하였을까요? 상단 이미지가 바로 모델이 zero-shot prediction을 하는 과정을 나타냅니다.

  1. 이미지 인코더를 통해 표현 추출: 이미지 인코더를 사용하여 입력 이미지의 특징 벡터를 생성합니다.
  2. 프롬프트 엔지니어링을 사용한 텍스트 표현 추출: 데이터셋의 클래스를 설명하는 프롬프트를 생성하여 텍스트 인코더를 통해 각각의 텍스트 특징 벡터(T_1, T_2, ..., T_N)를 추출합니다. 여기서 프롬프트는 “a photo of a {object}”로 object에 예측하고자 하는 레이블이 들어갑니다.
  3. 가장 활성화된 텍스트 특징 벡터 선택: 이미지 와 텍스트 특징 벡터 간의 코사인 유사도를 계산하여, 가장 높은 유사도를 가지는 텍스트 특징 벡터(T)가 예측된 클래스가 됩니다.

이를 통해 zero-shot 성능 실험 먼저 비교해보겠습니다. 비교 실험으로는 Visual N-Grams를 사용하였습니다. 단순히 Visual N-Grams만 제로샷 실험으로 비교한 이유는, 이전에 제로샷이 가능한 논문이 없었기 때문이라고 합니다. 하여 굉장히 예전 논문이기에 엄청난 성능 차이가 나는 것은 당연한 결과라고 할 수 있죠. 왜냐하면 CLIP는 10배 더 큰 데이터셋에서 학습되었고, 예측당 거의 100배 더 많은 연산을 필요로 하는 비전 모델을 사용하고, Visual N-Grams 등장할 당시 존재하지 않았던 트랜스포머 기반 모델을 사용했기 때문이죠.

그럼에도 불구하고 Finetuning을 하지 않고도 Image-Net 성능이 76.2%나 나왔다는 것은 놀랍지 않을 수 없습니다.

3) Prompt Engineering and ensembling

인터넷에서 크롤링한 데이터이다보니 보니, 동음이의어, 단어가 아닌 문장 형태인 raw text… 등 다양한 형태의 데이터가 포함된다고 합니다. 게다가 학습 데이터셋에서는 이미지에 “강아지”, “고양이” 와 같은 짧은 텍스트가 아닌 문장이 주로 구성되기 때문에, inference 시에도 문장 단위로 텍스트를 입력해야 학습 데이터 사이의 차이를 줄일 수 있다고 합니다.

프롬프트 템플릿 사용

그래서 저자는 “A photo of a {label}.”과 같은 프롬프트 템플릿을 사용하였습니다 이 템플릿을 사용하면 맥락이 포함되기 때문에 텍스트가 이미지의 내용과 관련이 있음을 명확히 할 수 있죠, ImageNet에서 이 프롬프트를 사용했더니 정확도가 1.3% 향상되었다고 합니다.

뿐만아니라, GPT-3와 관련된 “프롬프트 엔지니어링” 논의와 유사하게, 제로샷 성능은 각 작업에 맞게 프롬프트 텍스트를 맞춤화함으로써 크게 향상될 수도 있다고 합니다. Oxford-IIIT Pets 데이터셋에서는 “A photo of a {label}, a type of pet.”과 같은 프롬프트가 유용했고, Food101에서는 음식의 종류를 지정하고, FGVC Aircraft에서는 항공기의 종류를 지정하는 것이 효과적이었습니다. OCR 데이터셋에서는 인식할 텍스트나 숫자에 인용부호를 추가하는 것, 위성 이미지 분류 데이터셋에서는 “a satellite photo of a {label}.”과 같은 변형을 사용하는 것이 도움이 되었다고 합니다. 이처럼 프롬프트를 어떻게 주는 지도 성능에 지대한 영향을 미친다는 것이 저자들의 고찰이었습니다.

앙상블

또한, 성능을 개선하기 위한 방법으로 여러 제로샷 분류기를 앙상블하는 실험도 진행하였는데요, “A photo of a big {label}”과 “A photo of a small {label}”과 같은 다양한 프롬프트를 사용하여 앙상블을 수행하였습니다.

이때, 앙상블은 최종 output인 확률 공간이 아닌 임베딩 벡터에서 이루어지며, 다양한 제로샷 분류기를 앙상블했을 때 성능이 꾸준히 향상되는 것을 발견하였고, 대부분의 데이터셋에서 이를 사용했다고 합니다. 결과적으로 ImageNet에서는 80개의 서로 다른 컨텍스트 프롬프트를 앙상블하여 성능을 3.5% 추가로 개선했습니다.

상단 그림을 통해, 프롬프트 엔지니어링과 앙상블을 통해 CLIP 모델의 제로샷 성능을 효과적으로 향상시킬 수 있다는 것을 정리해보겟습니다. 특히 앙상블 방식은 추가적인 연산 자원 없이도 가능한 접근 방식으로, 여러 데이터셋에서 높은 성능을 유지할 수 있다고 합니다.

Experiments

Analysis of zero-shot CLIP performance

다양한 image classifaction 데이터셋에서의 CLIP zero-shot 성능을 비교한 결과도 확인해보겠습니다. 비교를 위해 ResNet-50 feature와 정규화된 로지스틱 회귀 분류기를 사용하였고 27개의 데이터셋에 대한 비교 결과입니다. 로지스틱 분류기는 supervised 로 학습했습니다.

상단 그래프는 데이터셋 별로 비교 베이스라인 대비 성능 향상/하락 폭을 나타낸 결과입니다. 27개의 데이터셋으로 비교했을 때, 16개가 클립 성능이 좋았는데, 이는 CLIP의 제로샷 분류기가 특정한 사전 학습 없이도 엄ㅊ어난 성능을 발생하는 것을 알 수 있습니다.

세부적으로 보면, Stanford Cars와 Food101 데이터셋에서 로지스틱 회귀 분류기보다 20% 이상 높은 성능을 보인 반면, Flowers102와 FGVCAircraft 데이터셋에서는 10% 이상 낮은 성능을 보였습니다. 이를 통해 CLIP 모델의 학습 데이터와 각 데이터셋의 특성 간의 상관관계에 따라 성능이 달라질 수 있다고 합니다.

ImageNet, CIFAR10/100, STL10, PascalVOC2007과 같은 일반 객체 분류 데이터셋에서는 제로샷 CLIP이 상대적으로 비슷한 성능이거나, 약간 우세한 결과를 보였습니다. 특히 STL10 데이터셋에서는 학습 샘플 하나 없이도 99.3%의 정확도로 새로운 SOTA를 달성하였습니다.

Kinetics700과 UCF101 데이터셋과 같은 동작 인식 데이터셋에서는 제로샷 CLIP이 ResNet-50보다 각각 14.5%와 7.7% 높은 성능을 보였습니다. 이는 자연어가 동작을 표현하는 데 더 넓은 supervision을 제공하기 때문일 수 도 있다는 분석을 제시하였습니다.

다만, 일부 특화된 데이터셋에서는 다소 못한 성능을 보였는데. 위성 이미지 분류(EuroSAT, RESISC45), 림프절 종양 검출(PatchCamelyon), 합성 장면에서의 객체 수 세기(CLEVRCounts), 자율 주행 관련 작업(GTSRB, KITTI Distance)에서는 성능이 저조했습니다. 즉, 제로샷 CLIP이 데이터셋이 구체적인 경우 한계를 가진다는 것을 알 수 있었습니다.

Zero-shot CLIP outperforms few-shot linear probes

다음으로 제로샷 CLIP 모델과 few-shot learning을 비교한 결과에 대해 알아보겠습니다.

제로샷 CLIP은 사전 학습된 상태에서 추가적인 데이터 없이 예측을 수행합니다. 이 모델은 20개의 데이터셋에서 few-shot learning 모델과 비교되었습니다. 각 데이터셋에는 클래스당 최소 16개의 샘플이 있다고 합니다. BiT-M과 SimCLRv2와 같은 모델에 대해 사전 학습된 feature를 사용하여 단순히 몇 개의 샘플을 가지고 다시 학습한 것과 비교한 결과입니다,.

실험 결과 제로샷 CLIP은 4-shot linear classifier와 평균적으로 비슷한 성능을 보였습니다. 게다가 16-shot linear classifier의 최고 성능과 거의 맞먹는 결과를 보였습니다.

Linear probe performance of CLIP models in comparison with SOTA

다음으로 linear probe라고 layer를 추가했을 때의 성능을 기존 SOTA들과 비교한 결과입니다.

비교 대상에는 EfficientNet, MoCo, Instagram-pretrained ResNeXt, BiT, ViT, SimCLRv2, BYOL, 그리고 원래의 ResNet 모델이 포함됩니다. 각 모델의 성능은 사전 학습된 특징을 사용하여 선형 분류기를 학습한 후, 다양한 데이터셋에서 평가한 결과입니다.

두 가지 평가 기준을 사용하여 CLIP의 성능을 비교하였는데: 12개의 데이터셋 평균 점수와 27개의 데이터셋 평균 점수 입니다. (아래 그림의 좌측은 12개의 데이터셋에 대한 평균 점수를, 우측은 보다 다양한 분포를 포함하는 27개의 데이터셋에 대한 평균 점수를 보여줍니다.)

그래프의 점수는 각 모델이 다양한 데이터셋에서 얼마나 잘 일반화하는지를 나타내는데, 높은 점수는 모델이 다양한 분포의 데이터에서 더 나은 성능을 발휘함을 의미합니다. 점선은 사전 학습보다 높은 해상도의 이미지에서 파인튜닝 혹은 평가된 모델을 나타냅니다.

CLIP 모델은 다양한 데이터셋에서 뛰어난 성능을 보여주며, 많은 SOTA와 비교했을 때 경쟁력 있는 성능을 보였습니다. 특히, 27개의 데이터셋에 대한 평가에서 CLIP 모델이 일반화 성능이 뛰어남을 확인할 수 있습니다.

Zero-shot CLIP is much more robust to distribution shift than standard ImageNet models

마지막으로 ImageNet 말고 어려운 데이터셋에 대한 성능을 리포팅하겠습니다.

CLIP 모델이 다양한 자연 이미지 분포에서의 성능을 비교하여 distribution shift에 얼마나 강인한지를 보여주는 실험으로, CLIP 모델의 제로샷 성능이 기존의 ImageNet 모델보다 분포 이동에 더 잘 대응하는지를 정성적으로 보인 결과입니다.

  • (왼쪽 그래프): Ideal robust model(점선)은 ImageNet 분포와 다른 자연 이미지 분포에서 동일한 성능을 보여야 합니다. 제로샷 CLIP 모델(보라색)은 이 robustness gap 를 최대 75%까지 줄입니다. 로그 변환된 값에 대한 linear fit과 부트스트랩을 사용한 95% 신뢰 구간을 시각적으로 확인할 수 있습니다.
  • (오른쪽 그림): 바나나 클래스는 7개의 distribution shift 데이터셋 중 5개에 존재하기에, 이를 통해 distribution shif를 시각화해보았습ㄴ다. 제로샷 CLIP 모델(ViT-L/14@336px)과 ImageNet 검증 세트에서 동일한 성능을 보이는 ResNet-101 모델의 성능을 비교한 결과, CLIP 모델은 일관되게 높은 성능을 유지하는 반면, ResNet-101 모델은 성능이 더 큰 폭으로 변동합니다.

Limitation

이런 놀라운 성능을 보이는 CLIP임에도 불구하고 아직 여러 한계가 존재한다고 합니다.

  1. 아직까지 부족한 성능 :제로샷 CLIP은 일부 데이터셋에서 선형 분류기와 유사한 성능을 보이지만, 아직 전체에서 SOTA아님. 특히 세분화된 태스크에서는 부족한 모습을 보임. 현재 하드웨어로는 제로샷 CLIP이 전체 최첨단 성능에 도달하려면 약 1000배의 계산 증가가 필요하다고 추정
  2. Classificatio에 특화된 성능: Fine-grained classifcation에서는 CLIP의 성능이 저조. 예를 들어, 자동차 모델, 꽃의 종, 항공기 변형을 구분하는 태스크에서는 성능이 떨어집니다. 또한, 객체의 수를 세는 것과 같은 추상적이고 체계적인 태스크 혹은 사진에서 가장 가까운 자동차까지의 거리를 분류하는 새로운 태스크에서도 성능이 거의 무작위에 가깝다고 합니다.
  3. 제한된 제로샷 성능: CLIP은 제로샷 분류기를 유연하게 생성할 수 있지만, 여전히 주어진 제로샷 분류기 내에서만 class를 선택할 수 있음. 이는 실제 학습 샘플을 생성할 수 있는 이미지 캡셔닝(captioning) 에 비해 제한. 예를 들어, 이미지 캡셔닝 모델은 새로운 출력을 생성할 수 있지만, CLIP은 불가능.
  4. 편향 및 사회적 문제: CLIP은 인터넷에서 수집된 이미지-텍스트 쌍으로 훈련되므로, 많은 사회적 편향을 학습할 수 있음

기존에는 Discrete 한 라벨로 이미지를 매핑하는 방식으로 학습했지만, 이젠 continuous 한 시그널로 이미지와 텍스트 벡터를 가깝게 만드는 방식으로 모델을 학습한다는 가장 큰 차이가 있는 것 같습니다. 이를 통해 기존에는 표현하기 어려운 속성들을 더 잘 표현할 수 있따는 측면에서 엄청난 성능 향상이 가져온 것은 아닌가 하는 생각이 듭니다.

그러나 해당 논문은 400M 이라는 엄청난 크기의 데이터셋으로 모델을 학습했다는 점이 가장 큰 의의가 아닌가 싶습니다. 해당 논문에는 제가 리뷰에는 다루지 못한 더 많은 실험들이 있으니 꼭 한번 살펴보는 것을 추천드립니다.

Author: 홍 주영

12 thoughts on “[ICML 2021] (CLIP) Learning Transferable Visual Models From Natural Language Supervision

  1. 안녕하세요 좋은 리뷰 감사합니다.

    앙상블 기법과 관련하여 출력쪽이 아니라 임배딩 공간에서 여러 프롬프트가 합쳐진다는 점이 놀라웠는데, 연산량 측면에서 생각해보니 더 나은 방법인 것 같다는 생각이 듭니다.
    구체적으로 80개의 프롬프트를 모두 임베딩하고 이를 그냥 평균내어 사용한다는 것인가요? 예를들어 두 개의 문장 임베딩을 평균내었을때 두 문장의 의미를 모두 담고있는 공간 특징으로 떨어질 것 같으면서도 아예 다른 의미를 갖는 특징이 돼버릴 수도 있을 것 같다는 혼동이 와서… 여쭤보았습니다.

    감사합니다.

    1. 네, 말씀하신대로 평균내어 사용합니다.

      가령 “A photo of a dog”, “An image of a dog”, “A picture of a dog” 라는 세 가지 프롬프트로부터 각각 임베딩 벡터를 계산하고 평균내어 하나의 임베딩 벡터를 생성합니다. 이 방법은 다양한 프롬프트로부터 얻은 정보가 평균화되기 때문에, 보다 일반화된 feature를 얻을 수 있다는 장점이 있습니다.

      다만 제 생각이지만, 평균화된 벡터는 개별 벡터가 포함하는 정보를 보존하면서도 두 벡터의 공통된 특징을 잘 반영했기 때문에 ImageNet에서 3.5%라는 성능 개선이 있던 것이지 않을까 싶습니다.

  2. 안녕하세요 주영님 좋은 리뷰 감사합니다.
    CLIP 모델이 제로샷을 통해 새로운 클래스나 라벨에 대해 추가적인 학습 없이도 높은 성능을 발휘한게 흥미로운 것 같습니다. 하지만 CLIP의 fine-grained classification 성능은 저조한 모습을 보였는데 이 성능을 향상시키기 위해 추가적인 fine-tuning이 사용될 수 있을까요? 이에 대한 실험 결과가 있는지 아니면 fine-tuning하기에는 한계점이 있는지 궁금합니다.
    감사합니다.

    1. 말씀하신대로 CLIP의 fine-grained classification 성능은 비교적 저조한 편입니다. 아무래도 CLIP이 일반화된 Classification 학습에 초점을 맞추어 설계되었기 때문이지 않을까 싶습니다.

      당연하게도 CLIP의 성능을 향상시키기 위해 추가적인 fine-tuning이 가능하며,
      이에 대한 연구 및 실험 결과들도 존재합니다.

      다만 애초에 엄청나게 큰 규모의 데이터셋으로 학습한 CLIP이기에,
      이를 다시 Finetuning하기 위해서는 연산비용 문제 뿐만 아니라
      CLIP에서 학습한 지식을 잃을 수 있다는 점이 한계라고 할 수 있을 듯 합니다

  3. 꼼꼼한 논문 리뷰 감사합니다.

    CLIP에 적용한 언어 프롬프트가 생각보다 단순하고 명시적인데도 높은 성능을 보인 것이 신기하네요.
    이에 관해 질문이 하나 있습니다.

    최근 언어-시각 정보를 활용한 연구들에서 CLIP을 활용한 연구들이 활발히 진행되고 있습니다.
    이러한 일부 연구에서는 모호한 언어 정보(e.g. blue chair -> Sea-coloured chair)와 CLIP의 시각 특징 정보를 사용하더라구요.
    학습에 사용하는 프롬프트 대비 모호한 언어 명령에서도 동작이 가능한 이유가 뭘까요?

    주영님의 견해가 궁금합니다.

    1. CLIP은 인터넷에서 크롤링한 이미지-텍스트 쌍을 사용하여 학습되는데요,
      매우 많은 데이터가 존재하다 보니, “blue chair”를 사람마다 다양하게 표현할 수 있습니다.
      예시로 보여주신 것처럼 blue chair, Sea-colored chair 등등 학습 데이터셋에는 매우 다양한 언어적 표현이 포함됩니다. 따라서 문맥에 따라 sea-colored chair가 이미지를 더 명료하게 표현할 수도 있습니다.

      김태주 연구원님의 질문에 답변하자면, 모호하다고 표현하신 언어 정보가 시각 특징 정보를 더 잘 표현하도록 임베딩 된 것이 아닌가 싶은데요,

      다만 어떤 프롬프트를 사용하는 지에 따라 성능에 많은 영향을 미치고,
      어떤 프롬프트를 사용하는 것이 가장 효과적인 지는 전문가가 아니고서야 명확하게 판단이 불가능하다는 점에서, CLIP의 한계라고 할 수 있지 않을까 싶습니다.

      태주님이 표현하신 모호한 언어가 정확하게 어떠한 이유로 잘 워킹한다고 답변드리기엔 어려움이 있으나,
      최적의 Prompt를 찾는 Prompt Learning이라는 연구 분야가 있는 것으로 보아,
      프롬프트에 대한 연구는 아직 더 많이 진행되어야하는 부분 같습니다.

  4. 안녕하세요 좋은 리뷰 감사합니다.

    실험에서 질문이 하나 있는데요
    Zero-shot CLIP을 기존 Few-shot SOTA 모델과 비교했는데
    Few-shot CLIP 실험 성능의 리포팅은 없는지 궁금합니다.

    감사합니다.

    1. Arxiv 버전 페이퍼 기준으로 Figure 15에 few-shot CLIP과 zero-shot CLIP 성능 비교하였습니다.
      16 shot의 샘플을 logistic regression로 학습한 Few-shot CLIP의 경우 특정 데이터셋에서 높은 성능을 보일이지만, Robust 측면에서는 zero-shot CLIP 모델보다 약할 수 있다고 합니다

  5. 안녕하세요, 홍주영 연구원님. 좋은 리뷰 감사합니다.
    CLIP이 대충 image-text contrastive learning으로 만든 foundation model인줄만 알고 있었는데, 결국 노하우는 대용량 데이터셋을 어떻게 구축하고 학습 과정에서 세부 튜닝은 어떻게 했는지에 있는 것 같네요. 좋은 공부가 되었습니다.
    논문을 읽다보니 제가 모르는 부분과 논문에서 궁금한 부분이 있어, 질문 몇개 남기도록 하겠습니다.

    1. 실험 파트에서 대표적으로 classification 성능을 측정한 듯 한데, detection이나 segmentation 등 다른 task에 대한 실험은 딱히 없나요? 있다면 classification prompt를 이용한 것처럼 뭔가 추가적인 요소가 있지 않을까 하는데 궁금합니다.
    2. 앙상블 부분을 설명하실 때 여러 제로샷 분류기를 앙상블하는 실험을 진행했다고 했는데, 기존에 제안된 여러 제로샷 모델들을 함께 앙상블했다는 뜻인가요? 그게 아니라면 CLIP으로 만든 여러 제로샷 분류기를 앙상블했다는 뜻인가요?
    3. Figure 5에서 0%는 fully supervised baseline으로 보이는데, 여기서 베이스라인은 무엇인가요? ImageNet으로 사전학습한 가중치를 사용한 뒤 다른 dataset에서 classification을 측정한 것인가요?
    4. CLIP의 zero-shot 성능과 비교된 few-shot linear probe가 무엇인가요?

    감사합니다!

    1. 1. CLIP 실험은 대부분 분류 태스크가 중심이고, detection이나 segmentation 작업에 대한 실험은 없었습니다.

      2. 앙상블 실험은 CLIP에서 여러 프롬프트를 사용하여 만들어진 제로샷 classifier를 앙상블한 것입니다.

      3. Figure 5의 베이스라인은 ImageNet으로 사전 학습된 모델을 기준으로, 다른 데이터셋에서 분류 성능을 평가한 것입니다.

      4. Few-shot linear probe는 CLIP의 사전 학습된 임베딩 공간 위에 적은 양의 레이블 데이터를 사용하여 linear classifier를 학습하여 얼마나 좋은 표현력을 가지는 지를 보이는 지를 나타내는 방식입니다

  6. 안녕하세요 주영님 이해가 쏙쏙 되는 리뷰 감사합니다

    Grounding DINO 리뷰 눌렀다가 CLIP을 꼭 읽어봐야 하는구나,, 하고 읽게 되었습니다.

    궁금한게 Visual N-Grams와 비교했을 때 성능이 엄청 올랐지만 Visual N-Grams같은 경우 SUN데이터셋에서 더 나은 성능을 보이는데 왜 CLIP은 ImageNet에서 더 높은 성능을 보일까요? 데이터셋 특성의 차이인지 모델 구조의 차이인지 궁금합니다!!

    1. 제 생각엔 데이터셋 특성과 모델의 학습 방식 때문일 것 같습니다. CLIP은 대규모의 이미지-텍스트 쌍을 학습하여 이미지에 대한 높은 일반화 성능을 보입니다. 반면, Visual N-Grams는 이미지 내의 시각적 패턴을 기반으로 학습하여, 복잡한 장면 분류나 세부적인 시각 정보가 중요한 SUN 데이터셋에서 더 나은 성능을 보이기도 합니다.

      즉, 두 모델의 차이는 데이터셋의 특성과 그에 적합한 학습 방법으로 인해 발생한 것으로 보입니다. 다른 벤치마크 성능에서도 알 수 있듯, CLIP은 세분화된 데이터셋보다는 객체 중심의 데이터셋에 유리한 성능을 내는 반면 Visual N-Grams는 장면의 세부적인 정보를 잘 찾아낸 것으로 보입니다

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다