
안녕하세요, 허재연입니다. 오늘 리뷰할 논문은 ICLR 2022에 게재된 DAB-DETR입니다. OVOD 논문들을 읽다 등장하여 살펴본 논문이며, DETR의 object query에 주목하여 성능을 개선한 논문입니다.
DETR 구조는 대부분 연구원들이 잘 알고 계시니, 어떤 점을 개선했는지에 집중하여 살펴보도록 하겠습니다. 리뷰 시작하겠습니다.
Introduction
모두 잘 아시듯 object detection은 컴퓨터비전의 가장 대표적인 task이며, 2020년 이후 트랜스포머 기반의 end-to-end로 학습하여 동작하는 DETR이 제안되어 상당히 많은 주목을 받았습니다. 기존의 object detector들은 그 구조가 상당히 복잡하고 다양한 전처리, 후처리 등이 필요해 일일히 연구자가 휴리스틱하게 내부 구조들을 튜닝했어야 했습니다. DETR 은 이러한 한계점을 완화하기 위해 object detection을 direct set prediction으로 해석하여 사람이 내부 구조들을 튜닝할 필요 없이 학습을 통하여 충분히 잘 동작할 수 있게 설계되었습니다. 그 구조가 간단하고 성능도 기존의 detector들과 비슷한 수준을 낼 수 있었죠.
하지만 초기 DETR에는 여러 문제점이 있었습니다. 이미지 전체로부터 계속 attention 연산을 반복하다보니 연산량이 크고, 수렴하기까지 기존보다 상당히 긴 학습 주기가 필요하였습니다. 또한 FPN같은 구조도 없었기에 small object detection 성능도 떨어졌었죠(이후 다양한 DETR의 변형 구조들이 제안되어 이런 한계가 해소되기는 했습니다). 느린 수렴 문제를 해결하기 위한 다양한 시도들이 있었는데, 이 논문의 저자들은 DETR의 detection에 사용되는 object query에 집중하여 문제를 해결하고자 시도하였습니다.
기존의 anchor-based detector들과 달리 DETR은 100개의 learnable query들을 이용해 detection을 수행하게 되는데, 저자들은 object query의 비효율적인 설계 및 사용으로 학습 수렴 속도가 느리다고 분석하였습니다. 이런 문제 정의가 본 논문에서 처음 이뤄진것은 아니고, 이전에도 쿼리 설계를 개선하여 학습 효율을 개선하고 성능을 향상시키기 위한 연구들이 있었습니다. 저자들은 기존의 이러한 시도에도, DETR에서의 쿼리 역할이 아직은 완전히 이해되지도, 충분히 활용되지도 못하였다고 합니다. 예를 들어, 기존의 Conditional DETR은 쿼리의 content feature를 기반으로 conditional spatial query를 학습하여 이미지 특징과의 매칭을 개선한 방식을 사용하였고, Deformable DETR은 2d reference points(기준점) 자체를 쿼리로 사용하고, 각 reference point에서 deformable cross-attention을 수행하는 방식을 사용하였습니다.

본 논문에서는 Transformer decoder의 cross-attention module에 집중하여 DETR에서 anchor box(x,y,w,h 4차원의 박스 좌표) 를 query로 사용해서, 이 쿼리들을 layer 별로 동적으로 업데이트 하는 구조를 제안합니다. 이러한 방법은 anchor box의 위치와 크기를 모두 고려함으로써 CA 모듈에 보다 나은 공간적 사전 지식(spatial prior)를 제공할 수 있다고 합니다. 이 방법은 DETR의 쿼리가 content(디코더의 self-attention 출력)과 positional(DETR의 learnable query 등) 두가지 요소로 구성되는 점에서 인사이트를 얻었다고 합니다. Cross-Attention weight는 쿼리와 키 간 비교를 통해 계산됩니다. 여기서 key도 content(인코딩된 이미지 특징) 부분과 positional(positional embedding) 부분으로 이루어집니다. 트랜스포머 디코더의 쿼리는 쿼리와 피쳐의 유사도를 기반으로 피쳐맵에서 특징을 pooling하는 것으로 해석할 수 있으며, 이 유사도는 content와 positional 정보가 모두 고려된 것으로 생각할 수 있다고 합니다(content 유사도는 의미론적으로 연관된 특징을 pooling하기 위함이고, positional 유사도는 쿼리 위치 주변의 특징을 풀링하기 위한 정보를 제공하는 것이죠).
이러한 분석을 바탕으로, 저자들은 앵커 박스 형태의 쿼리를 설계하게 됩니다. anchor box의 중심 좌표(x,y)를 이용해 해당 중심 주변의 특징들을 pooling하고, 크기 정보(w,h)를 이용해 Cross-attention map을 조정(modulate)함으로써 앵커 박스 크기에 맞춘 어텐션을 수행할 수 있다고 합니다. 또한, 좌표를 쿼리로 사용하기 때문에 레이어마다 이 앵커 박스들을 동적으로 업데이트 할 수 있으며, 이런 방법을 통해 soft ROI pooling을 계층별로 연속적으로 수행하는 것처럼 DETR의 쿼리를 구현하였다고 합니다.
Cross-Attention은 전체 피처맵에서 특징을 풀링할 수 있기 때문에, 각 쿼리에 적절하게 위치 사전 정보를 제공하는것이 중요한데, 앵커 박스 정보를 부여해서 보다 개선된 위치 정보(positional prior)를 줄 수 있고 덕분에 DETR의 학습 수렴 속도를 개선할 수 있었다고 합니다. (기존의 연구들은 위치 정보만 고려하고 크기 정보는 따로 고려하지 않고 쿼리를 설계했는데, 해당 방법론의 경우 크기 정보도 고려할 수 있다고 차별점을 강조합니다)
결론적으로, 저자들은 anchor box를 쿼리로 학습하는 새로운 방법을 제안해 Transformer Decoder의 cross-attention을 보다 효율적으로 수행할 수 있게 했으며, 학습 epoch를 상당히 줄이는 동시에 COCO 벤치마크에서 좋은 성능을 거둘 수 있었다고 합니다.
Method
overview

기본적으로 DETR 계열이기 때문에, CNN backbone 및 Transformer endocer, decoder를 가지고 있고, box와 label을 예측하기 위해 prediction head를 가지고 있습니다. 저자들이 개선한 부분은 위 그림과 같이 디코더에 있습니다. 주어진 이미지에 대해 1차적으로 CNN backbone을 활용해 spatial feature를 추출하고, 이후 Transformer에 입력하게 됩니다. 인코더에서 영상 피처를 다시 정제하고, 디코더에서는 positional query(anchor box)와 content query(decoder embedding)로 구성된 쿼리를 입력받아 content 쿼리와 유사한 패턴을 가지며 anchor 좌표에 대응되는 객체들을 탐색하게 됩니다. 이런 이중 쿼리(positional query + content query)는 디코더의 각 계층을 거치며 점차 업데이트되며, 최종적으로 객체의 GT와 점점 더 가까워지게 됩니다. 마지막 디코더 레이어 출력은 prediction head를 통해 객체의 클래스 및 좌표(bounding box)를 예측하게 되고, 이후에는 DETR의 학습 과정과 동일하게 bipartite matching 을 수행하여 학습을 진행하게 됩니다.
Learning Anchor box Directly
저자들은 앞에서 설명한 DETR 쿼리의 역할에 기반하여 쿼리 박스(anchor box)를 직접 학습하고, positional query를 유도하는 방법을 제안합니다. 각 디코더 계층에는 두개의 attention module(self-attention module, cross-attention module)이 있는데, 이들은 각각 쿼리 업데이트와 특징 탐색에 사용됩니다. 각 어텐션 모듈은 query, key, value를 입력으로 받아 attention 연산을 수행하게 되는데, 이 세 입력 구성이 달라지게 됩니다.
q번째 anchor box를 {A}_{q} = ({x}_{q},{y}_{q},{w}_{q},{h}_{q})라고 하고, 이에 해당하는 content query와 positional query를 각각 {C}_{q}, {P}_{q}라고 하겠습니다.
주어진 anchor {A}_{q}에 대해서, positional query {P}_{q}는 다음과 같이 만들어집니다 :


PE는 positional encoding이며, Cat은 concatenation입니다.
Self-Attention module에서 쿼리, 키, 밸류는 동일한 content를 갖고 있으며, 쿼리와 키는 추가적으로 position 정보를 가지고 있습니다.

CA 모듈에서는 Conditional DETR과 같이 쿼리와 키에 content과 position 정보를 concatenate해서, query-to-feature 유사도에서(쿼리와 키 간 내적으로 계산) content정보와 position 정보가 각각 얼마나 기여하는지 분리해서 해석할 수 있도록 하였습니다.

{F}_{x,y}는 (x,y)애서의 image feature이고, ⋅은 element-wise multiplication입니다.
Anchor Update
좌표를 쿼리로 사용하여 학습하면 이를 점진적으로 계층별 업데이트 할 수 있습니다. 반면, DETR이나 Conditional DETR처럼 고차원 임베딩을 쿼리로 사용하는 경우에는 업데이트된 anchor를 다시 고차원 쿼리 임베딩으로 어떻게 변환되는지 명확하게 해석하기 어렵기 때문에 계층 별로 쿼리를 refine하기 어렵다고 합니다. 저자들은 기존 연구에서 했던 방식을 활용해 각 레이어마다 prediction head로 상대적인 위치 변화(∆x, ∆y, ∆w, ∆h)를 예측한 후, 이를 기반으로 앵커를 업데이트하게 하였습니다(위의 디코더 그림 참고).
Width & Height-Modulated Gaussian Kernel

기존의 positional attention map은 위 Fig.6의 왼쪽 그림과 같이 가우시안 형태의 prior로 사용됩니다.하지만 사전 분포를 이렇게 사용하는 것은 모든 객체가 동일하며 그 크기가 고정되어 있다고 가정한 것과 같게 된다고 합니다. 너비와 높이같은 scale 정보가 무시되는 것이죠. 저자들은 positional prior을 개선하기 위해 attention map에 scale 정보를 추가적으로 주입합니다.
본래 positional attention map에서 query-to-key는 대응되는 두 encoding을 내적하여 덧셈하는 연산으로 수행됩니다.

마지막에 root D로 나누는것은 transformer attention 연산에서 그 값을 rescale 하는 부분에 해당합니다. 저자들은 softmax 연산 이전에 positional attention map을 조절하기 위해 anchor의 width 및 height를 각각 x축과 y출 부분에서 나누는 연산을 추가적으로 적용합니다. 이를 통해 gaussian prior 분포를 보다 smoothing하고 조정하는 효과를 주어 다양한 크기의 객체들과 더 잘 매칭되게 합니다.

위 수식에서 {w}_{q}, {h}_{q}는 anchor {A}_{q}의 width, height이고 {w}_{q,ref}와 {h}_{q,ref}는 다음 (7)수식으로 계산되는 reference width / height입니다.

이러한 modulated positional attention을 통해 다양한 너비,높이 크기를 가진 객체의 feature를 더욱 잘 추출할 수 있게 하였습니다. 시각화 결과는 위의 Figure 6 에서 확인할 수 있습니다.
Temperature Tuning
트랜스포머 구조는 입력 순서에 invariant한 결과를 뱉기 때문에 위치 정보를 추가하기 위해 positional encoding / positional embedding 등의 기법을 사용하죠. 본래 transformer가 제안될 때 positional encoding은 삼각함수를 활용하여 다음과 같이 적용되었었습니다 :

여기서 T는 hand-designed temperature인데 이 T는 본래 10000개의 자연어 처리 환경에서 하드코딩된 값이라고 합니다. object detector에 최적화된 값은 아닌것이죠. 이 T값이 위의 Figure 7에서 확인할 수 있듯 positional prior에 영향을 주기 때문에 저자들은 실험적으로 T=20으로 변경하여 적용했다고 합니다.
Experiments

main 실험은 COCO 데이터셋으로 수행되었습니다. 제안하는 DAB-DETR을 기존의 DETR, Faster RCNN, AnchorDETR, SMCA, Deformable DETR, Conditional DETR 등 다양한 detector와 비교하였습니다. 위에 *가 붙은 것은 기존 AnchorDETR에서 제안된 3 pattern embedding이라는 기법을 적용한 버전이라고 하네요. 저자가 제안한 모델은 Conditional DETR과 비교해 그 성능이 대폭 개선되었으며, DETR과 비교하여 학습 epoch를 굉장히 많이 줄일 수 있었습니다. pattern embedding을 적용했을 때는 DAB-DETR*이 모든 4개의 백본에 대해 기존의 DETR계열 방법론들(multi-scale 구조 활용 방법론 포함)을 능가하는 결과를 보였습니다.

Ablation에서는 각각의 구성 요소를 어떻게 사용해야 가장 효율적인지를 나타내었습니다. 저자가 제안하는 기법들을 모두 적용했을 때가 가장 좋은 성능을 내는 것을 확인할 수 있습니다. Temperature Tuning은, positional encoding에서 temperature에 추가적인 튜닝을 한 것을 의미합니다.
놀랍게도 논문 본문의 Experiment 파트에 실험 table이 Table 2,3 두개밖에 없었습니다… 대신 appendix에 추가적인 내용들이 있었에 추가적으로 소개 드리겠습니다.
DAB-Deformable-DETR
DETR의 느린 수렴과 small object detection 능력 부족을 해결한 가장 유명한 모델이 있다면 Deformable DETR이겠죠. 다양한 scale에 대해 고려하기 위해 FPN과 유사한 요소를 추가하고, 연산량을 줄이기 위해 피쳐맵 전체에서 attention 연산을 하던 기존 구조를 reference point와 offset을 추가해 deformable attention 구조로 수정하여 연산량을 대폭 줄일 수 있었습니다. 주요한 부분에만 attention 연산을 수행하도록 했죠. 저자들은 제안하는 decoder 구조를 deforamble detr에 적용해 DAB-DEFORMABLE-DETR을 구현하여 제안하는 구조의 효율성을 추가적으로 검증하였다고 합니다.

DAB-Deformable DETR은 기존 Deformable DETR에서도 성능 개선을 보여 저자들이 제안하는 요소의 효과를 다시 한번 입증하였습니다.

또한, Deformable DETR과 비교해 빠른 수렴을 보여주어 anchor prior를 활용했을 때 학습 속도를 개선할 수 있다는 저자의 주장을 뒷받침하였습니다.
평소에 DETR의 query의 역할에 대해 막연히 잘 초기화 해놓으면 잘 학습되는 값으로만 생각했었는데, 이를 분석하여 성능 개선 및 학습 효율성을 높인 논문이어서 흥미롭게 읽었습니다. 추가적으로 DETR에서 attention 연산이 각각 어떤 의미를 가지는지도 더 잘 이해할 수 있는 계기가 되었던 것 같습니다.
감사합니다.