CLIP
전통적인 고정 classifier head를 가진 지도학습 이미지 분류 모델은 학습할 때 정한 클래스 집합에 출력이 묶입니다. 새로운 클래스를 직접 예측하려면 보통 classifier head를 바꾸고 그 과제에 맞는 추가 학습이 필요합니다.
CLIP은 이미지와 텍스트를 같은 표현 공간에서 비교하도록 학습해 이 제약을 크게 넓혔습니다. 이미지는 image encoder로, 설명 문장은 text encoder로 embedding한 뒤 서로 짝인 이미지와 텍스트는 가깝게, 관계없는 쌍은 멀어지도록 contrastive learning합니다.
그래서 분류할 때도 고정된 classifier weight 대신 "a photo of a dog", "a photo of a cat"처럼 자연어로 후보 클래스를 정의하고 이미지와 가장 가까운 텍스트를 고를 수 있습니다. 별도의 task-specific 학습 없이 새로운 클래스 집합을 구성할 수 있다는 것이 CLIP의 zero-shot classification이고, 같은 표현 공간은 이미지-텍스트 검색에도 그대로 사용할 수 있습니다.
물론 텍스트로 이름만 적으면 어떤 개념이든 같은 정확도로 분류되는 것은 아닙니다. 학습 데이터에 없던 분포, 세밀한 구분, counting 같은 과제에서는 한계가 있고, prompt의 표현에도 성능이 영향을 받을 수 있습니다.
이미지와 텍스트를 어떻게 하나의 공간에 정렬하는지부터 시작해 zero-shot classifier가 만들어지는 과정을 살펴봅니다. 이어서 SigLIP이 학습 objective를 어떻게 바꿨고, SigLIP 2가 multilingual understanding과 localization·dense feature까지 활용 범위를 어떻게 넓혔는지도 함께 봅니다.
1장. 왜 나왔나
고정 라벨 집합의 한계. 기존 비전 모델은 ImageNet 1000개 클래스 같은 고정된 라벨 집합으로 지도학습했습니다. 그래서 새 클래스가 생기면 데이터를 모아 다시 학습해야 했습니다. 제품 카테고리 3개가 늘면 데이터 수집과 라벨링, 재학습, 재배포가 따라옵니다.
라벨을 자연어로 주면. a photo of a dog처럼 클래스를 문장으로 표현하면 학습 때 고정된 classifier head에 묶이지 않습니다. 추론 시 후보 클래스의 텍스트 표현을 새로 만들 수 있어 open-vocabulary/zero-shot 분류가 가능해집니다.
핵심 아이디어. 비싼 사람 라벨 대신 인터넷의 이미지와 캡션 쌍이라는 자연어 감독을 써서 대규모로 배웁니다. 원 논문 제목이 그대로 이 문장입니다.
"Learning Transferable Visual Models
From Natural Language Supervision"CLIP은 이 자연어 감독을 대규모로 만들기 위해 웹의 이미지-텍스트 쌍을 수집했습니다. 원 논문은 폭넓은 시각 개념을 덮기 위해 약 50만 개의 text query를 구성하고, 이를 이용해 여러 공개 인터넷 소스에서 총 4억 개의 image-text pair를 모은 WIT 데이터셋을 만들었다고 설명합니다. 즉 4억 쌍이 이미 정리된 라벨 데이터로 존재했던 것이 아니라, 자연어가 붙은 공개 데이터를 대규모로 수집·구성한 것입니다.
오해 둘. CLIP이 이미지 캡션을 생성한다는 것은 틀렸습니다. CLIP은 매칭만 하고 유사도를 재는 것이지 문장을 만드는 것이 아닙니다. 생성은 VLM의 몫입니다.
CLIP이 하나의 인코더라는 것도 틀렸습니다. 이미지용과 텍스트용 두 개의 분리된 인코더이고, 둘의 출력이 같은 공간에 놓이도록 학습할 뿐입니다.
논문 정보.
제목 Learning Transferable Visual Models
From Natural Language Supervision
저자 Radford et al. (OpenAI)
출처 arXiv 2103.00020 (2021년 2월), ICML 20212장. 대조학습의 구조
자석 격자로. 한 배치 안에서 짝이 맞는 이미지와 캡션은 자석처럼 끌어당기고 짝이 아닌 조합은 밀어냅니다. 이 밀당을 수없이 반복하면 고양이 사진과 cat이라는 글자가 임베딩 공간의 같은 자리로 모입니다.
그러면 이미지와 텍스트가 하나의 공유 공간을 쓰게 되고, 그 순간부터 텍스트로 이미지 찾기나 텍스트 라벨로 이미지 분류하기가 단순한 최근접 탐색 문제가 됩니다.
학습 흐름.
이미지 ──► 이미지 인코더 (ViT 또는 ResNet) ──► 이미지 벡터 (L2 정규화)
│
▼
N x N 코사인 유사도 행렬
▲
│
캡션 ────► 텍스트 인코더 (Transformer) ──────► 텍스트 벡터 (L2 정규화)
│
▼
대칭 InfoNCE 손실
대각선(진짜 짝)을 최대화세 단계로 나뉩니다. 먼저 두 인코더가 벡터를 만듭니다. 각 벡터는 L2 정규화해서 길이를 1로 맞추면 내적이 곧 코사인 유사도가 됩니다.
다음으로 유사도 행렬을 만듭니다. 한 배치의 N개 이미지 벡터와 N개 텍스트 벡터로 N x N 코사인 유사도 행렬을 만들면 대각선이 데이터셋에서 주어진 positive pair이고, 학습 objective는 나머지 조합을 negative로 취급합니다. 별도의 negative mining 없이 batch 안의 다른 샘플을 이용할 수 있다는 장점이 있지만, 실제 의미상 비슷한 image-text가 off-diagonal에 있으면 false negative처럼 취급될 수도 있습니다.
마지막으로 대조손실을 겁니다. 각 행과 열에서 대각선 값이 가장 크도록 하는 대칭 교차엔트로피를 겁니다. 행 방향은 이미지 하나에 맞는 캡션 고르기, 열 방향은 캡션 하나에 맞는 이미지 고르기이고 양방향을 다 걸어 대칭으로 만듭니다.
온도는 유사도를 나누는 스칼라로 분포의 날카로움을 조절합니다. 작으면 정답과 오답의 차이를 크게 벌리고, CLIP은 이 값을 학습 가능한 파라미터로 뒀습니다.
배치 크기가 중요한 이유. 핵심은 분모가 배치 전체의 짝을 훑는다는 점입니다. 진짜 짝 하나를 나머지 모든 조합 대비 상대적으로 키우는 구조입니다.
배치가 커지면 한 번에 비교하는 negative가 많아지는 이점이 있습니다. CLIP은 실제로 매우 큰 배치를 사용했습니다. 다만 배치를 무조건 키울수록 표현이 계속 좋아진다는 법칙은 아니고 데이터, 최적화, compute budget에 따라 수익이 둔화됩니다. 이 전역 softmax와 batch coupling을 다른 방식으로 바꾼 후속 연구가 SigLIP입니다.
3장. 추론
zero-shot 분류.
① 클래스명을 프롬프트 템플릿에 넣는다
"a photo of a {class}"
② 텍스트 인코더에 통과시켜 클래스별 텍스트 벡터를 만든다
③ 입력 이미지 벡터와 코사인 유사도를 재서
가장 가까운 클래스로 분류두 번째는 한 번만 하면 됩니다. 클래스 벡터를 미리 계산해 캐시해 두면 추론 시에는 이미지 인코딩 한 번과 내적뿐입니다.
검색. 텍스트로 이미지를 찾는 것은 텍스트 벡터와 이미지 벡터 DB의 최근접 탐색이고, 이미지로 텍스트를 찾는 것도 대칭으로 동일합니다.
RAG를 해본 사람이라면 익숙한 구조입니다. 벡터 DB에 이미지 임베딩을 넣어두고 텍스트로 검색하는 것이 그대로 되고, 차이는 인덱싱하는 것이 문서가 아니라 이미지라는 것뿐입니다.
왜 이것이 되는가. 같은 공간에 있기 때문입니다. 보통은 이미지 벡터와 텍스트 벡터의 차원이 같아도 서로 비교할 근거가 없는데, 대조학습이 그 근거를 만들어 준 것입니다.
4장. 프롬프트 앙상블
템플릿을 씌우면 정확도가 오른다. 클래스명을 그냥 dog로 넣기보다 a photo of a dog 로 넣으면 낫습니다. 학습 시 캡션이 문장 형태라 단어 하나만 넣으면 학습 분포와 어긋나는데, 템플릿을 씌우면 분포가 맞춰집니다.
여러 템플릿을 평균한다. CLIP 논문은 ImageNet에 80개 프롬프트 템플릿을 만들어 텍스트 벡터를 평균하는 방식을 썼습니다.
"a photo of a {}"
"a bad photo of a {}"
"a cropped photo of a {}"
"a photo of many {}"
... 80 개논문 기준으로 이 프롬프트 앙상블만으로 약 3.5%p를 더 얻었습니다. 학습 없이 추론 방식만 바꿔서 얻은 정확도입니다.
평균이 도움이 되는 이유. 템플릿마다 편향이 다릅니다. a bad photo of a 는 흐릿한 이미지에 잘 맞고 a cropped photo of a 는 잘린 이미지에 잘 맞습니다. 평균하면 그 편향들이 상쇄됩니다.
이후. 프롬프트 자체를 학습하는 후속 연구가 나왔습니다. CoOp은 템플릿 문장 대신 학습 가능한 컨텍스트 벡터를 써서, 소량의 라벨로 프롬프트만 튜닝해 zero-shot보다 나은 성능을 냅니다.
5장. SigLIP, softmax 대신 sigmoid
CLIP 손실의 구조적 제약. 배치 전체를 softmax로 정규화해야 해서 배치 크기에 의존합니다. 그리고 분산 학습에서 모든 장비의 벡터를 모아야 해 통신 비용이 큽니다.
SigLIP의 변경.
| CLIP (InfoNCE) | SigLIP (sigmoid) | |
|---|---|---|
| 손실 | 배치 전체를 softmax 정규화 | 각 쌍마다 독립적인 sigmoid. 전역 정규화 불필요 |
| 배치 의존 | 큰 배치일수록 유리 | 배치 크기와 손실이 분리. 작은 배치에서도 동작 |
| 효율 | 전 쌍 유사도를 전역 집계 | 쌍 단위라 분산과 대규모에 유리 |
발상이 단순합니다. 이 이미지와 이 캡션이 짝인지를 이진 분류 문제로 봅니다. 짝이면 1, 아니면 0이라 다른 쌍과 비교할 필요가 없어집니다.
결과를 정확히 읽기. SigLIP 논문은 4개의 TPUv4만으로 Base 규모 CLIP을 batch 4k로 학습할 수 있음을 보였고, Locked-image Tuning과 결합한 Large LiT/SigLiT 설정은 2일 학습으로 ImageNet zero-shot 84.5%를 보고했습니다. 84.5%를 단순히 “4칩에서 학습한 기본 SigLIP”의 결과라고 쓰면 실험 설정이 사라집니다.
이후의 위치. SigLIP 계열은 여러 공개 VLM의 vision tower로 채택됐지만 “대부분의 VLM이 SigLIP”이라고 일반화할 정도로 단일 표준은 아닙니다. CLIP 계열, SigLIP 계열, EVA/InternViT 계열, 모델 자체의 vision encoder 등 선택지가 공존합니다.
2025년의 SigLIP 2는 원래 sigmoid objective에 captioning 기반 사전학습, self-distillation, masked prediction, online data curation을 결합하고 다국어·localization·dense feature 성능을 강화했습니다. 따라서 현재 SigLIP을 볼 때는 손실 함수 하나의 개선뿐 아니라 범용 vision-language encoder 계열로 확장됐다는 흐름까지 보는 편이 맞습니다.
6장. 어디에 쓰나
zero-shot 분류. 라벨 데이터 없이 클래스를 텍스트로 정의해 분류합니다. 클래스가 자주 바뀌는 콘텐츠 모더레이션이나 상품 분류에서 유용합니다.
이미지 검색. 텍스트 쿼리로 이미지를 찾습니다. 벡터 DB에 이미지 임베딩을 넣어두면 되고 사내 이미지 자산 검색에 자주 쓰입니다.
VLM의 비전 인코더. 많은 VLM이 CLIP/SigLIP처럼 이미지와 언어가 이미 정렬된 vision-language encoder를 활용하지만, 모든 VLM이 이 계열을 쓰는 것은 아닙니다. 일부는 다른 pretrained vision tower나 자체 vision encoder를 사용합니다.
CLIP/SigLIP 계열을 쓰는 이유 중 하나는 vision representation이 이미 자연어 신호와 정렬돼 있어 multimodal alignment의 좋은 출발점을 제공하기 때문입니다. 그렇다고 순수 vision encoder를 쓰면 모든 정렬을 처음부터 배워야 하는 것은 아닙니다. 사전학습된 vision encoder에 projector·adapter를 붙이고 별도 multimodal 학습으로 언어모델과 연결하는 설계도 널리 사용됩니다.
데이터 필터링. 대규모 이미지 데이터셋에서 캡션과 안 맞는 쌍을 걸러내는 데도 씁니다. CLIP 점수가 낮은 쌍을 버립니다. CLIP으로 만든 데이터로 다음 CLIP을 학습하는 흥미로운 순환입니다.
생성 모델에서의 활용. CLIP 유사도는 초기 텍스트-이미지 생성 연구에서 생성 결과와 프롬프트의 정렬도를 평가하거나 guidance signal로 사용하는 데 중요했습니다. 현대 생성 모델은 자체 text encoder나 T5/CLIP 계열 조건 인코더 등 다양한 구성을 쓰므로, CLIP guidance가 모든 최신 이미지 생성기의 공통 구조라고 보면 안 됩니다.
7장. 한계
세밀한 구분이 약하다. 비슷한 품종이나 미세한 차이를 구별하는 데는 지도학습 모델보다 떨어질 수 있습니다. 웹 캡션은 대개 거칠어서 강아지 사진이라고 쓰지 시베리안 허스키 생후 3개월이라고 안 씁니다. 학습 신호의 세밀함이 캡션의 세밀함에 묶입니다.
개수 세기와 공간 관계에 약하다. 사과 세 개와 사과 다섯 개를 잘 구분하지 못하는 경향이 보고됩니다. 왼쪽에 고양이 오른쪽에 개 같은 공간 관계도 약합니다.
같은 이유입니다. 캡션에 그런 정보가 정확히 담기지 않는 경우가 많고, 대조학습은 전체 유사도만 보므로 구성적 관계를 배울 압력이 약합니다.
학습 데이터의 편향. 웹에서 긁은 데이터라 그 안의 편향이 임베딩에 들어갑니다. 직업과 성별의 연관, 인종과 특정 형용사의 연관 같은 것들이고 CLIP 논문 자신이 이 문제를 별도 절로 다룹니다.
프롬프트에 민감하다. 같은 클래스라도 표현에 따라 결과가 달라집니다. 4장의 프롬프트 앙상블이 이 민감성에 대한 대응이기도 합니다.
전역 매칭의 한계. CLIP의 학습 목표는 image-text pair의 전역적 compatibility를 높이는 것입니다. 이 목표만으로 개수, 세밀한 공간 관계, 부정처럼 구성적 의미를 안정적으로 표현하는 능력이 보장되지는 않습니다. 따라서 높은 CLIP similarity를 곧바로 세부 관계까지 정확히 “이해했다”는 증거로 해석하면 안 됩니다.
8장. 정리
CLIP은 이미지와 텍스트 인코더를 대조학습으로 정렬해 하나의 공유 임베딩 공간을 만듭니다.
클래스를 자연어로 표현할 수 있어서 별도의 task-specific 학습 없이 텍스트로 정의한 후보 클래스를 비교하고 이미지-텍스트 검색에 활용할 수 있습니다.
SigLIP은 전역 softmax 정규화를 pairwise sigmoid loss로 바꿔 loss와 전역 batch normalization의 결합을 줄였고, 이후 SigLIP 2까지 이어지며 멀티모달 vision encoder의 주요 계열 중 하나가 됐습니다.
무엇을 남겼나. 라벨을 고정 집합이 아니라 자연어로 두자는 발상이 열린 어휘 비전의 출발점이 됐습니다. 검출과 분할에도 같은 발상이 퍼져 클래스를 텍스트로 주는 검출기와 분할기가 나왔습니다.
그리고 웹의 자연스러운 짝을 감독 신호로 쓴다는 발상은 라벨링 비용 없이 규모를 얻는 방법이고, 이 패턴이 여러 분야에서 반복됩니다.
고를 때.
분류할 클래스가 고정이고 데이터가 있다 지도학습 모델
클래스가 자주 바뀐다 CLIP 계열 zero-shot
소량 라벨이 있다 CLIP + 프롬프트 튜닝 또는 선형 프로브
이미지 검색이 필요하다 CLIP 계열
VLM 을 만든다 SigLIP/CLIP 계열을 포함해 목표 모델에 맞는 vision tower 비교
세밀한 구분이 핵심이다 도메인 데이터로 지도학습용어 정리
| 용어 | 한 줄 뜻 |
|---|---|
| CLIP | 이미지와 텍스트 인코더를 대조학습으로 정렬한 모델 |
| 대조학습 (contrastive) | 짝은 가깝게, 아닌 것은 멀게 당기고 미는 표현 학습 |
| dual-encoder | 이미지용과 텍스트용 인코더가 따로 있는 구조 |
| 공유 임베딩 공간 | 이미지와 텍스트 벡터를 직접 비교할 수 있게 정렬된 공간 |
| 코사인 유사도 | 두 벡터가 이루는 각도로 유사도를 재는 척도 |
| zero-shot | 그 작업의 학습 데이터를 하나도 안 보고 바로 추론하는 것 |
| InfoNCE | 배치 전체를 softmax 정규화하는 대조손실 |
| negative | 짝이 아닌 조합. 대조학습에서 밀어내야 할 대상 |
| 온도 (temperature) | 유사도 분포의 날카로움을 조절하는 스칼라 |
| 프롬프트 앙상블 | 여러 템플릿의 텍스트 벡터를 평균해 정확도를 올리는 기법 |
| CoOp | 템플릿 대신 학습 가능한 컨텍스트 벡터를 쓰는 프롬프트 튜닝 |
| SigLIP | 전역 softmax 정규화 대신 image-text pair별 sigmoid loss를 쓰는 vision-language pretraining 방식 |
| 열린 어휘 (open-vocabulary) | 클래스 집합이 고정되지 않고 텍스트로 정의되는 방식 |
참고자료
Learning Transferable Visual Models From Natural Language Supervision (arXiv 2103.00020, CLIP, ICML 2021). Figure 1 이 대조 사전학습과 zero-shot 분류기 구성 도해, Figure 3 이 numpy 스타일 의사코드다. ar5iv
Sigmoid Loss for Language Image Pre-Training (arXiv 2303.15343, SigLIP, ICCV 2023)
Learning to Prompt for Vision-Language Models (arXiv 2109.01134, CoOp, IJCV 2022)
SigLIP 2: Multilingual Vision-Language Encoders (arXiv 2502.14786)
'Computer Vision > CV (Computer Vision)' 카테고리의 다른 글
| BiRefNet (Bilateral Reference for High-Resolution Dichotomous Image Segmentation) (0) | 2024.11.25 |
|---|---|
| Vision Metrics (0) | 2023.07.13 |
| [CV] One-Stage와 Two-Stage 차이 (0) | 2022.11.16 |
| [CV] 영상 처리(image processing) (0) | 2022.10.28 |
| [CV] VGGNet (Simonyan and Zisserman, 2015) (0) | 2022.10.28 |
댓글