주제: 7-3 DETR (Detection Transformer와 Set Prediction)
분류: vision
타입: concept
난이도: 중급
선수지식: 있음 — Transformer, Self-Attention, Object Detection
기존 detection 모델은 anchor box, hand-crafted heuristic, NMS 같은 후처리에 크게 의존했다. DETR은 Transformer를 이용해 이미지 전체를 보고 필요한 객체를 직접 뽑는 방식으로 이 복잡한 파이프라인을 단순화했다.
그래서 DETR을 이해할 때는 "Transformer를 detection에 썼다"보다 "왜 bipartite matching이 필요한가"를 먼저 보는 편이 좋다. DETR은 학습 단계에서부터 각 예측을 하나의 정답과 1:1로 연결하는 방식으로 중복 문제를 해결한다.
기존 detection 파이프라인은 anchor, NMS, 복잡한 후처리에 많이 의존했다. DETR은 Transformer를 사용해 이미지 전체를 한 번에 보고, object query로 필요한 객체를 직접 뽑아내도록 만든다. 그래서 detection을 더 깔끔한 end-to-end 구조로 바꿨다는 의미가 크다.
이 문서를 읽을 때는 성능 숫자보다 "왜 bipartite matching이 필요한가"에 집중하면 좋다. DETR은 중복 예측을 NMS로 지우는 대신, 학습 단계에서부터 하나의 예측을 하나의 정답과 매칭하는 방식으로 문제를 푼다.
문제 설정
기존 object detection 모델(YOLO, Faster R-CNN)은 다음 문제를 가지고 있습니다.
- Anchor box 설계 필요
- NMS(post-processing) 필요
- 복잡한 detection pipeline
DETR (Detection Transformer)은 이 문제를 다음 방식으로 해결합니다.
"Object detection을 set prediction 문제로 변환"
여기서 set prediction이라는 말이 중요하다. 객체들은 순서가 있는 시퀀스가 아니라 순서 없는 집합이기 때문에, 어떤 query가 어떤 객체를 맡을지 학습 중에 매칭해 주어야 한다.
여기서 set prediction이라는 말이 중요하다. 객체들은 순서가 있는 시퀀스가 아니라 "순서 없는 집합"이기 때문에, DETR은 어떤 query가 어떤 객체를 맡을지 학습 중에 매칭해 주어야 한다.
1. DETR 핵심 아이디어
DETR 구조:
Image
↓
CNN Backbone
↓
Transformer Encoder
↓
Transformer Decoder
↓
Object Queries
↓
Bounding Boxes + Classes
DETR은 고정된 개수의 object query를 사용하여 객체를 예측합니다.
2. Feature Extraction
이미지는 먼저 CNN backbone을 통과합니다.
Image → CNN → feature map
feature map:
기호 의미
- H : feature map height
- W : feature map width
- C : channel dimension
왜 필요한가
이미지의 low-level feature를 추출합니다.
3. Transformer Encoder
feature map을 sequence로 변환합니다.
Flatten feature map
encoder는 global attention을 수행합니다.
왜 필요한가
이미지 전체 context를 학습합니다.
4. Object Queries
DETR은 fixed number query를 사용합니다.
기호 의미
- N : object query 수
- d : embedding dimension
직관
- 각 query = 하나의 객체 슬롯
decoder는 각 query에 대해 객체를 예측합니다.
5. Detection Prediction
각 query는 다음 값을 예측합니다.
bounding box:
왜 중요한가
각 query가 하나의 객체를 담당합니다.
6. Set Prediction 문제
DETR의 핵심은 detection을 순서 없는 집합 문제로 정의하는 것입니다.
예측 집합:
정답 집합:
기호 의미
- N : query 수
- M : 실제 객체 수
왜 필요한가
object detection은 순서가 없는 문제입니다.
7. Bipartite Matching
DETR은 Hungarian algorithm을 사용하여 예측과 정답을 매칭합니다.
목표:
기호 의미
- σ : permutation
- cost : matching 비용
matching cost:
왜 필요한가
각 객체를 정확한 query에 할당하기 위해 필요합니다.
8. DETR Loss
손실 함수:
기호 의미
- L_class : classification loss
- L_bbox : bounding box loss
왜 중요한가
객체 분류와 위치를 동시에 학습합니다.
9. DETR 장점
- anchor-free
- NMS 필요 없음
- end-to-end training
10. DETR 단점
- training convergence 느림
- small object detection 어려움
- 높은 계산 비용
11. YOLO vs DETR
| 특징 | YOLO | DETR |
|---|---|---|
| 구조 | CNN detector | Transformer |
| NMS | 필요 | 불필요 |
| Detection 방식 | grid prediction | set prediction |
코드-수식 연결
| 개념 | 코드 | 설명 |
|---|---|---|
| feature extraction | resnet(image) |
CNN backbone |
| transformer | nn.Transformer() |
encoder-decoder 구조 |
| matching | hungarian_matcher() |
prediction matching |
자주 하는 오해 5개
- DETR은 CNN을 사용하지 않는다고 생각한다
- object query는 실제 객체 위치라고 생각한다
- set prediction은 순서가 중요하다고 생각한다
- DETR은 항상 YOLO보다 정확하다고 생각한다
- Hungarian matching은 inference 단계라고 생각한다
체크리스트 (스스로 설명 가능해야 하는 질문)
- DETR은 object detection을 어떻게 set prediction 문제로 바꾸는가?
- object query는 어떤 역할을 하는가?
- bipartite matching은 왜 필요한가?
- DETR은 왜 NMS가 필요 없는가?
- YOLO와 DETR의 구조적 차이는 무엇인가?