상태: 초안 (2026-10-13), 일부 실측. 분류 머리 예제는 진짜 CLIP 가중치 없이 구조만 흉내 낸 것입니다(
code/12_open_vocab_head.py, 노트북 CPU 1초 안). 이 글의 모델들은 우리 환경에서 돌려 보지 않았습니다(미실측). 논문 수치는 원문을 열어 조건과 함께 옮겼고, 하드웨어는 등급으로 적었습니다. CLIP 자체의 학습 원리는 자매 시리즈(자기지도·영상·자세·스포츠)에서 다룹니다. 작성 규칙: 실측 데이터가 기본이고, 못 잰 것은 「미실측」으로 표시합니다.
목차
- 1. 닫힌 어휘의 벽
- 2. 열쇠: CLIP 의 글자 임베딩
- 3. OWL-ViT(2022): ViT 토큰마다 상자 하나
- 4. OWLv2(2023): 스스로 라벨을 달아 키우기
- 5. GLIP·Grounding DINO: 글자와 그림을 깊게 섞기
- 6. YOLO-World·YOLOE: 실시간으로
- 7. 정리: 어떻게 고르나
- 8. 한계와 우리 프로젝트
- 참고 문헌
1. 닫힌 어휘의 벽
5·6·8편의 검출기는 닫힌 어휘입니다. COCO 로 학습하면 80가지(사람, 자동차, 테니스 라켓…)만 찾습니다. 「탁구 라켓」이나 「탁구대」를 찾게 하려면 그 라벨을 단 데이터를 모아 다시 학습해야 합니다.
구조로 보면 이유가 단순합니다. 검출기의 마지막 분류 머리는 (영역 특징) · Wᵀ 꼴이고, W 는 클래스마다 한 행인 고정 행렬(80×d)입니다. 클래스 하나를 더하려면 W 에 행이 하나 더 필요한데, 그 행의 값은 데이터로 학습해야만 얻습니다.
2. 열쇠: CLIP 의 글자 임베딩
CLIP(2021)은 인터넷의 그림-설명 쌍 4억 개로, 그림 인코더와 글자 인코더가 같은 공간에 벡터를 내도록 학습한 모델입니다. 짝이 맞는 그림과 글은 가깝게, 안 맞는 것은 멀게 하는 대조 학습입니다. 결과로 「a photo of a racket」의 글자 벡터와 라켓 사진의 그림 벡터가 가까워집니다. 이 글자 벡터를 분류기의 가중치로 쓰면, ImageNet 학습 그림을 하나도 쓰지 않고(제로샷) ImageNet top-1 76.2% 를 냈습니다(ViT-L/14, 336px). ResNet-50 을 ImageNet 으로 직접 학습한 것과 같은 수준입니다.
CLIP 이 왜 이렇게 학습되는지는 자매 시리즈에서 다루고, 이 글은 이 글자 벡터를 검출기에 어떻게 붙이는가만 봅니다. 생각은 한 줄입니다. W 의 행을 학습하지 말고, 클래스 이름을 글자 인코더에 넣어 만든다.
닫힌 어휘: 점수 = r · W[클래스]ᵀ (W 는 학습한 80×d 행렬)
열린 어휘: 점수 = r · 글자인코더("racket")ᵀ / τ (어휘는 쓸 때 적는다)
직접 해 보기: 클래스 추가 = 행 하나 추가
진짜 CLIP 대신 무작위 2층 MLP 를 글자 인코더 흉내로 쓰고, 80×80 특징 지도(640px 입력, 보폭 8 에 해당)에 분류 머리를 붙였습니다(실측. 숫자 자체에는 의미가 없고 구조만 봅니다).
어휘 3개 → 분류 머리 행렬 (3, 256)
「racket」을 더하면 (4, 256) — 다른 가중치는 그대로, 출력 칸마다 로짓이 4개
두 방식 출력 최대 차 0.0e+00, 프레임당 9.09 ms → 2.71 ms
마지막 줄은 매 프레임 어휘를 글자 인코더에 넣는 방식과, 어휘를 한 번만 인코딩해 행렬로 구워 둔 방식을 비교한 것입니다. 답은 완전히 같고 시간만 줄었습니다. 흉내 인코더가 아주 작아서 차이가 3배 남짓이지만, 실제 CLIP 글자 인코더는 트랜스포머라 이 차이가 더 클 것입니다(미실측). 이것이 6절의 YOLO-World·YOLOE 가 노리는 것입니다.
3. OWL-ViT(2022): ViT 토큰마다 상자 하나
Minderer 등의 OWL-ViT 는 가장 단순한 방법을 보였습니다.
- CLIP 처럼 대조 학습한 ViT(7편)를 가져옵니다.
- 마지막에 토큰들을 하나로 모으는 풀링을 없앱니다. 그러면 조각 토큰마다 출력이 남습니다.
- 토큰마다 가벼운 상자 머리(이 토큰이 맡는 물체의 상자)와 분류 머리(토큰 임베딩)를 붙입니다. 분류 머리의 가중치는 클래스 이름의 글자 임베딩입니다.
- 검출 데이터(OpenImages·Objects365·Visual Genome 중 둘을 섞어)로 미세조정합니다.
8편의 DETR 처럼 토큰(슬롯) 하나가 물체 하나를 맡고, 짝짓기도 DETR 식 집합 손실을 씁니다. 다른 점은 슬롯이 따로 있지 않고 그림 조각 토큰이 곧 슬롯이라는 것입니다.
결과(논문): LVIS v1.0 검증에서 AP 34.6, 희귀 클래스 AP 31.2(ViT-L/14, Objects365+VG 학습, 840px). 희귀 클래스의 이름은 학습에서 뺐으므로 31.2 는 처음 보는 클래스에 대한 제로샷 값입니다.
글자 대신 예시 그림으로 물을 수도 있습니다. 그림 조각의 임베딩을 질의로 쓰면 「이것과 비슷한 것을 찾아라」가 됩니다. 학습에 없던 COCO 클래스에서 원샷 검출 AP50 이 이전 최고 26.0 에서 41.8 로 올랐습니다.
4. OWLv2(2023): 스스로 라벨을 달아 키우기
검출 라벨은 비쌉니다. Minderer 등은 OWLv2 에서 자기 학습(self-training)으로 이 벽을 넘습니다.
- 기존 OWL-ViT(CLIP L/14)로 웹 그림 데이터 WebLI(그림-대체 글 약 100억 쌍) 전체에 가짜 상자 라벨을 답니다. 어휘는 그림의 대체 글에서 뽑은 말들입니다.
- 이 가짜 라벨로 새 모델을 학습합니다(OWL-ST). 학습 예가 10억 개를 넘습니다.
- 검출 데이터로 미세조정합니다.
결과(논문): LVIS 희귀 클래스 AP 가 31.2% → 44.6%(L/14, 상대 43% 향상), 더 큰 G/14 는 47.2%. 규모가 커지니 학습 효율도 손봤습니다. 상위 k 개 토큰만 상자를 계산하는 「물체다움」 머리, 학습 때 화소 분산이 낮은 조각 50% 버리기, 그림 여러 장을 모자이크로 붙이기를 합쳐 학습 계산을 약 절반으로, 처리량을 약 2배로 했습니다.
9편 SAM 의 데이터 엔진과 같은 생각입니다. 모델이 라벨을 만들고, 그 라벨로 더 나은 모델을 만든다. 11편의 SAM 3 는 PCS 정확도를 이 OWLv2 와 비교했습니다.
5. GLIP·Grounding DINO: 글자와 그림을 깊게 섞기
OWL-ViT 는 그림 특징과 글자 임베딩을 마지막에 내적 한 번으로만 만납니다. 「왼쪽 선수가 든 라켓」처럼 문장 속 관계가 중요하면 부족합니다. 다른 갈래는 둘을 일찍부터 깊게 섞습니다.
- GLIP(2022): 검출을 구절 찾기(phrase grounding, 문장 속 구절에 맞는 영역 찾기)로 다시 정의했습니다. 사람이 단 그라운딩 데이터 300만 + 웹 그림-글 2,400만으로 사전학습했고, GLIP-L 은 COCO 그림을 보지 않고 COCO 검증 49.8 AP, LVIS 26.9 AP 였습니다.
- Grounding DINO(2024): 8편의 DINO 검출기에 글자를 깊게 섞었습니다. 특징 강화기(그림 셀프 어텐션 + 글자→그림·그림→글자 교차 어텐션), 글자로 고르는 질의(글자와 잘 맞는 그림 위치에서 질의를 시작), 두 모달리티를 함께 보는 디코더입니다. Swin-L 판(Objects365·OpenImages·GoldG 학습)이 COCO 제로샷 52.5 AP, 미세조정하면 test-dev 63.0 AP 였습니다. 여러 분야 데이터셋 묶음 ODinW 의 제로샷 평균 26.1 AP 도 보고했는데, 이 값을 낸 모델은 학습 데이터에 COCO 가 들어 있습니다. 코드는 Apache-2.0 입니다.
깊게 섞는 대가는 속도입니다. 글자가 바뀌면 그림 쪽 계산도 다시 해야 하므로, 어휘를 미리 구워 둘 수 없습니다.
6. YOLO-World·YOLOE: 실시간으로
6편의 YOLO 계열 속도에 열린 어휘를 얹으려는 시도입니다.
YOLO-World(2024): YOLO 의 특징 피라미드에 글자 임베딩을 섞는 RepVL-PAN 과, 영역-글자 대조 손실을 씁니다. 핵심은 **「프롬프트 먼저, 검출은 그다음」**입니다. 사용자가 어휘를 정하면 한 번만 인코딩해 망의 가중치로 다시 매개변수화(re-parameterize)하고, 추론 때는 글자 인코더를 아예 떼어 냅니다. 2절 예제의 「구워 두기」입니다.
결과(논문 표 2): LVIS minival 제로샷 35.4 AP, 52.0 FPS. 조건이 많이 붙는 숫자입니다. 가장 큰 YOLO-World-L(구운 뒤 4,800만 파라미터, 굽기 전 1억 1,000만·17.6 FPS), Objects365 + GoldG + 가짜 라벨을 단 CC3M 24만 6천 장으로 학습, 데이터센터 GPU 한 장에서 FP16·TensorRT 없이 잰 값입니다. 공식 저장소는 GPL-3.0 이고, 상업 이용은 별도 문의를 안내합니다.
YOLOE(2025): 세 가지 프롬프트를 한 모델에 담았습니다.
- RepRTA(글자): 글자 임베딩을 다듬는 작은 보조 망을 분류 머리에 매개변수로 합쳐 넣어 추론 비용이 0
- SAVPE(예시 그림): 의미와 위치를 나눠 보는 시각 프롬프트 인코더
- LRPC(프롬프트 없이): 큰 내장 어휘에서 스스로 고르기
결과(논문): YOLO-Worldv2-S 대비 LVIS minival +3.5 AP, 학습 비용 약 1/3, 추론 1.4배 빠름(추론용 데이터센터 GPU, TensorRT). 공식 저장소는 AGPL-3.0 입니다.
두 모델 모두 Ultralytics 패키지(AGPL-3.0)에도 들어 있습니다. 6편 5절의 AGPL 조건이 그대로 따라옵니다.
7. 정리: 어떻게 고르나
| 모델 | 글자와 그림이 만나는 곳 | 어휘 굽기 | 강점 | 라이선스 |
|---|---|---|---|---|
| OWL-ViT / OWLv2 | 마지막 내적 | 가능 | 단순, 예시 그림 질의, 규모 | 코드는 google-research/scenic 저장소. 라이선스는 이 글에서 확인하지 못함 |
| Grounding DINO | 처음부터 깊게 | 어려움 | 문장 속 관계, 정확도 | Apache-2.0 |
| YOLO-World | 특징 피라미드 | 구워 넣음 | 실시간 | GPL-3.0 |
| YOLOE | 분류 머리 | 구워 넣음 | 실시간, 프롬프트 세 종류 | AGPL-3.0 |
| SAM 3(11편) | 검출기 질의 + 존재 토큰 | — | 마스크·영상까지 | SAM License |
8. 한계와 우리 프로젝트
- 말의 모호함. 「table」은 식탁이고 「table tennis table」이어야 탁구대입니다. 「paddle」은 카누 노일 수도 있습니다. 열린 어휘는 어휘를 고르는 일이 곧 프롬프트 설계입니다.
- 작은 물체. 이 모델들은 대체로 그림 전체를 조각·특징 피라미드로 보므로, 지름 몇 화소의 탁구공은 여전히 어렵습니다. 공 찾기는 전용 히트맵 모델(3편)이 맡습니다.
- 제로샷 숫자의 조건. 「처음 보는 클래스」의 기준이 논문마다 다릅니다(학습에서 이름만 뺐나, 그 데이터셋 그림을 아예 안 봤나). ODinW 의 26.1 처럼 학습 데이터에 평가와 겹치는 데이터가 들어 있는 경우도 있습니다.
- TT Score 에서는 아직 열린 어휘 검출기를 쓰지 않습니다. 탁구대는 사람의 탭과 SAM 2.1 로 찾고, 글자로 찾기는 SAM 3 를 후보로 두었습니다(11편). 사람·라켓처럼 「몇 가지 정해진 것」만 필요하면 닫힌 어휘 모델이 더 빠르고 정확한 경우가 많습니다. 열린 어휘가 빛나는 곳은 「무엇을 찾을지 쓰는 사람이 정할 때」, 예컨대 코치가 「셔틀콕 통」이나 「공 바구니」를 그때그때 찾고 싶을 때입니다(미실측, 아이디어 단계).
이 글로 시리즈 1부를 마칩니다. 이름표 없이 배우는 자기지도 학습, CLIP, 그리고 영상·자세·스포츠 모델은 자매 시리즈(자기지도·영상·자세·스포츠 편 폴더)에서 이어집니다.
티티 한마디. 예전 검출기한테 「라켓」을 가르치려면 라켓 사진을 잔뜩 모아야 했어요. 이제는 「racket」 한 단어면 돼요. 다만 「table」이라고만 하면 식탁을 찾아올 수 있으니 말을 잘 골라야 해요.
참고 문헌
- Radford, A. et al. (2021). Learning Transferable Visual Models From Natural Language Supervision. ICML 2021. https://arxiv.org/abs/2103.00020
- Minderer, M. et al. (2022). Simple Open-Vocabulary Object Detection with Vision Transformers. ECCV 2022. https://arxiv.org/abs/2205.06230
- Minderer, M., Gritsenko, A., Houlsby, N. (2023). Scaling Open-Vocabulary Object Detection. NeurIPS 2023. https://arxiv.org/abs/2306.09683
- Li, L. H. et al. (2022). Grounded Language-Image Pre-training. CVPR 2022. https://arxiv.org/abs/2112.03857
- Liu, S. et al. (2024). Grounding DINO: Marrying DINO with Grounded Pre-Training for Open-Set Object Detection. ECCV 2024. https://arxiv.org/abs/2303.05499
- Cheng, T. et al. (2024). YOLO-World: Real-Time Open-Vocabulary Object Detection. CVPR 2024. https://arxiv.org/abs/2401.17270, 저장소 https://github.com/AILab-CVC/YOLO-World (GPL-3.0)
- Wang, A. et al. (2025). YOLOE: Real-Time Seeing Anything. ICCV 2025. https://arxiv.org/abs/2503.07465, 저장소 https://github.com/THU-MIG/yoloe (AGPL-3.0)
- 예제 코드와 출력: 이 폴더의
code/12_open_vocab_head.py,code/12_open_vocab_head.out.txt