TT Lab
요금제

한국어

시작하기
블로그

블로그

열린 어휘 검출: CLIP 글자 임베딩을 검출기에 붙이기 — OWL-ViT, OWLv2, Grounding DINO, YOLO-World, YOLOE

상태: 초안 (2026-10-13), 일부 실측. 분류 머리 예제는 진짜 CLIP 가중치 없이 구조만 흉내 낸 것입니다(code/12_open_vocab_head.py, 노트북 CPU 1초 안). 이 글의 모델들은 우리 환경에서 돌려 보지 않았습니다(미실측). 논문 수치는 원문을 열어 조건과 함께 옮겼고, 하드웨어는 등급으로 적었습니다. CLIP 자체의 학습 원리는 자매 시리즈(자기지도·영상·자세·스포츠)에서 다룹니다. 작성 규칙: 실측 데이터가 기본이고, 못 잰 것은 「미실측」으로 표시합니다.

목차

1. 닫힌 어휘의 벽

5·6·8편의 검출기는 닫힌 어휘입니다. COCO 로 학습하면 80가지(사람, 자동차, 테니스 라켓…)만 찾습니다. 「탁구 라켓」이나 「탁구대」를 찾게 하려면 그 라벨을 단 데이터를 모아 다시 학습해야 합니다.

구조로 보면 이유가 단순합니다. 검출기의 마지막 분류 머리는 (영역 특징) · Wᵀ 꼴이고, W 는 클래스마다 한 행인 고정 행렬(80×d)입니다. 클래스 하나를 더하려면 W 에 행이 하나 더 필요한데, 그 행의 값은 데이터로 학습해야만 얻습니다.

열린 어휘 검출: 고정 분류 머리를 글자 임베딩으로 바꾼다 닫힌 어휘(보통 검출기) 영역 특징 분류 머리 W (80×d) COCO 80종만. 새 종류는 다시 학습 열린 어휘(OWL-ViT · Grounding DINO · YOLO-World · YOLOE) 영역 임베딩 r 글자 인코더(CLIP 계열) 입력: "racket", "ball", "table" … 유사도 r·tᵢ / τ 어휘마다 점수 어휘 = 그때그때 적는 글자 클래스 추가 = 행 하나 추가 어휘를 미리 정하면 글자 임베딩을 한 번만 계산해 가중치로 「구워」 둘 수 있다(YOLO-World·YOLOE).
그림: 닫힌 어휘 검출기의 고정 분류 머리와, 글자 인코더가 만든 임베딩으로 그것을 대신하는 열린 어휘 검출기의 비교

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 는 가장 단순한 방법을 보였습니다.

  1. CLIP 처럼 대조 학습한 ViT(7편)를 가져옵니다.
  2. 마지막에 토큰들을 하나로 모으는 풀링을 없앱니다. 그러면 조각 토큰마다 출력이 남습니다.
  3. 토큰마다 가벼운 상자 머리(이 토큰이 맡는 물체의 상자)와 분류 머리(토큰 임베딩)를 붙입니다. 분류 머리의 가중치는 클래스 이름의 글자 임베딩입니다.
  4. 검출 데이터(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)으로 이 벽을 넘습니다.

  1. 기존 OWL-ViT(CLIP L/14)로 웹 그림 데이터 WebLI(그림-대체 글 약 100억 쌍) 전체에 가짜 상자 라벨을 답니다. 어휘는 그림의 대체 글에서 뽑은 말들입니다.
  2. 이 가짜 라벨로 새 모델을 학습합니다(OWL-ST). 학습 예가 10억 개를 넘습니다.
  3. 검출 데이터로 미세조정합니다.

결과(논문): 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 는 그림 특징과 글자 임베딩을 마지막에 내적 한 번으로만 만납니다. 「왼쪽 선수가 든 라켓」처럼 문장 속 관계가 중요하면 부족합니다. 다른 갈래는 둘을 일찍부터 깊게 섞습니다.

깊게 섞는 대가는 속도입니다. 글자가 바뀌면 그림 쪽 계산도 다시 해야 하므로, 어휘를 미리 구워 둘 수 없습니다.

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): 세 가지 프롬프트를 한 모델에 담았습니다.

결과(논문): 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. 한계와 우리 프로젝트

이 글로 시리즈 1부를 마칩니다. 이름표 없이 배우는 자기지도 학습, CLIP, 그리고 영상·자세·스포츠 모델은 자매 시리즈(자기지도·영상·자세·스포츠 편 폴더)에서 이어집니다.

티티 한마디. 예전 검출기한테 「라켓」을 가르치려면 라켓 사진을 잔뜩 모아야 했어요. 이제는 「racket」 한 단어면 돼요. 다만 「table」이라고만 하면 식탁을 찾아올 수 있으니 말을 잘 골라야 해요.

참고 문헌

로그인하면 좋아요를 누를 수 있습니다

댓글

아직 댓글이 없습니다.

로그인하면 댓글을 쓸 수 있습니다