[CVPR2023]Semantic Prompt for Few-Shot Image Recognition

안녕하세요? 저는 저번주부터 다크데이터 과제로 인해 Few-shot learning 관련 논문을 읽고있는데요, 저에게는 조금 낯선 개념이여서 그동안 리뷰를 쓰지 못했습니다 ㅎㅎ 그리고 드디어 해당 논문으로 리뷰를 작성하려 합니다. 이미 저보다 해당 테스크에 친숙하신 분들은 혹시 글에 오류가 있으면 말씀해주세요.

우선 리뷰에 앞서 해당 논문을 간단하게 소개하자면 다음과 같습니다. 먼저 Few-shot Learning은 적은 수의 데이터로 overfitting 없이 새로운 task를 학습하는 방법론입니다. 이 논문 이전에도 적은 데이터로 인해 모델이 클래스(새)와 입력 데이터 내의 맥락(나무, 깃털, 하늘) 사이의 잘못된 연관관계(새-하늘)를 학습함을 막기위해 다양한 방법론이 제안되어 왔습니다. 본 논문은 이러한 Few-shot Learning의 핵심 문제를 해결하기 위해 Semantic Prompt 를 제안합니다. Pre-trained NLP 모델의 사전지식을 활용하여 생성된 Semantic Prompt를 통해, 모델이 적은 수의 새로운 데이터에서도 의미 있는 연관관계(예: 새-깃털)를 학습하도록 유도하는 것이 이 논문의 핵심입니다. 그럼 리뷰를 시작하겠습니다.


Few-shot Learning

Image Classification Task에서 Few-shot Learning과 Supervised Learning 방법론 동작의 차이 예시

논문의 소개에 앞서 Few-shot Learning에 대해 간단히 알아보겠습니다. 우리가 일반적으로 알고있는 딥러닝 모델의 학습법은 Supervised Learning 입니다. 이러한 방법으로 학습한 모델은 학습에 사용되지 않은 새로운 카테고리에 포함되는 데이터가 쿼리로 입력되면 제대로 동작하지 못합니다. 이러한 문제사항을 해결할 수 있는 연구가 Few-shot Learning 입니다. 이는 학습에서 사용하지 않은 새로운 카테고리에 대응가능하도록 싶을 때 적은 수(보통 1개에서 10개)의 데이터를 Support Data로 사용하여 새로운 카테고리에 대한 예측이 가능하도록 기능을 확장하는 방법론입니다.

일반적으로 Few-shot Learning은 Support Dataset 자체를 구하기 힘든 상황을 많이 가정합니다. 예를 들어 의학 데이터셋이나, 농업에서 작물의 생장 주기를 수집하는 경우가 이에 해당합니다. 이러한 예시 상황은 수집 데이터에 대한 레이블링의 비용 뿐 만 아니라 데이터 수집 자체가 어렵기 때문에 Supervised Learning 방식으로 예측 카테고리를 확장하려면 발생하는 비용이 큽니다. 최근의 Few-shot Learning은 데이터 자체의 수집이 어려운 상황에서 one hot label로 사용하던 label을 다른 모달리티 정보인 텍스트로서 사용하여 정보의 활용도를 높이는 해결책이 제시되고 있습니다. 본 논문은 이러한 기존 접근법에서 두 모달리티(이미지-텍스트)간의 정보 교환 능력이 미약함을 지적하며 Transformer 구조에서 Interaction 메커니즘을 통해 해결책을 제시합니다.

Introduce

그림1

앞서서 Few-shot Learning에서 추가해야하는 카테고리의 데이터 부족을 해결하기 위해 텍스트를 모달리티를 활용하는 접근법은 이미 연구되고 있다고 언급했습니다. 그럼에도 이 논문이 기존 논문 대비 Novelty를 갖는 점은 텍스트 라벨을 활용하여 학습에 Sementic Prompt를 제공했다는 점입니다.

<논문 인용>

논문에서는 단순히 라벨을 텍스트 임베딩하여 사용한 것이 아니라, CLIP과 같은 사전학습된 NLP 모델을 활용해 라벨의 Semantic 한 정보를 추출했고, 이를 Semantic feature로 모델에게 제공하여 적은 수의 Support Datasets에서 Background 혹은 Noise에 학습이 치중될 영향을 줄였습니다. 또한 텍스트로 생성한 Semantic feature를 visual feature에 잘 주입하기 위해 2가지 Interaction 메커니즘을 제시하였습니다. 제안한 방법론을 통해 기존 방법론 대비 높은 성능 향상을 달성하여 방법론의 효과를 증명했습니다. 자세한 방법론에 소개는 아래에서 이어가겠습니다.

Method

일반적으로 Few-shot Learning이 Novel classes에 대해서도 잘 동작하는 Feature extractor f를 학습하기 위해 2단계의 분리된 학습절차를 갖습니다: Pre-training on Base Datasets, Fine-tune using Novel Datasets. 분리된 학습 절차를 갖는 이유는 Base Datasets과 Novel Datasets의 크기 차이 때문인데요, Base Datasets을 통해 generalized feature representation을 학습한 f를 활용하여 다음 스테이지에서는 소량의 novel datasets으로 fine-tuning 하여, 데이터셋 크기 차이로 인해 base datasets에 학습이 치중되는 현상을 막기 위해서 입니다. 본 논문은 다른 많은 논문들과 유사하게 Fine-tuneing을 잘 하는 방법에 집중합니다. 논문의 주된 제안점을 확인하기 앞서 어떻게 논문에서 Base Datasets으로 f를 pre-training 하는 방법을 소개하겠습니다.

# Stage 1. Pre-training

본 논문은 앞서 언급했던 것처럼 기존 연구보다 이미지-텍스트 모달리티간의 interaction을 원활하게 하기 위해 Visual Transformers 구조를 backbone으로 사용했다. 본 논문의 backbone의 학습은 일반적인 supervised learning 과 동일합니다. 이미지(x_b)와 라벨(y_b)로 구성된 base Datasets으로 학습하였으며 입력 데이터(x_b)의 backbone 출력값 f(x_b)를 linear classifiation head[W, b]를 통해 base class로 예측하도록 일반적인 supervised learning의 cross entropy loss로 학습하였습니다. visual feature인 f(x_b)를 추출하기 위해 L개의 Transformer layers를 이용하였으며, 각 layer는 multihead self-attention(MSA), MLP block, Layernorm(LN), rasidual connection으로 구성되었습니다. 이때, 최종 f(x_b)는 마지막 layer 출력값의 평균입니다(수식1 참조).

<수식1>

# Stage 2. Fine-tuning with Semantic Prompt

논문에서 제안한 방법론의 전체 아키텍처

다음으로 논문의 핵심인 f의 Fine tuning을 설명하겠습니다. 본 논문은 클래스의 일반적이고 내제적인 정보(=Semantic 정보)를 활용하여 적은량의 Novel dataset에서 background의 잡음 영향을 최소화해 target의 정보를 잘 학습하기 위해 Semantic Prompt(이하 SP)를 제안합니다. 즉 제안한 SP는 그림1의 예시처럼 unicycle을 학습하기 위해 주어진 예시이미지에서 wall, person, helmet 정보(=background)가 아닌 unicycle(=target) 영역의 정보를 학습에 활용할 수 있도록 합니다. Semantic Prompt는 NLP 분야의 Prompt-based learning에서 영감을 받은것으로, Label 활용해 생성한 Semantic 정보를 Visual feature extraction 과정에 주입하는 방법입니다. 본 논문은 SP라는 개념을 제시했을 뿐 만 아니라 효과적으로 텍스트-이미지 모달리티간의 정보 교환을 하기 위해 두 가지 Interaction 메커니즘(Channel Interaction, Spatial Interaction)제안합니다. 전체적인 학습 방법은 다음과 같습니다: Semantic Feature를 추출, Channel Interaction, Spatial Interaction

  1. Semantic Feature의 추출

본 논문은 Semantic 정보를 활용하기 위해 large-scale pre-training NLP 모델의 사전지식을 활용합니다. state-of-the-art와의 비교실험에서는 CLIP, SBEART, GLoVe을 모두 활용해 비교했으나, 최종적으로는 CLIP의 사전지식을 활용합니다. 수식에서 추출을 위한 large-scale pre-traing NLP 모델을 g(.)로 표기하였으며, 이미지(x)에 해당하는 라벨(y_text)를 입력으로 Semantic Feature g(y_text)를 생성했습니다.

<논문 인용>

2. Channel Interaction

Channel Interaction(이하 CI)는 채널별로 시각적 특징을 조정하여 학습 성능을 향상시키는 역할을 합니다. 먼저 Visual Feature를 평균 풀링(Average Pooling)하여 이미지의 전역 특징 벡터(Zc)를 생성합니다. 이 전역 특징은 이미지 전체의 중요한 정보들을 의미합니다. 다음으로 생성된 전역 특징 벡터를 Semantic Feature와 결합하고, 2-layer MLP (Multi-Layer Perceptron)를 통해 변환한 값인 modulating vector를 모든 patch tokens에 더해줍니다. 이렇게 전역적 특징을 모든 patch에 더함으로서 연산에서 Semantic 한 정보를 고려할 수 있도록 합니다.

3. Spatial Interaction

CI가 각 layer의 sequence vector에 해당하는 각 patch(그림에서 캡슐모양의 구조)에 전역적 정보를 주입하여 채널 연산에서 Semantic 정보를 참조할 수있도록 설계한 반면, Spatial Interaction(이하 SI)는 각 patch 간의 Self-attention 연산 과정에서 Sematic 정보를 주입하는 방법입니다. 이러한 SI는 NLP에서 prompt vector를 input sequence와 concet 연산으로 합하여 입력하는 것에 영감을 받아 설계한 것이라고 합니다. 따라서 이와 유사하게 레이어의 입력 시퀀스인 patch(z)에 Semantic feature(z0)을 합치고, Multi-Head Self-Attention (MSA) 메커니즘을 통해 패치 간 상호작용을 조정하도록 합니다. 즉, Semantic feature를 CI에서 한번 주입하고, 이를 통해 조정된 patch에 SI 연산에서 MSA 메커니즘을 통해 한번 더 주입한 것입니다(아래의 구현 참조).

구현

4. 학습

Few-shot learning은 일반적으로 제공된 소량(K개)의 Support image를 통해 클래스를 대표하는 prototypes을 생성하고, 이와 유사한 위치에 임베딩 되는 데이터를 prototypes에 해당하는 클래스로 분류하도록 학습합니다. 따라서 prototypes을 잘 생성하는 연구 혹은 visual embeding을 잘 생성하는 연구로 나뉘는데, 본 연구는 후자에 해당합니다. 본 연구에서는 클래스를 대표하는 prototypes를 잘 생성하기 위해 SP를 통해 Semantic information으로 가이딩한 visual feature를 사용하였으며, 클래스에 해당하는 전체 K개의 visual feature를 평균하여 prototypes을 생성합니다(수식2 참조).

<수식2>

이후 학습은 앞서 말한것처럼 prototypes을 class정보로 활용하여 cross-entropy loss를 통해 데이터 (x_q)의 f에 대한 출력값이 x에 해당하는 클래스(y_q)의 prototypes(P_(y^q))에 가까워지도록 학습합니다(수식3 참조). 해당 학습에서 Semantic feature 추출을 위한 large-scale pre-training NLP, g(.)는 학습되지 않고 freeze 됩니다.

<수식3>

Prove

#1 Comparison with the state-of-the-art

본 논문은 실험이 매우 많은데요, 우선 가장 대표적인 실험인 state-of-the-art와의 비교 성능은 아래와 같습니다. Text를 Semantic Feature로 임베딩하기 위한 사전학습 NLP로 CLIP, SBEART, GLoVe를 활용하였으며, 해당 실험 이후에는 CLIP을 활용하였다고 합니다. 실험은 ImageNet으로 생성한 Few-shot Learning Datasets인 miniImageNet, tieredImageNet과 CIFAR-100으로 생성한 CIFAR-FS/FC100에 대해 진행되었으며, miniImageNet보다는 tieredImageNet이, CIFAR-FS보다는 FC100이 어려운 데이터입니다. 각 데이터에 대해 제안 방법론이 높은 성능을 보이고 있으며, miniImageNet의 5-shot성능에서는 DeepEMD-BERT가 조금 더 높은 성능을 보이나, 그만큼 Computation이 더 발생한다고 합니다. 또한 Visformer backbone을 사용하는 SUN에 대해서도 (CIFAR-FS-5way에서는 SUN이 조금 앞서지만) 세개의 실험 데이터셋에서 평균적으로 2.46% 높은 성능을 거두었다고 말하며, 제안 방법론의 실험 데이터셋에 대해 SOTA 대비 우수한 성능을 보이고 있음을 보였습니다. (표의 붉은색 표시에 대한 설명은 아래 #2 실험 참조)

#2 Comparison with different backbones

위의 실험에서 비교대상이 되는 방법론의 backbone이 ResNet이 많았습니다. 제안 방법론이 성능적 우수성이 backbone의 차이 때문이 아닌가에 대한 의문의 제기될 여지가 있는데, 이를 해결하기 위해 Table 2의 baseline methods 중 3가지를 제안하는 방법론의 backbone인 Visformer로 재구현하여 성능을 비교했습니다. 실험을 통해 단순히 backbone을 바꾸는 것은 성능에 큰 영향을 미치지 않았으며, 동일한 세팅에서 제안 방법론이 높은 성능을 보임을 다시한번 보였습니다.

# Qualitative Results

다음으로 SP의 결과를 직관적으로 확인할 수 있는 시각적 결과입니다. Figure4의 왼쪽에서 2번째 이미지는 Novel Class에 대해 Fine-tuning 하지 않은 baseline 네트워크에서 추론시에 attention 하는 영역을 시각화 한 것입니다. 해당 이미지를 통해 target이 되는 물체 뿐 만 아니라, noise가 될 수 있는 배경까지 예측에 활용되고 있음을 알 수 있습니다. 반면 제안하는 방법론을 활용하는 경우 harvestman(일종의 거미류) 혹은 spider web 에 대한 Semantic Feature로 Encoder를 가이딩 함에 따라 제공된 텍스트에 해당하는 영역에만 attention 하고 있음을 확인할 수 있습니다. 즉, 제안하는 방법론(SP)가 Few-shot Learning에서 적은 데이터로 인해 배경이 Noise로 작동하는것을 효과적으로 예방할 수 있음을 보였습니다.

Figure5는 데이터를 encoding 한 feature 분포를 시각화 한 결과입니다. 학습이 완료된 Base classes에 대해서는 SP의 여부에 관계없이 의미있는 분포(Class에 따른 군집을 잘 형성)를 보이고 있으나, SP를 적용하지 않은 경우, 새로운 데이터(Novel Classes)에 대한 대응이 떨어지는것을 확인할 수 있습니다. 반면 SP를 활용할 경우 novel classes에 대해서도 군집을 잘 형성함을 시각적으로 확인할 수 있습니다.

# Model analysis

모든 제안된 방법론의 성능향상에 유의미한 영향을 미친다는것을 보이기 위해 Table3의 Ablation study가 제공되었습니다. 다른 논문들 마찬가지로 제안된 방법론들 SI(Spatial interaction), CI(Channel interaction)을 적용하였을때 점차적으로 성능 향상이 됨을 보였고, SI+CI가 함께 사용되었을 때 가장 높은 성능을 보이면서, 두 방법론이 보완적 관계에 있음을 확인시켰습니다. 또한 논문은 데이터 증강을 위해 일반적으로 사용되는 RandomResizedCrop를 확장하여 RandAug[1]와 RepeatAug[2]도 활용했는데, 이를 통해 평균적으로 2.45%의 성능향상이 있었음을 밝혔습니다.

제안된 모듈에 따른 Ablation study 뿐 만 아니라 구현 디테일에 대한 다양한 실험이 아래와 같이 있었습니다. 입력 데이터의 사이즈에 따른 성능 차이[Table5], Pooling과 Projector 방식에 따른 성능 차이[Table6]/최종 feature에 대한 Classifer 구조에 따른 성능차이[Table5]를 비교하여 현제 설계한 구조가 가장 적합함을 보였습니다. 제안된 Model analysis 중 가장 인상깊었던 실험은 [Figure3]입니다. 제안하는 SP의 경우 모든 Layer에 적용할 수 있습니다. 하지만 논문에서는 8개의 layer(layer2-0/layer2-1 … layer3-3) 중 layer3-2에만 적용했습니다. 그에 대한 이유로 초반의 layer (layer2-0~)의 경우 클래스 간 공유되는 특징에 집중하는 경향이 있으며, 후반의 layer(~layer3-3)로 갈수록 클래스의 특징적인 정보(즉 semantic 한 정보)에 집중할 수 있기 때문이라고 분석했습니다. 한편 Figure3에서 볼 수 있듯이 layer3-x에 SP를적용하는것이 일반적으로 효과적이나 최적의 layer는 데이터셋 마다 상이하기 때문에, 편의를 위해 layer3-2에 적용하였다고 논문은 소개했습니다.

Reference

[1, RandAug] Randaugment: Practical automated data augmentation with a reduced search space. In Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition Workshops, pages 702–703, 2020
[2, RepeatAug] Multigrain: a unified image embedding for classes and instances. arXiv preprint arXiv:1902.05509, 2019. 6


본 논문은 large-scale pre-training을 활용해 학습의 가이딩을 줌으로서 Few-shot Learning이 제공된 적은 수의 Support dataset에서 Noise가 아닌 적절한 시각적 특징을 학습하도록 하는 논문이였습니다. Few-shot Learning 문제에 대한 직관적인 해결책을 제시했을 뿐 만 아니라, 많은 실험으로 다양한 인사이트를 제공한 논문 같습니다. 부끄럽지만 저는 large-scale pre-training 모델의 사전지식을 활용하는 논문은 처음 정독합니다. 그래서 논문에 사용한 워딩을 직접 리뷰에 넣었는데, 혹시 저와 같은 분은 논문에서는 대형모델의 사전지식 활용에 이러한 워딩을 쓰는구나~ 하고 읽어주시면 좋을것 같습니다. 더 좋은 표현이 있는 논문이 있다면 알려주시면 감사하겠습니다. 이상으로 리뷰를 마치겠습니다.

Author: 황 유진

3 thoughts on “[CVPR2023]Semantic Prompt for Few-Shot Image Recognition

  1. 안녕하세요, 리뷰 잘 읽었습니다.

    ‘논문에서는 단순히 라벨을 텍스트 임베딩하여 사용한 것이 아니라, CLIP과 같은 사전학습된 NLP 모델을 활용해 라벨의 Semantic 한 정보를 추출’ 이라는 구절에서 질문이 있습니다.
    라벨을 CLIp 에 통과시켜서 semantic feature를 얻는 행위가 결국 다르게 말하면 라벨을 텍스트 임베딩하였다는 뜻 아닌가요?뭔가 비슷한거같아서요
    제가 text 분야를 잘 몰라서 드리는 질문일 수 있습니다..

    감사합니다.

    1. 질문 감사합니다. 헷갈릴 수 있는 부분인데 해당 부분의 강조와 설명이 부족했네요.

      본 논문에서의 차별점은 텍스트 임베딩 자체보다는 사전학습된 NLP의 “사전지식”을 통해 “Sematic 정보”를 encoder 학습에 잘 주입했음입니다. 따라서 text 임베딩 보다는 사전지식, semantic 지식 활용에 초점을 두시면 좋을 것 같습니다.

  2. 안녕하세요 유진님 좋은 리뷰감사합니다.
    본문의 method 4. 학습에서 질문이 있습니다. 설명에 따르면 클래스를 대표하는 prototypes은 소량(K개)의 Support image를 통해 생성된다고 말씀해주셨습니다. 하지만 소량의 k개의 데이터만으로는 해당 클래스를 대표하는 점을 생성하면 해당 클래스의 프로토타입이 그 클래스를 충분히 대표하지 못할 수 있을 것 같다는 생각이듭니다. 혹시 K개의 이미지를 선택할때 선택 기준이 있을까요? 그리고 프로토타입이 학습을 진행하면서 입력 데이터에 따라 업데이트 되는것인지 아니면 계속 고정된 상태인지도 궁금합니다.
    감사합니다.

답글 남기기

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