[논문 리뷰] CoCoOp :: Conditional Prompt Learning for Vision-Language Models
논문 Conditional Prompt Learning for Vision-Language Models을 읽고, 최대한 다른 분들이 보셨을 때 이해가 잘 되도록 요약 및 핵심 내용 설명 위주로 Paper Review를 진행할 예정입니다.
보시기 전에 “CoOp 논문 리뷰”를 먼저 보시는 것을 추천드립니다. 자유롭게 피드백 남겨주세요 :)
🔍 Abstract 및 Introduction
기존 연구의 문제점
CoOp에서도 언급을 하였지만, 기존의 학습에서는 label이 이산화되고, 각 카테고리를 무작위로 초기화된 weight vector와 연결하여, 같은 카테고리를 포함하는 이미지와의 거리를 최소화하도록 학습된다.
이 방법은 사전에 정의된 카테고리 목록에 학습을 한정시키며, 보지 못했던 새로운 카테고리에 대한 확장이 불가능하게 만드는 폐쇄적인 학습 방법이라고 할 수 있다.
Vision Language Model
CLIP, ALIGN과 같은 VL-model에서는 분류 가중치가 prompting을 통해 text encoder로부터 생성된다.
즉, 프롬프트 템플릿을 텍스트 인코더의 입력으로 사용할 수 있으며, 실제 클래스 이름으로 “CLASS
” 토큰을 채워 분류를 위한 클래스별 가중치를 합성할 수 있다. Discrete label과 비교했을 때, 보다 더 개방적인 시각 개념을 탐색할 수 있게 되었다.
이러한 모델들을 downstream task에 효율적으로 적응시키기 위한 연구들이 시작되었지만, 대규모 VL model들은 고용량을 목적으로 설계되었으며, 수십억 개의 매개변수를 가지기 때문에 일반 fine-tuning은 실용적인 방안이 될 수 없다는 것을 알게 되었다.
기존 Prompting의 문제점
직접 prompt를 설계하는 prompt engineering은 optimal prompt를 보장하지 않고, 많은 경우의 수를 통해 찾아야 한다. 즉, 매우 시간 소모적이며 비효율적이다.
CoOp의 등장
NLP의 prompt learning 개념을 VL model에 적용하는 것을 탐구하였다. Context Optimization (CoOp)의 아이디어는 간단히 다음과 같다.
- prompt 내의 context word를 학습 가능한 벡터 세트로 전환한다.
- CLIP의 base 모델은 고정시킨다.
- continous prompt를 사용한다.
고안된 CoOp은 tuned manual prompt (수동 프롬프트) 보다 더 높은 성능을 냈었다.
CoOp의 치명적인 문제점 발견
그러나, 같은 task 내에서도 unseen class들에 대해 일반화 성능이 떨어지는 것을 확인하였다.
위와 같이 Arrival gate
와 Cathedral
과 같이 Dataset에 존재하는 base class에 대한 성능은 CoOp의 성능이 좋은 것을 확인할 수 있다.
그러나 같은 범주인 scene understanding에 속하여도, Dataset에 존재하지 않는 wider unseen class에서는 일반화 요소를 포착하지 못하는 것을 볼 수 있다.
이러한 문제는 CoOp의 정적 설계에 의해 발생한다고 주장한다. 즉 한 번 학습되면 context가 고정되기 때문에 특정한 class set에만 최적화 되는 것이다.
CoCoOp의 소개
일반화 문제를 해결하기 위해, Conditional prompt learning인 Conditional Context Optimization (CoCoOp) 방법을 소개한다.
➡️ 핵심 아이디어
- prompt를 고정시키지 않고, 각 input instance (image)에 따라 prompt를 조건화한다.
- CoOp을 확장하여 각 이미지에 대해 input-conditional token을 생성하는 경량 신경망을 추가로 학습하며, 이는 학습 가능한 context vector와 결합된다.
➡️ instance-conditional prompt를 통해 더 일반화 시킬 수 있는 이유
특정한 class만을 위하기 보다, 각 instance들을 특정 짓도록 최적화 되어 있기 때문이다.
Contributions
- 존재하지 않던 unseen classes에 대해서 manual prompts 간의 격차를 매우 줄일 수 있었고, 보다 더 좋은 성능을 얻을 수 있었다.
- CoOp보다 더 강한 도메인 일반화 성능을 도출 할 수 있다.
- 학습된 context가 극적으로 다른 클래스를 가진 다른 작업으로 전환될 때, CoOp의 성능을 명확한 margin으로 능가하기 때문에, 더 큰 규모에서 성공할 수 있는 잠재력을 가지고 있다.
🔍 Related Works
※ CoOp 논문과 거의 유사하기 때문에 해당 게시글을 참고해주세요.
🔍 Methodology
전체적인 architecture는 다음과 같다.
CLIP (contrastive language-image pre-training) backbone 사용
- 두 개의 인코더 (Image Encoder, Text Encoder) 를 사용하여 구축했다.
- Image Encoder는 ResNet 혹은 ViT이며, 이미지를 특징 벡터로 변환한다.
- Text Encoder는 Transformer로 단어 토큰의 시퀀스를 입력 받아 벡터화된 표현을 생성한다.
- Loss : 두 modality의 결합된 embedding space를 학습하기 위해 contrastive loss를 채택하였다.
- matched pair에 대해선, cosine similarity를 최대화
- unmatched pair에 대해선, cosine similarity를 최소화
CoOp 적용
- 끝까지 학습할 수 있는 continuous vector를 사용하여 각 context token을 모델링한다.
a photo of a ~
라는 context를 사용하는 대신, word embedding과 동일한 차원을 가진 학습 가능한 context vector`` ``{v1, v2, ... , vM}``을 사용하는 것이다.
즉, 완성된 prompt는 ``{v1, v2, ... , vM, ci}``이다.
CoCoOp 적용
- 특정 클래스 집합에서 instance-conditional context가 focus를 이동시켜 overfitting을 줄이고, 각 input instance에 초점을 맞춤으로써 일반화의 능력이 더 높아진다.
➡️ 구현 방식
M개의 신경망을 구축하여, M개의 context token을 얻는 것을 처음 고안하였으나, 이는 신경망 하나의 크기에 M배가 필요하다. 그래서 본 논문에서는 효율적인 매개변수 설계를 다음과 같이 제안한다.
M개의 context vector 위에 각 입력에 대한 conditional token(vector)를 생성하는 경량 신경망인 Meta-Net를 학습하여 context vector와 결합시킨다.
➡️ Meta Net
- Input : Image Encoder에 의해 생성된 출력 feature
- 두 층의 병목 구조 (Linear-ReLU-Linear) 로 구축
- 은닉층에서는 입력 차원을 16배 줄임
🔍 Experiments
다음 세 가지와 부수적인 내용에 대해 실험을 진행하였다.
- Dataset 내 base class에서 새로운 class로의 일반화
- Dataset간의 전이 (cross-dataset)
- 도메인 일반화 능력
Dataset과 Training Detais
Dataset
ImageNet, Caltech101, OxfordPets, StanfordCars, Flowers102, Food101, FGVCAircraft, SUN397, UCF101, DTD, EuroSAT
Training Details
CLIP에서 가장 좋은 vision backbone인 ViT-B/16을 사용하였다. CoOp에서는 더 짧은 context length와 좋은 initialization이 더 나은 성능과 도메인 변화에 대한 강인성을 이끌어낼 수 있다고 하였다. 그래서 context length를 4로 고정하고, a photo of a
의 사전 훈련된 word embedding을 사용하여 초기화했다고 한다.
근데 실제로 CoOp 논문을 보면, 초기화 방법에서의 무작위 초기화와 단어 임베딩 기반 초기화의 성능차이는 거의 없던 것으로 확인할 수 있어서 의문이다.
[1] Generalization from Base to New Classes
왼쪽 표를 보면 알 수 있듯이, Base class와 New class에 대한 정확도 수치가 현저하게 다르다. 11개 Dataset에 대한 평균 성능 중 New class에 대한 정확도는 CLIP이 가장 높았지만, CoOp의 일반화 성능이 나머지 두 방법에 대해 현저히 떨어지는 것을 확인할 수 있었다.
본 Base와 New의 평균 값은 FGVCAircraft를 제외하고 CoCoOp이 가장 높은 성능을 보였다. 즉, CoCoOp은 New Class에서의 정확도를 63.22% -> 71.69%
로 향상 시켰다.
오른쪽 그래프는 CoOp에 비해 높아진 CoCoOp의 성능 척도를 보여준다.
본 표는 Base class에 대한 CoCoOp의 성능 향상 척도를 보여주는데, Base class에 대해서는 CoOp보다 성능이 낮은 것을 확인할 수 있다. 이는 CoOp이 기본 클래스에 특화되어 최적화 하는 반면, CoCoOp은 전체 작업에 걸쳐 일반화를 얻기 위해 각 instance에 대해 최적화하여 타당한 결과이다.
그러나 주목할 점은, Base class에 대해 낮아진 정확도가 6/9개의 dataset에서 3% 미만이었고, 이는 unseen class에서의 이득으로 상쇄된다.
[2] Cross-Dataset Transfer
데이터셋의 기본적인 사항이 객체 인식에서의 질감 분류
와 같이 완전히 달라질 수 있기 때문에 충분히 도전적인 문제이다.
- Source인
ImageNet
은 상당량의 개 품종이 있다.- 개 품종을 포함하는
Caltech101
과OxfordPets
에서 좋은 성능을 내는 것은 타당하다.
- 개 품종을 포함하는
FGVCAircraft
와 다양한 질감을 포함하는DTD
처럼 Dataset 유사도가 떨어진 전문화된 카테고리를 가진 데이터셋에서도 성능은 낮아도, CoOp보다 강력한 전이성을 보인다.
[3] Domain Generalization
CoOp과 CoCoOp 모두 CLIP에 비해 높은 도메인 일반화 성능을 보이며, ImageNetV2
를 제외한 세 가지 데이터셋에서 CoCoOp이 CoOp을 능가하는 성능을 보이는 것을 확인할 수 있다.
즉, instance-conditional prompts가 도메인 일반화 가능성이 더 높다는 것을 확인시켜준 것이다.
[4] Further Analysis
➡️ Initialization
이는 word embedding 기반 초기화와 무작위 초기화를 비교한 것이다.
CoOp에서는 초기화 방법의 성능 차이가 크지 않았던 반면, CoCoOp에서는 적절한 초기화가 Base class와 New class 모두에 더 유익하다는 것을 확인할 수 있다.
➡️ Context Length
Base class에 대해서는 context length에 대한 변화가 크지 않지만, New class에서는 더 긴 context length를 가진 모델이 더 좋은 성능을 보인다.
그래프 (a)와 (b)를 모두 보았을 때, [ length=8, random init. ] 방법이 [ length=4, word embedding init. ] 보다 더 나은 성능을 보인다. 즉, CoCoOp에서는 context length가 큰 영향을 주는 것으로 보인다.
➡️ Bigger CoOp과의 비교 (매개변수)
Meta-Net을 도입하여 단순히 많은 매개변수로 인해 성능이 늘어난 것인지 확인해보기 위해 진행한 실험이다. CoOp의 context token 수를 CoCoOp과 크기가 비슷해질 때까지 최대로 늘린 후 확인하였다.
그 결과, 매개변수 크기를 증가시키는 것이 핵심이 아님을 보여준다.
🔍 Conclusions
Limitations
실험에서 사용된 ViT-B/16 기반의 CLIP 모델은 1억 5천만 개의 매개변수 크기를 가지고 있다. 이런 모델들은 pre-training에서 비용이 많이 들며, 이를 개인도 사용할 수 있도록 효율적인 적응 방법 연구가 아직까지 필요하다고 주장한다.
Contributions
- 정적 프롬프트(static prompt)의 일반화 문제를 해결하였다.
- 논문에서 제안한 instance-conditional prompt가 새로운 클래스로의 일반화, Cross-dataset transfer, 도메인 일반화를 포함한 다양한 task에서 탁월한 성능을 보였다.
논문에 대한 나의 생각
CoCoOp 연구를 통해 Vision-Language Model의 발전을 확인할 수 있었다. CoOp에서의 continous prompt가 static prompt이기 때문에 일반화 작업에 대한 성능에서 의문을 가졌었다. 이 의문이 CoOp의 큰 문제점이라는 것을 본 논문에서 언급하였을 때, CoOp 논문을 제대로 이해한 것 같아 의미가 깊었다. CoCoOp에서 instance-conditional prompt를 통해 해결하려는 통찰력이 신기하였고, 성공에 있어 매개변수 크기가 중요한 요소가 아닌 것을 확인할 수 있었다. 논문 중간중간, future에서 다뤘으면 하는 연구들을 언급하는데, 그 연구들이 진행되었는지 확인해보고 직접 실험해보면 좋을 것 같다.
Leave a comment