AI 논문리뷰 - Vision

Research Paper Review (Deformable DETR) : Deformable Transformers for end2end object detection

study_love 2025. 12. 1. 21:01

 이 게시물에서는 Deformable DETR에 대해서 설명하려고 한다. 논문의 notation이 조금 복잡하고, detail이 많아서 읽는데 에너지가 많이 들었다. 

https://arxiv.org/abs/2010.04159  

 

Deformable DETR: Deformable Transformers for End-to-End Object Detection

DETR has been recently proposed to eliminate the need for many hand-designed components in object detection while demonstrating good performance. However, it suffers from slow convergence and limited feature spatial resolution, due to the limitation of Tra

arxiv.org

 

Background

https://seokmin-hardstudy.tistory.com/20

 

Research Paper Review(DeTR) : End-to-End Object Detection with Transformers

오늘은 DeTR(Detection Transformer) 논문에서 소개한 모델을 공부해보도록 하자. https://arxiv.org/abs/2005.12872 End-to-End Object Detection with TransformersWe present a new method that views object detection as a direct set prediction p

seokmin-hardstudy.tistory.com

 DETR의 encoder는 CNN을 이용해 입력 이미지를 (H/8)×(W/8)개의 visual patch(token)로 변환한 뒤, 이 모든 patch 쌍 사이에서 전부 self-attention을 수행한다. 이 구조 때문에 encoder self-attention의 연산 복잡도는 O(N²) (N = patch 개수)이다. 이 경우에, patch 수를 조금만 늘려도 계산량이 기하급수적으로 폭증하므로, DeTR은 patch수를 크게 늘릴 수 없다. 이 제약은 다음의 두 가지 실질적인 문제로 이어진다.

1) small object detection 성능 하락

Patch 개수의 제약이 있기 때문에, DETR은 입력 이미지 feature map을 1/8 수준으로 크게 downsample한 coarse feature map을 사용한다.
이 경우:

  • 한 개의 patch가 커버하는 이미지 영역이 매우 넓어지고
  • 작은 물체는 하나의 patch에 통째로 묻혀버리거나, 여러 물체가 한 patch에 섞여 표현된다

따라서 small object의 위치·형태 정보를 세밀하게 구분해내는 능력이 부족해지고, 이는 small object detection 성능 저하로 이어진다.

 

2) Multi-scale feature map을 활용할 수 없어 다양한 크기의 객체 처리가 어렵다

CNN 기반 detector(FPN 등)는 1/4, 1/8, 1/16, 1/32처럼 서로 다른 해상도의 feature map을 모두 활용해 object scale variation을 처리한다.
하지만 DETR은:

  • multi-scale feature map을 이용하려면, scale마다 O(N²) attention이 별도로 필요해지고
  • 전체 계산량이 폭증해 multi-scale을 사실상 사용할 수 없다

그 결과 DETR은 한 장의 단일-scale feature map만으로 모든 크기의 객체를 처리해야 하고, 이 때문에 large/small 등 다양한 크기의 object를 다루는 데 구조적 한계를 가진다.

 

 따라서 다양한 해상도의 feature map을 활용하고, 각 patch가 보다 작은 영역을 정교하게 표현할 수 있도록 하려면 self-attention을 효율적으로 계산할 수 있는 구조가 반드시 필요하다. 이 논문에서 제안하는 Deformable Attention은 이러한 요구를 충족하기 위해 설계된 효율적인 attention 메커니즘이다.

 

Methods 

 이 논문에서는 먼저 Deformable Attention을 소개하고, 이 Deformable Attention을 DETR의 Encoder와 Decoder 부분에 모두 적용시킨다. 이 글에서는 Encoder에서 사용하는 Deformable Attention에 대해서 먼저 소개하고, Decoder에 적용할 때 어떤 variation이 있는지 설명하도록 하겠다. 

1) Single Scale Deformable Attention - Encoder

먼저 CNN backbone에서 C x H x W 형태의 feature map을 얻었다고 하자. 이 feature map을 펼치면 우리는 총 H x W 개의 visual token을 가지게 된다. Deformable Attention이 주장하는 핵심 아이디어는 다음과 같다. 

  • 한 토큰이 이미지 전체에 있는 모든 토큰을 볼 필요는 없다.
  • 특히 이미지에서 멀리 떨어진 토큰들과는 굳이 attention을 하지 않아도 성능이 크게 떨어지지 않는다.
  • 그렇기 때문에 각 토큰이 자기 주변의 소수의 토큰에게만 attention을 하도록 만들면 된다. 

구체적인 구현 방법은 다음과 같다. 먼저 각 토큰은 CNN feature map에서 만들어졌기 때문에, 이미지 상에서 가까운 위치의 정보는 이미 해당 토큰의 embedding 안에 어느 정도 잘 담겨 있다고 가정한다. 이 가정 아래에서, 각 토큰은 자신이 attention할 소수의 토큰들을 직접 선택한다. 선택 과정은 토큰의 embedding을 Linear projection에 통과시켜 offset을 여러 개(보통 4개에서 8개 정도) 예측하는 방식으로 이루어진다. 예를 들어, 토큰의 이미지 내 위치가 (x, y)라면, 각 offset을 더한 (x + offset1), (x + offset2) … 같은 위치의 토큰들과만 attention을 하는 것이다. 즉, “내 주변에서 몇 군데만 선택해서 보겠다”는 개념이다.

이후 attention을 수행할 때는 일반적인 self-attention처럼 Q와 K를 내적하지 않는다. 대신, 앞에서 offset을 예측할 때 함께 계산한 weight 값들을 사용해, 선택된 위치의 Value들을 weighted sum하여 최종 출력을 만든다. 즉, “어디를 볼지”와 “얼마나 중요하게 볼지”를 미리 예측한 뒤, 그 위치의 Value들을 가중합해 결과를 만드는 방식이다.

 

위의 과정은 여러 attention head에서 각각 독립적으로 수행되며, 특징적인 점은 각 head의 출력을 concat하지 않고 단순히 모두 더해서(sum) 최종 출력으로 사용한다는 것이다. 위 과정을 그림으로 나타내면 아래와 같다. 

 

 수식으로 나타내면 아래와 같은데, 수식이 좀 복잡해 보이지만 천천히 읽어보면 별 거 없다. 같이 천천히 분석해보자.

여기서는 전체 연산을 간단히 DeformAttn(x) 라고 표현해도 무방하다. 여기서 x는 query 토큰의 embedding을 의미한다. 수식에서 오른쪽에 등장하는 x( p_q + offset ) 형태의 표현은, query 토큰의 이미지 상 위치인 p_q에 offset을 더해 얻은 위치에서의 token embedding을 의미한다. 즉, query 토큰이 attention을 수행할 대상 토큰의 embedding이다. 이 embedding에 W_m을 곱해주면 해당 토큰의 value가 된다. 또한 A는 행렬처럼 표기되지만 실제로는 스칼라값이며, 이 값이 바로 attention을 수행할 때 적용하는 weight이다. "얼마나 중요하게 볼지"를 결정할 때 나온 weight를 의미한다. K는 한 토큰이 attention을 수행할 sampling 위치의 개수, 즉 뽑은 offset의 개수를 뜻한다. M은 attention head의 수를 의미한다. 

 

2) Multi-scale Deformable Attention - Encoder 

 이제 Multi-scale feature map을 input으로 받는 Deformable Attention이 어떻게 수행되는지 살펴보자. 여러 해상도의 feature map이 들어오면, 각 scale의 모든 픽셀이 그대로 query 토큰이 되고, 각 토큰은 scale별로 자신과 가까운 K개의 위치만 선택해 attention을 진행한다. 수식을 보면 single-scale과 비교해서 달라지는 부분이 두 가지인데, 첫 번째는 여러 scale의 위치 체계를 일관되게 처리하기 위해 모든 토큰의 위치를 정규화된 좌표로 표현한다는 점이고, 두 번째는 다른 scale(다른 layer)의 토큰들과도 attention을 수행하도록 확장되었다는 점이다. 최종 output 역시 multi-scale feature map 형태로 나오는데, “이미 attention 과정에서 여러 scale 간 정보를 충분히 주고받았는데 왜 굳이 scale별 embedding을 각각 남겨두느냐”라는 의문이 들 수 있다. 이는 여러 scale의 정보를 하나로 압축해버리는 것보다, scale을 구분한 채로 유지하는 편이 성능 측면에서 더 유리하기 때문이다. 결국 성능과 속도의 trade-off인데, multi-scale 출력을 유지하는 것이 성능 이득에 비해 속도 저하가 크게 발생하지 않기 때문에 이런 구조를 취했다고 볼 수 있다.

 

참고로, Multi-scale feature map (input of deformable detr)은 다음과 같이 만들어진다.

 

3) Multi-scale Deformable Attention - Decoder

 이제 decoder에서는 어떤 점이 달라지는지 살펴보자. Deformable DETR의 decoder는 기본 DETR과 마찬가지로 N개의 object query를 두고, encoder의 output과 cross-attention을 수행한다. 그런데 이 구조를 보면 자연스럽게 다음 두 가지 의문이 생긴다.

  • cross-attention에서 object query는 이미지 내 한 객체를 나타내지만, 그 객체의 위치나 정체가 처음에는 정해져 있지 않은데, 그렇다면 reference point(주변 sampling 위치를 정할 때의 기준점)는 어떻게 초기화하는가?
  • cross-attention에서는 value 토큰들이 이미지 내 특정 위치를 갖지만, decoder의 self-attention에서는 value들이 이미지 위치와 직접적으로 대응되지 않는데, 이 경우 deformable attention을 그대로 적용할 수 있는가?

 첫 번째 질문에 대한 답은 두 가지 방식으로 나뉜다. 하나는 object query embedding을 그대로 linear layer에 통과시켜 reference point로 사용하는 방법이다. 이 방식은 말 그대로 “reference point assignment 자체를 학습으로 맡겨버리는 전략”이다. 다른 하나는 encoder output인 multi-scale feature map의 값을 linear layer로 통과시켜 중요도를 계산하고, 중요도가 높은 위치들을 초기 reference point로 선택하는 방법이다. 이 방식은 이미지 상의 실제 위치에 기반해 초기 reference point를 정한다는 점에서 “Two-Stage Deformable DETR”이라고 불린다. 두 방식 모두 decoder의 각 layer마다 reference point를 보정할 수 있도록 delta를 예측하는 작은 linear layer를 추가하여, layer가 진행될수록 reference point가 점점 refinement되도록 설계되어 있다.

 두 번째 질문에 대한 답은 간단하다. decoder 내부의 self-attention은 deformable attention이 아니라, 기본 transformer에서 사용하는 일반 self-attention으로 수행한다. 즉, cross-attention에만 deformable attention을 적용하고, self-attention에서는 원래 방식 그대로 query 간 상호작용을 처리한다.

 

Experiments 

 

위 표를 보면 같은 성능 일 때, Deformable DETR의 training GPU hours가 DETR보다 훨씬 적은 것을 알 수 있다.

 

리뷰 comment

 정리해놓고 보면, 그렇게 어려운 method가 절대 아닌데, 논문을 읽을 때는 고생을 좀 한 논문이다. Attention이 원래 흔히 아는 Q와 V를 내적하는 형태가 아니라서 처음에 당황하고 수식이 잘 안읽혀서 그런 것 같다.