Decoder의 입력은 “object query”라는 학습 가능한 벡터들이다.
한 이미지 안에서 최대 N개의 물체를 찾고 싶다고 하자.
예전 방식
→ 이미지 위에 미리 수천 개의 anchor box(가로·세로가 정해진 박스)를 깔아 놓고,
각 박스가 어떤 물체인지 예측하게 함.
DETR 방식
→ 공간 위에 박스를 미리 깔지 않고,
“물체 담당 슬롯”을 N개 먼저 만들어 둔 뒤
각 슬롯이 이미지 전체를 보면서
“내가 맡을 물체는 어디 있는지” 찾게 함.
여기서 그 “물체 담당 슬롯 하나”에 해당하는 것이
바로 하나의 object query이다.
Decoder는 크게 두 단계의 attention을 사용한다.
Self-attention (Query들끼리)
N개의 query가 서로 정보를 주고받는다.
같은 물체를 중복해서 예측하지 않도록,
“너는 이쪽 물체 맡아, 나는 저쪽 맡을게” 식의 역할분담이 이루어진다고 볼 수 있다.
Encoder–Decoder attention (Query ↔ Encoder 출력)
각 query가 Encoder 출력(이미지 전체 feature)을 대상으로
“이 query가 관심 가져야 할 위치”에 attention을 집중한다.
예를 들어, 어떤 query는 사람 머리/몸/다리 위치들에 높은 attention을 두고,
다른 query는 자동차 위치들에 높은 attention을 둘 수 있다.
그 후 각 query의 최종 출력 벡터를 FFN에 넣어