End-to-End Object Detection with Transformers 논문 리뷰

남아무개·2021년 12월 27일
0
post-thumbnail

End-to-End Object Detection with Transformers, 2020

https://arxiv.org/pdf/2005.12872.pdf

Abstract
object detection 문제를 direct set prediction 문제로 보는 새로운 접근법을 제안한다. 우리는 이전 object detection에 사전지식을 직접 넣었던 non-maximum suppresion이나 anchor generation 같은 수작업 요소들을 제거하였다. 우리의 프레임워크 DEtection TRansformer(DETR)은 bipartitie matching과 트랜스포머 인코더-디코더 구조를 통해 유일한 predictions을 내게하는 set-based global loss를 사용한다. 학습된 object query set이 주어졌을 대, DETR은 object들의 관계와 글로벌한 이미지 컨텍스를 보고 추론을 하여 최종 예측 set을 내게 된다. 이 새로운 모델은 개념적으로 간단하여 구현도 용이하다. DETR은 Faster RCNN과 같은 잘 정립/최적화된 모델과 비슷한 수준의 성능과 추론속도를 보였다. 또한, DETR은 panoptic segmentation*에 쉽게 적용가능하고 baseline의 성능보다 우위이다.

Introduction

Object Detection 태스크는 bounding box와 분류 레이블 set을 예측해야하는 태스크이다. 최신의 detector들은 이를 간접적인 방법을 통해 풀었는데, 많은 set의 proposals이나 anchor, window center에 대해 regression문제나 classification 문제로 대체하여 풀었다. 이 방법론의 성능은 이후 겹치는 prediction들 중 추리는 post-processing 과정에 영향을 많이 받았다. 이러한 파이프라인을 간단히 만들기 위해, 바로 set prediction을 할 수 있는 end-to-end 방법을 제시한다.

이러한 e2e를 하기 위해 transformer의 encoder-decoder 구조를 가져온 DETR을 제시한다. DETR은 모든 object를 한번에 예측하고 예측된 object와 GT object biparite matching을 하는 set loss function을 통해 학습된다. DETR은 spatial anchor나 non-maximal suppression와 같은 수작업 요소들을 빼서 효율적인 파이프라인을 만들었다. DETR은 custom layer가 필요 없어서 별도의 패키지 없이 재현이 용이하다.

이전 direct set prediction 접근법과 다른점은 DETR은 bipartite matching loss와 transformers (non-autoregressive) parallel decoding의 결합이라고 할 수 있다. 이전 연구들은 RNN을 사용하여 auto-regressive 한 decoding 방법에 집중했다면, DETR은 GT object와 예측 object를 개별적으로 loss를 가지고 있어서 예측된 object의 순서에 상관이 없어 병렬화가 가능하다.

object detection으로 유명한 dataset인 COCO에 대해 faster RCNN과 비교했을때 유사한 성능을 보였다. DETR은 faster RCNN보다 더 큰 물건을 유의미하게 잘 찾았다. 반면에 작은 object에 대해서는 성능이 떨어졌다.

DETR을 학습하는 셋팅은 일반적인 object detector를 학습하는 것과 여러 방면에서 다른데, 아주 긴 학습 스케쥴을 필요로 하고, 보조적인 디코딩 loss의 도움을 받는다는 점이 다르다.

우리의 DETR 디자인은 더 복잡한 태스크들에 적용하기 쉽다. 실험 결과 간단한 segmentation head를 추가하는 것이 panoptic segmentation의 베이스라인을 넘김을 확인하였다.

The DETR model

detection을 위한 direct set prediction을 하기 위해서 두가지가 필수적이다.

(1) 예측된 box와 ground truth 사이의 unique한 매칭을 하기 위한 set prediction loss

(2) object set을 예측하고 그들의 관계를 모델링할 아키텍쳐

(1) Object detection set prediction loss

DETR은 디코더의 single pass로 고정된 크기 N개의 예측을 하는데, 이때 N은 실제 이미지에 있는 일반적인 object 개수보다 훨씬 크게 설정된다. 학습 과정 중 어려운 점은 예측된 object(class, position, size)를 ground truth에 비교하여 점수를 매기는 것이다. 우리의 loss는 예측된 값과 gt값의 최적 bipartite matching을 구하고 object-specific loss를 구한다.

최적 bipartite matching을 구하는 방법은 예측값과 실제값 사이의 set을 매칭하는 방법 중 최저 비용을 갖는 매칭을 찾는 것이다. 이는 Hungarian algorithm을 통해 효율적으로 찾을 수 있다.

  • yy : ground truth set of object
  • y^\hat{y} : set of NN prediction
  • NN : 이미지 내의 object의 개수보다 크며, yy는 object가 없다는 뜻인 \varnothing으로 pad되어 있음
  • Lmatch\mathcal{L}_{match} : pair-wise matching cost

위의 matching cost는 class 분류와 실제-예측 box 사이의 유사도 모두 포함하고 있다. 각 ground truth의 element인 iiyi=(ci,bi)y_i = (c_i, b_i)와 같이 볼 수 있다. (cic_i는 클래스 레이블, bib_i는 bbox의 center 값과 가로세로 길이) 즉 우리는 cic_i를 클래스에 대한 확률값으로, predicted box를 b^σ(i)\hat{b}_{\sigma_{(i)}}로 표현할 수 있고 이때 Lmatch\mathcal{L}_{match}는 아래와 같이 표현될 수 있다.

이렇게 matching을 찾는 방식은 휴리스틱한 assignment rule(match proposal, achors)과 유사하게 작동을 한다. 차이점은 one-to-one 매칭을 해야한다는 점이다.

두번째 단계는 쌍으로 묶인 값에 대해서 HungarianHungarian loss를 계산해야한다. 우리는 일반적인 object detection loss와 유사하게 box loss와 class 분류의 NLL의 weighted sum으로 loss를 정의했다.

실험 중 ci=c_i=\varnothing일 경우, class imblance를 막기 위해 log-probability term을 1/10배 했다. 이는 Faster RCNN에서 subsampling을 통해 positive/negative 비율을 맞춘것과 비슷하다.

Bounding box loss(Lbox\mathcal{L}_{box})

많은 detector들이 초기 guess에 대한 차이로 bounding box를 예측하는 것과 달리, DETR은 바로 box를 예측한다. 이러한 접근법이 implementation을 간단하게 만들었지만, loss에 대한 상대적인 scaling이 이슈가 될 수 있다. 주로 사용되는 L1 loss는 상대적인 에러가 비슷하더라도 작고 큰 box에 대한 scale이 다르게 된다. 이를 해결하기 위해 L1과 IoU loss를 선형결합하여 사용한다. 전체적으로, box loss는 아래와 같이 정의된다.

![]

DETR architecture

아키텍쳐는 3가지 요소를 가지고 있다. 1) 피쳐를 뽑기 위한 CNN backbone 2) encoder-decoder transformer 3) 최종 디텍션 예측을 하기 위한 simple feed forward network(FFN).

Backbone

초기 이미지 ximgRd×H×Wx_{img}\in\mathbb{R}^{d\times H\times W}를 CNN backbone을 사용하여 low-resolution fRC×H×Wf\in\mathbb{R}^{C\times H\times W}으로 바꿔준다. 보통 C=2048,H=H032,W=W032C=2048, H=\frac{H_0}{32}, W= \frac{W_0}{32} 으로 한다.

Transformer Encoder

1x1 convolution으로 차원 CC를 더 작은 차원 dd로 바꿔주어 새로운 feature map zord×H×Wz_o\in\mathbb{r}^{d\times H \times W}을 만들어준다. encoder는 sequence를 받아주길 원하므로, z0z_0의 2차원을 1차원으로 바꿔준다. (d×H×Wd×HWd\times H \times W → d\times HW) 인코더는 일반적인 multi-head self-attention과 FFN이지만, 인풋의 순서가 상관이 없어야 하기 때문에 fixed positonal encoding을 넣어주었다.

Transformer Decoder

일반적인 트랜스포머 디코더와 같다. 차이점은 원래 트랜스포머는 output sequence를 하나하나 넣어주는 방식으로 autoregressive하게 진행했지만, 우리의 모델은 한번에 N개의 obejct를 병렬로 예측한다. N개의 다른 결과를 내야하기 때문에 N개의 input embedding은 서로 달라야 한다. 이러한 Input embedding은 우리가 object query라고 부르는 학습된 positional encoding을 통해 표현된다. N개의 object query는 디코더에 의해 output embedding으로 변환되고 N개의 마지막 예측으로 바뀐다. 이러한 임베딩간 self혹은 encoder-decoder간 어텐션을 통해 각 object끼리 global한 관계를 학습한다.

Prediction FFN

3개의 perceptron과 ReLU, linea projection으로 이루어진다. FFN은 상대적인 중앙값을 예측하고, 이후 linear layer는 softmax를 통해 class를 예측한다. 우리가 고정된 크기의 NN을 예측하기 때문에 실제 object 외의 class는 보통 object detection의 “background” 클래스처럼 \varnothing을 예측하도록 한다.

Auxiliary decoding losses

모델이 맞는 개수의 object를 예측할 수 있도록 도움을 주는 auxiliary loss를 사용하였다. 우리는 각 decoder layer이후에 prediction FFN과 Hungarian loss를 추가하였다. 모든 prediction FFN은 같은 파라미터를 사용하였다. 우리는 다른 디코더레이어에서의 input을 정규화하기 위해 layer norm을 추가하였다.

Result


Faster RCNN과 비슷한 성능

profile
반갑습니다 ^^

0개의 댓글