상태: 초안 (2026-10-13), 일부 실측. 헝가리안·GIoU 예제는 노트북 CPU 에서 직접 돌린 값입니다(
code/08_hungarian.py, 1초 안). 논문 수치는 원문을 열어 조건과 함께 옮겼고, 하드웨어는 등급으로 적었습니다. 작성 규칙: 실측 데이터가 기본이고, 못 잰 것은 「미실측」으로 표시합니다.
목차
- 1. 손으로 만든 부품들
- 2. 구조: 질의 슬롯 N 개
- 3. 학습: 1:1 짝짓기
- 4. 직접 해 보기: 헝가리안 알고리즘
- 5. 논문 수치
- 6. 후속 연구: 약점 줄이기
- 7. 한계와 우리 프로젝트
- 참고 문헌
1. 손으로 만든 부품들
5·6편의 검출기에는 사람이 정한 부품이 많았습니다. 앵커의 크기·비율, 앵커에 양성·음성 라벨을 붙이는 IoU 문턱, 중복을 지우는 NMS 와 그 문턱입니다. 이 부품들은 잘 정하면 동작하지만, 데이터가 바뀌면 다시 정해야 하고 잘못 정하면 조용히 구멍이 생깁니다(5편의 「양성 0개」, 「선수 B 를 지운 NMS」).
Carion 등의 DETR(DEtection TRansformer)은 질문을 바꿉니다. 검출의 정답은 상자들의 집합입니다. 순서가 없고, 중복이 없습니다. 그렇다면 모델도 처음부터 집합을 내게 학습하면 앵커도 NMS 도 필요 없지 않을까?
2. 구조: 질의 슬롯 N 개
- CNN 몸통(ResNet-50 등)이 특징 지도를 만듭니다.
- 트랜스포머 인코더가 특징 지도의 위치들 사이 관계를 셀프 어텐션으로 섞습니다(7편).
- 트랜스포머 디코더에 학습하는 질의 슬롯 N=100개를 넣습니다. 각 슬롯은 인코더 출력을 교차 어텐션으로 보고, 서로를 셀프 어텐션으로 봅니다.
- 슬롯마다 작은 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 는 명시되지 않음.)
- 큰 물체는 +7.8, 작은 물체는 −5.5. 인코더의 전역 어텐션이 그림 전체를 보니 큰 물체에 강하고, 특징 지도가 한 해상도(1/32)뿐이라 작은 물체에 약합니다. 5편의 FPN 같은 다중 해상도가 없습니다.
- 학습이 길다. 비교 모델은 500에폭, 절제 실험용은 300에폭이고, 300에폭에 데이터센터 GPU 16장으로 3일이 걸렸습니다. 학습 초반에는 슬롯과 정답의 짝이 걸음마다 바뀌어 각 슬롯이 무엇을 맡을지 정해지지 않으니, 수렴이 느립니다.
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. 한계와 우리 프로젝트
- 작은 물체는 여전히 어렵습니다. 후속 모델들이 크게 줄였지만, 지름 몇 화소의 탁구공을 상자 집합으로 찾는 것은 히트맵 방식(3편)보다 불리합니다.
- 짝짓기가 학습을 정한다. 비용 가중치(클래스 1, L1 5, GIoU 2)가 「무엇을 같은 물체로 볼지」를 정합니다. 이 값을 바꾸면 모델이 배우는 것이 바뀝니다.
- 우리 프로젝트에서는 아직 DETR 계열을 직접 쓰지 않습니다. 다만 탁구대를 글자로 찾는 후보였던 SAM 3 의 검출기가 DETR 계열이고(11편), 앞으로 사람·라켓 상자가 필요할 때 NMS 없이 배포할 수 있는 RT-DETR(Apache-2.0)은 6편의 AGPL 문제를 피하는 후보입니다(미실측).
다음 글부터는 분할입니다. 클릭 하나로 무엇이든 칠하는 Segment Anything(SAM)입니다.
티티 한마디. 차례로 제일 싼 걸 고르면 3.9, 헝가리안은 1.8. 먼저 고른 사람이 다 가져가는 방식은 단체전에서는 손해예요.
참고 문헌
- Carion, N., Massa, F., Synnaeve, G., Usunier, N., Kirillov, A., Zagoruyko, S. (2020). End-to-End Object Detection with Transformers. ECCV 2020. https://arxiv.org/abs/2005.12872
- Kuhn, H. W. (1955). The Hungarian method for the assignment problem. Naval Research Logistics Quarterly, 2(1–2), 83–97. https://doi.org/10.1002/nav.3800020109
- Rezatofighi, H. et al. (2019). Generalized Intersection over Union: A Metric and A Loss for Bounding Box Regression. CVPR 2019. https://arxiv.org/abs/1902.09630
- Zhu, X. et al. (2021). Deformable DETR: Deformable Transformers for End-to-End Object Detection. ICLR 2021. https://arxiv.org/abs/2010.04159
- Li, F. et al. (2022). DN-DETR: Accelerate DETR Training by Introducing Query DeNoising. CVPR 2022. https://arxiv.org/abs/2203.01305
- Zhang, H. et al. (2023). DINO: DETR with Improved DeNoising Anchor Boxes for End-to-End Object Detection. ICLR 2023. https://arxiv.org/abs/2203.03605
- Zhao, Y. et al. (2024). DETRs Beat YOLOs on Real-time Object Detection. CVPR 2024. https://arxiv.org/abs/2304.08069
- SciPy
linear_sum_assignment: https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.linear_sum_assignment.html - 헝가리안 알고리즘의 시간 복잡도 정리: https://en.wikipedia.org/wiki/Hungarian_algorithm
- 예제 코드와 출력: 이 폴더의
code/08_hungarian.py,code/08_hungarian.out.txt