TT Lab
요금제

한국어

시작하기
블로그

블로그

DETR: 검출을 집합 예측으로, 헝가리안 매칭과 앵커 없는 검출

상태: 초안 (2026-10-13), 일부 실측. 헝가리안·GIoU 예제는 노트북 CPU 에서 직접 돌린 값입니다(code/08_hungarian.py, 1초 안). 논문 수치는 원문을 열어 조건과 함께 옮겼고, 하드웨어는 등급으로 적었습니다. 작성 규칙: 실측 데이터가 기본이고, 못 잰 것은 「미실측」으로 표시합니다.

목차

1. 손으로 만든 부품들

5·6편의 검출기에는 사람이 정한 부품이 많았습니다. 앵커의 크기·비율, 앵커에 양성·음성 라벨을 붙이는 IoU 문턱, 중복을 지우는 NMS 와 그 문턱입니다. 이 부품들은 잘 정하면 동작하지만, 데이터가 바뀌면 다시 정해야 하고 잘못 정하면 조용히 구멍이 생깁니다(5편의 「양성 0개」, 「선수 B 를 지운 NMS」).

Carion 등의 DETR(DEtection TRansformer)은 질문을 바꿉니다. 검출의 정답은 상자들의 집합입니다. 순서가 없고, 중복이 없습니다. 그렇다면 모델도 처음부터 집합을 내게 학습하면 앵커도 NMS 도 필요 없지 않을까?

2. 구조: 질의 슬롯 N 개

DETR: 질의 N개가 상자를 내고, 정답과 1:1 로 짝짓는다 CNN 몸통 특징 지도 트랜스포머 인코더 · 디코더 질의 슬롯 N=100개 슬롯 0: 선수 슬롯 1: 없음 슬롯 2: 공 슬롯 3: 없음 슬롯 4: 선수 슬롯 5: 없음 선수 A 선수 B 공 짝이 없는 슬롯(1·3·5)은 「물체 없음」을 배운다. 짝짓기: 비용(클래스 확률 + L1 + GIoU)의 합이 가장 작게(헝가리안). 짝이 하나뿐이라 NMS 가 필요 없다. → 학습 때만 정답과 짝짓기, 추론 때는 「없음」이 아닌 슬롯을 그대로 출력
그림: CNN 몸통과 트랜스포머를 거친 질의 슬롯들이 각자 상자를 내고, 학습 때 정답과 1:1 로 짝지어지는 DETR
  1. CNN 몸통(ResNet-50 등)이 특징 지도를 만듭니다.
  2. 트랜스포머 인코더가 특징 지도의 위치들 사이 관계를 셀프 어텐션으로 섞습니다(7편).
  3. 트랜스포머 디코더에 학습하는 질의 슬롯 N=100개를 넣습니다. 각 슬롯은 인코더 출력을 교차 어텐션으로 보고, 서로를 셀프 어텐션으로 봅니다.
  4. 슬롯마다 작은 MLP 가 클래스(「물체 없음」 포함)와 상자 하나를 냅니다.

슬롯끼리 서로 본다는 점이 중요합니다. 「저 물체는 옆 슬롯이 맡았으니 나는 다른 걸 맡자」를 망 안에서 배울 수 있어서, 중복을 지우는 NMS 가 필요 없어집니다. 실제로 논문은 마지막 층 출력에 NMS 를 걸면 AP 가 오히려 조금 떨어진다고 보고했습니다.

3. 학습: 1:1 짝짓기

출력은 100개, 정답은 보통 몇 개입니다. 어떤 출력을 어떤 정답과 비교해 손실을 계산할까요. DETR 은 비용이 가장 작은 1:1 짝을 찾습니다.

짝 비용(정답 i, 슬롯 j) = −p_j(정답 i 의 클래스) + 5 · L1(상자) + 2 · (1 − GIoU(상자))

(가중치 λ_L1 = 5, λ_iou = 2 는 논문 값.) 짝이 정해지면, 짝지어진 슬롯은 정답 클래스와 상자를 배우고, 짝 없는 슬롯은 「물체 없음」을 배웁니다. 「물체 없음」은 대부분의 슬롯이 해당하므로 그 손실을 10분의 1 로 줄입니다(4편 focal loss 와 같은 불균형 문제). 디코더의 모든 층 출력에 같은 짝짓기 손실을 거는 보조 손실도 둡니다.

이 짝짓기는 고전 문제인 할당 문제이고, 1955년 Kuhn 의 헝가리안 알고리즘으로 풉니다.

GIoU: 안 겹쳐도 거리를 알려 준다

IoU 는 두 상자가 안 겹치면 얼마나 멀든 0 입니다. 손실로 쓰면 기울기가 없습니다. GIoU(Generalized IoU)는 두 상자를 감싸는 가장 작은 상자 C 를 써서 「C 안의 빈 공간」만큼 깎습니다.

GIoU = IoU − |C 에서 두 상자의 합집합을 뺀 넓이| / |C|      (−1 ~ 1)

손으로 계산하면 이렇습니다(실측).

정답 (0,0,10,10) 대 IoU GIoU
(0,0,10,10) 같음 1.000 +1.000
(5,0,15,10) 반 겹침 0.333 +0.333
(12,0,22,10) 2칸 떨어짐 0.000 −0.091
(30,0,40,10) 20칸 떨어짐 0.000 −0.500

IoU 는 둘 다 0 이지만 GIoU 는 멀수록 작아집니다. 상자를 정답 쪽으로 끌어오는 기울기가 생깁니다.

4. 직접 해 보기: 헝가리안 알고리즘

탐욕으로는 안 되는 이유

선수 둘이 겹쳐 선 장면에서 슬롯 셋의 비용입니다. 슬롯 0 은 두 선수 사이에 걸쳐 둘 다에 그럭저럭 맞고, 슬롯 1 은 선수 A 에만, 슬롯 2 는 선수 B 에 꽤 맞습니다.

          슬롯 0   슬롯 1   슬롯 2
선수 A     0.9      1.0      6.0
선수 B     0.8      6.0      3.0

「정답마다 남은 슬롯 중 가장 싼 것을 차례로」 고르면 A 가 슬롯 0(0.9)을 먼저 가져가고 B 는 슬롯 2(3.0)를 받아 총비용 3.9 입니다. 헝가리안은 A–슬롯 1, B–슬롯 0 으로 총비용 1.8 을 찾습니다(실측). 먼저 고른 쪽이 이기는 방식은 전체로는 손해일 수 있습니다. 탐욕 짝을 학습에 쓰면 슬롯 2 가 엉뚱하게 선수 B 를 배우고 슬롯 1 은 「물체 없음」을 배우게 됩니다.

구현과 검증

퍼텐셜(이중 변수)을 쓰는 O(n²m) 판을 numpy 로 직접 짰습니다(정답 n ≤ 슬롯 m). 핵심은 「행마다 하나씩 짝을 늘려 가되, 지금까지의 짝을 바꾸는 더 싼 길(증가 경로)이 있으면 그 길을 따라 짝을 뒤집는다」입니다.

확인 결과(실측)
무작위 4×7 문제 200개에서 순열 전수 조사와 총비용 일치 200/200
정답 10 × 슬롯 100 0.2ms
정답 50 × 슬롯 100 1.4ms
정답 100 × 슬롯 100 8.1ms
정답 300 × 슬롯 300 67.6ms

순열로 다 보면 정답 10 × 슬롯 100 만 해도 경우의 수가 6.3×10¹⁹ 입니다. 헝가리안 계열 알고리즘은 다항 시간(n³ 꼴)에 풉니다. DETR 의 그림 한 장(정답 수십 개 × 슬롯 100)은 밀리초 단위라서 학습의 병목이 되지 않습니다. 실무에서는 SciPy 의 linear_sum_assignment(변형된 Jonker–Volgenant 알고리즘)를 많이 씁니다.

DETR 식 비용(클래스 확률 + 5·L1 + 2·(1−GIoU))으로 정답 3개(선수 둘, 공)와 슬롯 6개를 짝지어 보면, 각 정답이 가장 그럴듯한 슬롯에 붙고 나머지 슬롯 셋은 「물체 없음」으로 배정됩니다(code/08_hungarian.out.txt).

5. 논문 수치

모델(COCO 검증) AP 작은 물체 AP_S 큰 물체 AP_L 파라미터 GFLOPs FPS
Faster R-CNN-FPN+(R50) 42.0 26.6 53.4 4,200만 180 26
DETR(R50) 42.0 20.5 61.1 4,100만 86 28

(논문 표 1. Faster R-CNN 쪽은 GIoU 손실·무작위 자르기 증강·약 109에폭의 강화판. 속도는 TorchScript 모델로 쟀고 GPU 는 명시되지 않음.)

6. 후속 연구: 약점 줄이기

모델 바꾼 것 수치(논문, COCO)
Deformable DETR(2021) 전체를 보는 어텐션 대신, 기준점 주변의 표본 점 몇 개(K=4) 만 보는 어텐션. 여러 해상도 사용 50에폭 43.8 AP, AP_S 26.4(DETR 500에폭 20.5). 학습 GPU 시간 325 대 2,000
DN-DETR(2022) 정답 상자에 잡음을 섞어 디코더에 넣고 원래 상자를 복원하게 하는 잡음 제거 학습 — 불안정한 짝짓기를 우회 같은 설정에서 +1.9 AP, 절반의 에폭으로 비슷한 정확도
DINO(2023) 잡음 제거 학습 강화 + 질의 초기화 개선 ResNet-50 12에폭 49.4 AP, 24에폭 51.3 AP. Swin-L + Objects365 사전학습으로 test-dev 63.3 AP
RT-DETR(2024) 실시간용 하이브리드 인코더 R50 53.1 AP, 108fps(추론용 데이터센터 GPU, TensorRT FP16, 640×640). Apache-2.0

DETR 의 「집합 예측 + 1:1 짝짓기」는 이후 검출의 표준 도구가 됐습니다. 6편의 YOLOv10 이 NMS 를 없앤 방법(일대일 머리)도, 11편의 SAM 3 의 검출기(DETR 계열)도 이 생각 위에 있습니다.

7. 한계와 우리 프로젝트

다음 글부터는 분할입니다. 클릭 하나로 무엇이든 칠하는 Segment Anything(SAM)입니다.

티티 한마디. 차례로 제일 싼 걸 고르면 3.9, 헝가리안은 1.8. 먼저 고른 사람이 다 가져가는 방식은 단체전에서는 손해예요.

참고 문헌

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

댓글

아직 댓글이 없습니다.

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