주제: 7-3 DETR (Detection Transformer와 Set Prediction)

분류: vision

타입: concept

난이도: 중급

선수지식: 있음 — Transformer, Self-Attention, Object Detection

DETR의 핵심은 detection을 "박스를 많이 뿌리고 중복을 지우는 문제"가 아니라, "정답 객체 집합을 직접 예측하는 문제"로 다시 정의한 것이다.

기존 detection 모델은 anchor box, hand-crafted heuristic, NMS 같은 후처리에 크게 의존했다. DETR은 Transformer를 이용해 이미지 전체를 보고 필요한 객체를 직접 뽑는 방식으로 이 복잡한 파이프라인을 단순화했다.

그래서 DETR을 이해할 때는 "Transformer를 detection에 썼다"보다 "왜 bipartite matching이 필요한가"를 먼저 보는 편이 좋다. DETR은 학습 단계에서부터 각 예측을 하나의 정답과 1:1로 연결하는 방식으로 중복 문제를 해결한다.

DETR의 핵심은 detection을 "박스를 많이 뿌리고 나중에 겹친 걸 지우는 문제"가 아니라, "정답 객체 집합을 직접 예측하는 문제"로 다시 정의한 것이다.

기존 detection 파이프라인은 anchor, NMS, 복잡한 후처리에 많이 의존했다. DETR은 Transformer를 사용해 이미지 전체를 한 번에 보고, object query로 필요한 객체를 직접 뽑아내도록 만든다. 그래서 detection을 더 깔끔한 end-to-end 구조로 바꿨다는 의미가 크다.

이 문서를 읽을 때는 성능 숫자보다 "왜 bipartite matching이 필요한가"에 집중하면 좋다. DETR은 중복 예측을 NMS로 지우는 대신, 학습 단계에서부터 하나의 예측을 하나의 정답과 매칭하는 방식으로 문제를 푼다.

문제 설정

기존 object detection 모델(YOLO, Faster R-CNN)은 다음 문제를 가지고 있습니다.

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:

F(H×W×C)

기호 의미

왜 필요한가

이미지의 low-level feature를 추출합니다.

3. Transformer Encoder

feature map을 sequence로 변환합니다.


Flatten feature map
X(HW×C)

encoder는 global attention을 수행합니다.

Attention(Q,K,V)=softmax(QKT/dk)V

왜 필요한가

이미지 전체 context를 학습합니다.

4. Object Queries

DETR은 fixed number query를 사용합니다.

Q(N×d)

기호 의미

직관

decoder는 각 query에 대해 객체를 예측합니다.

5. Detection Prediction

각 query는 다음 값을 예측합니다.

(class,bbox)

bounding box:

bbox=(x,y,w,h)

왜 중요한가

각 query가 하나의 객체를 담당합니다.

6. Set Prediction 문제

DETR의 핵심은 detection을 순서 없는 집합 문제로 정의하는 것입니다.

예측 집합:

Ŷ=ŷ,ŷ,...,ŷN

정답 집합:

Y=y,y,...,yM

기호 의미

왜 필요한가

object detection은 순서가 없는 문제입니다.

7. Bipartite Matching

DETR은 Hungarian algorithm을 사용하여 예측과 정답을 매칭합니다.

목표:

σ*=argminΣcost(yi,ŷσ(i))

기호 의미

matching cost:

cost=Lclass+Lbbox+Liou

왜 필요한가

각 객체를 정확한 query에 할당하기 위해 필요합니다.

8. DETR Loss

손실 함수:

L=ΣLclass+λLbbox

기호 의미

왜 중요한가

객체 분류와 위치를 동시에 학습합니다.

9. DETR 장점

10. DETR 단점

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개

체크리스트 (스스로 설명 가능해야 하는 질문)