$\cdot$ Authors: Hao Zhang, Feng Li, Shilong Liu, Lei Zhang, Hang Su, Jun Zhu, Lionel M. Ni, Heung-Yeung Shum
$\cdot$ Published: ICLR 2023
1. Introduction
DETR 이전의 연구들은 전통적인 CNN 기반의 모델들 혹은 DETR-like 모델들로 나눌 수 있다.
우선, CNN 기반의 모델들의 경우 객체 탐지 분야에서 놀라운 성능을 보여주는 모델이 많이 있고, Anchor나 NMS 같이 수작업이 필요한 요소가 있다. 그럼에도, Dyhead나 Swin, Swin V2 등에 모델에 적용되어 COCO test-dev leader board 같은 벤치마크에서 높은 성능을 보여주고 있다.
반면, DETR-like 모델들은 CNN에서 필요한 수작업 요소를 제거했음에도 Faster R-CNN과 같은 고성능 모델에 견줄만한 성능을 보여줬다. 이러한 모델들은 객체 탐지 task를 NLP 영역의 prediction task처럼 다뤘다. 또한, 이분 그래프 매칭(Bipartite graph matching) 형태로 label을 할당하였다.
DETR-like 모델들은 객체 탐지를 위해 학습 가능한 query를 사용했고, "Soft ROI pooling"처럼 image featuremap에서 추출한 feature와 결합했다. 하지만, 느린 학습 수렴 속도와 query의 의미가 불분명하게 나오는 점 등의 문제가 있었다.
이러한 문제를 해결하기 위해 다양한 방법들이 제안되었다. 그 중, DAB-DETR에서 Dynamic anchor box(DAB)을 사용하여 query를 정의하는 방법론을 제안하였다. 이 연구는 Anchor를 사용하는 CNN 모델과 유사하게 작동하여 DETR-like 모델 연구와 CNN 모델 연구를 이어주는 교두보 역할을 했다.
DN-DETR에서는 Denoising 방법을 사용하여 이분 그래프 매칭에서 발생하는 불안정성을 개선했다. 앞선 두 연구의 방법론 (DAB과 DN)을 결합하여 DETR-like 모델들은 기존의 CNN 기반의 모델에 견줄 수 있는 학습 효율성과 추론 성능을 얻을 수 있었다.
하지만, 여전히 대부분 좋은 성능을 보이는 모델들은 "Dyhead"나 "HTC" 같은 개선된 기존 모델 기반이다. (Swin-V2: HTC ++ 사용). 저자들은 이런 성능 격차에 대한 원인으로 2가지를 얘기했다.
- 기존 모델들은 많은 연구가 이뤄진만큼 최적 훈련된 모델이 많다. 하지만, DETR-like 모델들은 최근 연구가 시작되어 모델 최적화나 개선점 등의 연구가 충분히 이뤄지지 않았다.
- DETR-like 모델들의 scalability를 다룬 연구가 거의 없다. 더 큰 backbone이나 dataset을 사용했을 때에 대한 연구가 거의 없다.
따라서, 저자들은 이러한 원인의 해결을 목표로 삼았다. 이를 위해 DAB-DETR, DN-DETR 그리고 Deformable DETR에서 제안한 방법론과 연구를 기반하여 Denoising, Query initialization 그리고 box prediction을 개선한 DINO 모델을 제안했다.
DINO: DETR with Improved deNoising anchOr box

DINO(DETR with Improved deNoising anch Or box) 모델은 Fig.1에 나와있듯이 우수한 성능을 보여준다.
특히 COCO test-dev에서 63.3 AP를 달성함으로써 DINO가 훌륭한 Scalability를 가졌음을 알 수 있다.
다른 DETR-like 모델과 마찬가지로 DINO 또한 backbone, multiple-layer Tranformer encoder, mutiple-layer Transformer decoder, multiple prediction heads 로 구성되어 있다.
앞서 언급한 바와 같이, DINO는 DAB-DETR, DN-DETR 그리고 Deformable DETR의 연구 내용을 기반으로 구성되었다. 각 모델에서 참고한 내용을 간단히 정리하자면 아래와 같다.
- DAB-DETR: Decoder query를 dynamic anchor box로 구성. 그리고 단계적으로 decoder layer를 따라 anchor box가 정제되도록 설계
- DN-DETR: Ground Truth label과 노이즈가 합쳐진 Box를 Transformer decoder layer에 추가하여 학습 동안 이분 매칭의 안정화를 높임.
- Deformable DETR: 계산 효율성을 위해 deformable attention을 사용.
위와 같은 연구들을 참고하며, DINO는 총 3가지 학습 전략을 수립했다.
1. Contrastive denoising training:
1 대 1 매칭 성능을 높이기 위해 사용. 하나의 GT에서 positive/negative sample을 생성해서 같은 object에 대해 duplicate output을 생성하지 않도록 도와줌
2. Mixed query selection:
Dynamic anchor box를 query로 구성하는 접근법은 모델이 기존의 two stage model과 유사하게 동작하도록 만듬. 저자들은 이러한 방식의 이점을 더 높이기 위해 mixed query selection을 적용하여 더 좋은 query 초기화 방법론을 제안.
3. Look forward Twice:
파라미터 업데이트에 대한 방법론.
결과적으로 DINO를 COCO 데이터셋에서 성능 검증을 진행했고, 유의미한 결과를 얻을 수 있었다.
- 44.4 AP on 12 epoch, 51.3 AP on 24 epoch (with ResNet-50). 각각 다른 DETR-like 모델 대비 +6.0, +2.7 AP의 개선.
- DINO is scalable:
- Object 365 + Swin-L backbone pre-training: Best in COCO val 2017 (63.2 AP) and test-dev (63.3 AP)
- Swin-V2-G에 비해 1/15 크기의 모델 사이즈
- Florence의 pre-training 설정을 기준으로 dataset 크기가 1/5, backbone pre-training에 사용된 dataset의 크기도 1/60이지만 더 좋은 성능을 보임.
저자들은 DINO가 가진 main contribution을 다음과 같이 정의하였다.
1. Novel technique(CDN training, Mixed query, Look forward twice 등)을 사용한 End-to-end DETR-like model을 제안.
2. 다양한 구조의 DINO의 성능을 분석하기 위한 방대한 ablation study를 진행. 그 결과, DINO가 기존의 연구들을 앞선다는 결과를 얻을 수 있었음.
3. DINO는 public benchmark dataset에서도 충분히 best performance를 달성할 수 있음.
2. DINO: DETR with Improved DeNoising Anchor Boxes
2.1 Prelimminaries
Conditional DETR, DAB-DETR 연구에서 나온 것처럼 DETR의 query는 positional query와 content query, 이렇게 2가지 part로 구성되어있다. DAB-DETR에서는 이 positional query를 4D anchor box (x, y, w, h)로 구성했다. 이렇게 정의된 anchor box는 decoder layer를 거치며 정제되는데 용이하다.
DN-DETR에서는 Denoising을 도입해서 DETR-like 모델의 학습 수렴 속도를 높였다. 기존 모델들의 느린 학습 수렴 속도는 불안정한 이분 매칭(bipartite matching)이 원인이었는데, DN-DETR에서는 decoder layer에 Noise ground truth labels와 boxes를 주어 모델이 ground truth를 다시 만들도록 학습했다.
이때, 추가되는 noise는 $\Delta x$, $\Delta y$, $\Delta w$, $\Delta h$로 각각 $| \Delta x| < \frac{\lambda w}{2}$, $| \Delta y| < \frac{\lambda h}{2}$, $|\Delta w| < \lambda w$, $|\Delta h| < \lambda h$ 라는 조건을 만족한다. 이 수식에서 $\lambda$는 noise scale을 조절하는 하이퍼 파라미터다.
원래 논문에서는 $|\Delta y| < \lambda h$라고 적혀 있는데, 이 부분은 오타인 것 같다. 이미 앞선 수식에서 $\Delta y$에 대한 조건을 제시했는데 또 쓸 필요도 없을 뿐더러 부등호의 좌측 부분이 변수 h에 대한 것이므로, 저게 타당하다고 생각한다.
Noise가 추가된 GT box는 $\lambda$의 범위를 충분히 작게 설정한다면, 실제 GT box에서 매우 가까운 특별한 GT box를 만들 수 있다. DN-DETR는 이 box를 가지고 기존 DETR query에 DN part를 추가하여 noise가 더해진 GT box와 label을 decoder로 넘겨서 auxiliary DN loss를 계산했다.
이렇게 계산된 DN loss를 통해 모델이 더 빠르고 안정적으로 학습할 수 있었고, 이 방법은 다른 DETR-like 모델에서도 적용 가능하다는 장점이 있다.
기존의 방식은 완전히 맨땅에서 label과 box를 찾아야하는 문제를, noise가 추가된 ground truth box와 label를 시작점으로 줘서 정답 근처에서 학습을 시작하도록 돕는 것이다. 즉, 좋은 시작 위치를 잡고 시작하므로 빠르고 안정적인 학습이 가능해진 것이다.
Deformable DETR는 DETR의 학습 수렴 문제를 다룬 또 다른 선행 연구로서, Deformable attention을 사용했다. 이것을 사용하기 위해 저자들은 Reference point라는 개념을 도입했다.
DETR는 원래 이미지 전체에서 뽑아낸 query를 전부 봐야했기 때문에, 계산량이 엄청 많았다. Deformable DETR에서는 이 계산량을 낮추기 위한 방법으로 각 query에 중점(Reference point)를 부여하고, 그 부분을 중심으로 K개의 몇몇 지점만 샘플링했다.
이를 통해, 계산 복잡도를 낮추고 고해상도 피처맵과 다중 스케일 피처를 사용할 수 있게 됐으며, small object에 대한 탐지 성능도 개선되었다.
또한, DETR의 성능을 끌어올릴 수 있는 다른 테크닉들도 사용했는데 대표적으로 "Query selection"과 "Look forward once(Deformable DETR에서 사용된 용어는 아니고 DINO 저자들이 이름 붙임)"다.
- Query selection: Encoder의 출력으로 나온 feature와 reference box를 선택해서 decoder의 input으로 놓음
- Look forward once: 두 layer 사이에서 gradient detachment를 적용하여 bounding box를 정제.
DINO 이러한 선행 연구들의 방법론을 참고하여 Dynamic anchor box, Denoising 등을 도입했고, DN-DETR에서 사용한 다양한 테크닉을 적용했지만, positional query 초기화의 경우 더 좋은 성능을 위해 Deformable DETR를 참고했다.
2.2 Contrastive Denoising Training
DN-DETR는 Denoising을 통해 실제 정답 위치 근처부터 학습을 시작함으로써 학습 안정성과 수렴 속도 문제를 해결했다.
하지만, 모델이 모든 Noised Ground Truth를 정답으로 만들기 때문에, 실제로는 오브젝트가 존재하지 않는 위치에 생성된 Noised Ground Truth 조차도 정답으로 재생산되어, 결과적으로 중복된 박스가 생성되는 문제가 있다.
즉, 실제 물체가 존재하지 않는 "No-objectcase"의 noised query도 배경으로 처리하지 않고 어떻게든 정답으로 만들려는 문제가 발생하는 것이다.
저자들은 이 문제에 대한 해결법으로 Contrastive Denoising(CDN)을 제안했다. CDN은 간단히 설명하자면, 쓸모없는 anchor를 거부하는 방법이라고 보면 된다.
Implementation
먼저, DN-DETR의 Denoising은 하이퍼 파라미터 $\lambda$를 통해 noise를 제어하여, 힌트인 Noised ground truth를 생성하고 이를 토대로 원래 Ground Truth를 재구성한다.
이와 비슷하게, DINO도 $\lambda_{1}$, $\lambda_{2}$ ($\lambda_{1} < \lambda_{2}$)라는 2개의 하이퍼 파라미터를 사용해서 각각 CDN query를 생성한다. 전자를 기준으로 생성된 query를 positive query, 다른 하나를 negative query라고 한다.
Positive query는 $\lambda_{1}$보다 작거나 같은 noise scale로 생성된 샘플들로 이 범위에 해당하는 샘플들은 GT boxes들로 재구성되는 것을 목표로 한다.
Negative query는 $\lambda_{1}$보다 크고 $\lambda_{2}$ 보다 작거나 같은 noise scale로 생성된 샘플들이다.
이 샘플들은 "no-object" 인 경우들로서 사용된다.

Fig. 3에서 나온 것처럼, CDN 그룹마다 positvie와 negative query들로 구성되어 있다.
즉, 한 이미지에 $n$개의 GT box가 있다면, CDN 그룹은 총 $2\times n$의 query를 갖는다.
저자들은 성능 향상을 위해 DN-DETR와 마찬가지로 multiple CDN을 사용했다.
모델이 CDN을 통해 학습할 때, reconstruction loss를 계산하는데, 이 loss는 $l_{1}$ loss와 box regression에 대한 GIOU loss 그리고, 분류값에 대한 focal loss를 적용했다. negative sample은 "background"로 예측하는 경우로 쳐서 focal loss를 계산했다.
Analysis
CDN이 성능 향상에 효과적인 결과를 보이는 것에 대해 저자들은 원인을 분석해봤다.
우선, "Inhibit confusion"과 Bounding box를 예측할 때, 좋은 품질의 query를 선택했기 때문이라고 생각했다.
여기서 confusion이란, 여러 anchor가 하나의 object 근처에 가까이 있을 때 발생하는 현상으로, 이 경우 model이 어떤 anchor를 선택할지 결정하는 것이 매우 힘든 상황을 의미한다. Confusion은 보통 2가지 문제를 일으킨다.
먼저, Duplication prediction을 야기한다. 이것은 서로 다른 anchor로 부터 한 물체에 대해 같은 bounding box가 형성되어 중복 예측값이 발생하는 문제다.

DETR-like 모델들은 set-basd loss와 self-attention로 이러한 문제를 억제할 수 있지만, 완전히 제한할 순 없었다.
Fig. 8의 왼쪽 그림에서 보이는 것처럼, DN query를 사용하면 하얀색 화살표가 가리키는 소년의 bounding box처럼 중복된 bounding box가 발생할 수 있다.
하지만, CDN query를 적용하면 anchor간의 미묘한 차이를 구분하여, 이러한 중복 예측 박스 생성을 피할 수 있다.
다음 문제는 GT box에서 거리가 먼, 원치 않는 anchor가 선택될 수 있다는 것이다.
DN training은 정답 근처의 anchor box를 고를 수 있도록 개선했지만, 간혹 실제 GT box에서 떨어진 anchor가 예측되는 결과가 나왔었다. CDN은 DN의 아이디어에 negative query를 추가하여, 정답에서 거리가 먼 anchor box를 배제하는 것도 학습시킴으로써 이러한 문제를 해결했다.
Effectiveness
저자들은 GT box와 예측된 anchor가 얼마나 떨어져있는지 판단하기 위한 metric으로 "Average Top-K Dinstance (ATD)"를 정의했다.
DETR에서 각각의 anchor box는 GT box 혹은 배경에 대한 preditction box에 대응된다. 여기에서 저자들은이 고려한 것은 GT box에 매칭되는 anchor들만 고려한 것이다.
구체적인 metric 계산은 다음과 같다.
validation set의 $N$개의 GT box($b_{0}, b_{1}, ... ,b_{n-1})$를 가지고 있다고 가정. 이때, $b_{i} = (x_{i}, y_{i}, w_{i}, h_{i})$로 구성.
$b_{i}$에 대응되는 anchor를 $a_{i} = (x'_{i}, y'_{i}, w'_{i}, h'_{i})$로 정의. $a_{i}$는 decoder layer를 거치며 정제 과정을 거쳐 $b_{i}$에 할당 된다.
이때, ATD($k$)는 다음과 같이 계산된다.
$$ ATD(k) =\frac{1}{k}\sum[top-k((||b_{0} - a_{0} ||, ||b_{1} - a_{1} ||, ... ||b_{n-1} - a_{n-1} ||), k )] $$
위 식에서 $||b_{i} - a_{i}||$ 는 $l_{1}$ distance를 의미한다.
저자들이 top-K로 고른 이유는 GT box와 anchor 사이의 거리가 멀수록 confusion problem이 더 발생하기 때문에, 가장 confusion이 높은 샘플의 성능을 관찰하려했기 때문이다.

Fig. 4를 보면, DN도 충분히 좋은 anchor를 선택하여 ATD가 학습이 진행되며 개선되지만 CDN도 같은 경향을 보이며 심지어 작은 물체에 대해서는 더 잘 탐지하는 결과를 보여준다.
2.3 Mixed Query Selection

Fig. 5처럼 DETR와 DN-DETR의 decoder query는 개별 이미지들이 encoder를 거치며 출력된 feature를 일절 이용하지 않는 "Static embedding"을 사용한다.
DN-DETR와 DAB-DETR는 anchor를, DETR는 positional query를 학습 데이터로부터 직접 학습하고 content query는 전부 0 vector로 설정한다.
즉, DN-DET, DAB-DETR 그리고 DETR는 어떤 이미지가 들어오든 관계없이 초기 decoder query는 각각의 모델이 초기에 설정된 값으로부터 학습되기 시작한다는 것이다. (Content query는 0 vector 부터)
Deformable DETR는 positional과 content query를 모두 학습하는데, 이 또한 static query initialization 다른 예시다.
단, Deformable DETR는 성능 향상을 위해 query selection의 변형 방법("Two stage")을 사용한다.
이 방법은 간단하게 말하자면, 마지막 encoder layer의 feature로부터 top-K를 선택하여 query를 생성하는 것이다.
Fig. 5 (b)처럼 선택된 feature들로부터 선형 변환을 통해 positional과 content query를 생성한다. 또한, 선택된 feature들은 추후에 auxiliary detection에 사용되어 reference box를 초기화하는 predicted box로서 사용된다.
Efficient DETR도 이와 비슷하게 각각의 encoder feature로부터 objectiveness(class) score를 계산하여 top-K feature를 추출한다.
저자들은 Deformable DETR와 다른 DETR들의 방법을 섞어서, anchor는 top-k 로 선택된 feature로부터 사용하고, content는 static으로 사용하는 "Mixed Query selection"을 제안했다.
즉, Deformable DETR의 방법과 동일하게 가되, content query는 static으로 사용하는 것이다.
Fig. 5 (c)에 나온 것처럼 seleted top-k feature 중 position에 관련된 정보만 사용하여 dynamic anchor box를 초기화 한다.
그리고, content query는 static query로서 남겨 놓는다.
저자들은 content query를 static query로 남겨 놓은 이유에 대해, 별도의 정제 과정이 없었기 때문에 오히려 모호하고 애매해서 decoder의 학습 방향성을 잘 못 이끌 수 있기 때문이라고 한다.
예를 들어, top-k로 선택된 feature에는 "군중"과 같은 multiple object 나 "자동차의 바퀴"처럼 object의 일부분만을 담고 있을 수도 있다. 이 경우, positional query는 decoder의 정제 과정을 통해 교정될 수 있지만 content는 오히려 애매한 정보가 decoder의 정제 과정에 악영향을 줄 수 있기 때문이다. (자동차 바퀴가 아니라 자동차를 찾아야하는데, content로 바퀴를 주니까 결국 바퀴 근처로 물체를 탐지하게 됨.)
따라서, 저자들이 제안한 방법은 positional query만 향상 시키고 content query는 계속 학습 가능한 상태로 두는 것이다.
이를 통해 모델이 더 좋은 위치 정보를 사용해서 encoder로 부터 더 복잡한 content를 끌어 올 수 있다고 한다.
2.4 Look forward Twice

Fig. 6 (a)의 그림처럼 Deformable DETR의 box 정제 과정 중 학습 안정화를 위해 gradient back propagation을 막는 과정(gradient detach)이 있다.
저자들은 Layer $i$의 파라미터를 업데이트할 때 오직 $b_{i}$의 auxiliary loss에만 기반하므로 이 방식을 "Look forward once"라고 명명했다.
저자들은 이 방식에서 더 나아가서 다음 Layer에 해당되는 Layer {i+1}의 정제된 box 정보가 인접한 Layer {i}의 box 예측을 정확하게 하는데 도움을 줄 것이라고 예상했다.
즉, Layer {i}를 업데이트 하는데 Layer $i$의 Loss와 Layer $i+1$ Loss를 모두 사용하는 방식을 제안했다. 이 방법론을 "Look forward twice"라고 정했다.
Fig. 6 (b)에서 나오듯 box off-set $\Delta b_{i}$가 $b'_{i}$와 $b_{i}^{(pred)}$를 업데이트 하는데, 총 2번 사용되기 때문에, "Look forward twice"라는 이름이 지어진 것이다.
원래 논문에서는, $\Delta b_{i}$가 $b_{i+1}^{(pred)}$와 $b'_{i}$를 각각 총 2번 업데이트 해서 "twice"라고 했다고 나왔는데, 밑에 수식도 그렇고 Fig. 6의 그림 상 $b_{i}^(pred)$가 맞다. 아마 오타인 것 같다.
(Look forward once는 오직 $b'_{i}$를 업데이트 하는데만 사용된다.)
Look forward once 방식은 box offset 값인 $\Delta b_{i}$에 의해서만, $b_{i}^{(pred)}$가 결정되므로 $\Delta b_{i}$를 최적화 한다. 이 과정에서 Layer $i$와 $i-1$ 사이에 gradient detach가 있으므로, 두 layer의 정보가 분리 된다.
반면, Look forward twice는 예측 box prediction 값 $b_{i}^{(pred)}$는 $b'_{i-1}$와 $\Delta b_{i}$의 값에 따라 결정되므로, 두 값을 모두 최적화한다.
저자들은 이러한 최적화 작업을 layer $i-1$의 final box $b'_{i-1}$를 다음 layer $i$의 출력값 $\Delta b_{i}$로 supervising 하는 것으로 구성했다.
결과적으로, $b_{i}^{(pred)} = b'_{i-1} + \Delta b_{i}$ 로 정의된다.
구체적인 식은 아래와 같다.
여기서 $b'_{i}$는 $b_{i}$의 gradient undetached 된 값이다. 앞서, 설명한 것처럼 $b_{i}^{(pred)}}$ 를 계산할 때 $b'_{i-1}$ 가 사용되므로, 나중에 오차를 통해 $b'_{i-1}$가 좋은 값이었는지 아닌지 판별할 수 있게 된다. 따라서, 이 결과에 따라 다시 $b'_{i-1}$ 를 개선하게 된다.
그 외에 box를 업데이트하는 방법은 Deformable DETR와 동일하게 적용했다.
실험 결과는 생략
My Opinion
기존의 DETR-like 모델 연구들이 다루지 못한 scalability와, 성능 개선 그리고 end-to-end 구조 같은 부분을 잘 다룬 논문인 것 같다. 특히, CDN을 통해 기존의 DN training이 가진 빠른 수렴 속도와 안정성, 그리고 duplication 문제를 해결한 점이 인상 깊었다.
논문에서는 DN training이 DETR-like 모델에서만 적용 가능한 테크닉으로 소개 되었지만, 뭔가 이 아이디어를 잘 채용하면 다른 분야에서도 사용가능 할 것 같다.
Denoising은 결국 ground truth에 noise를 첨가해서 정답에서 약간 틀린 부분에서부터 학습해서 정답으로 재구성 하는 것이 핵심이니까. Segmentation이나 다른 분야에서도 충분히 활용 가능하지 않을까? 라는 생각이 들었다.
(예를 들어, ground truth mask에 noise를 준 데이터도 decoding 과정에 합쳐서 학습을 해본다던지 등)