논문

하루에도 수만개의 글자를 읽고 있습니다. 하루에도 수백장의 종이를 들춰 읽습니다.
이것은 그 읽기에 대한 일기입니다.

End-to-End Object Detection with Transformers

Problem

객체 인식은 찾고자 하는 객체의 바운딩 박스와 그 카테고리로 구성되는 set을 찾는 것을 목표로 하는데 요즘의 객체 검출기는 이 둘을 간접적인 방식으로 prediction하고 있다. 즉 proposal, anchor, window center 등을 이용하고 있다. 때문에 이어서 오는 후처리 단계에 성능에 영향을 끼친다고 할 수 있다.

Essence

따라서 언급된 부가적인 작업 없이 직접적으로 prediction하는 방법을 제안한다. 기계 번역에서 자주 사용되는 transformer 기반의 encoder-decoder 구조를 사용하였는데, transformer에서 사용되는 self-attention은 sequence 내의 모든 요소들간의 상호작용을 명시적으로 모델링한 것으로 set prediction에서 발생하는 중복을 제거할 수 있었다.

DEtection TRansformer (DETR)은 모든 객체를 한번에 검출할 수 있으며, prediction과 GT 객체 간의 bipartite matching을 통하여 end-to-end로 학습 하도록 하였다. DETR은 hand-designed 된 요소를 없애 사전 지식이 필요없으며, customized layer 또한 사용되지 않는다.

Detail

Direct set prediction을 하기 위해서는 두가지 요소가 필요하다. (1) prediction된 객체와 GT 객체 간의 unique matching을 통한 set prediction loss과 (2) 객체를 prediction할 architecture이다.

Object detection set prediction loss

DETR은 이미지 내 객체 수보다 충분히 큰 크기의N개의 prediction을 추론한다. Loss는 prediction과 GT간의 가장 최적의 bipartite matching을 생성하고 이에 기반하여 각 객체에 대한 loss를 생성하도록 하였다.

GT의 객체 set을y라고 하고,N개의 prediction을\hat{y} = { \hat{y}_i }_{i=1}^N이라고 하자.y의 크기보다N 이 상당히 크기 때문에 크기를 맞춰주기 위해\varnothing를 채워 넣었다. 최적의 bipartite matching 상태는 다음과 같이 정의하였다.

\hat{\sigma} = \underset{\sigma \in \mathfrak{S}_N}{\arg\min} \sum_i^N \mathcal{L}_{\text{match}}(y_i, \hat{y}_{\sigma(i)})

여기서\mathcal{L}_{\text{match}}는 GTy_i와 prediction된\sigma (i)간의 pair-wise matching cost를 의미한다. 최적의 matching은 Hungarian algorithm을 통해 효율적으로 계산할 수 있다.

GT의 요소들을y_i = (c_i, b_i)로 정의하면, 여기서c_i는 class label,b_i \in [0, 1]^4는 바운딩 박스를 나타내는 벡터이다. prediction된\sigma(i)에 대해서 classc_i에 대한 확률 값을\hat{p}_{\sigma(i)}(c_i)로 나타내고 박스 또한\hat{b}_{\sigma(i)}로 나타내면 matching에 대한 loss는 아래와 같이 나타낼 수 있다.

\mathcal{L}_{\text{match}} = -\mathbb{1}_{c_i \neq \varnothing } \hat{p}_{\sigma(i)} (c_i) + \mathbb{1}_{c_i \neq \varnothing} \mathcal{L}_{\text{box}} (b_i, \hat{b}_{\sigma(i)})

최적의 matching pair들이 구해졌으면 이제 pair들 간의 hungarian loss를 계산한다.

\mathcal{L}_{\text{Hungarian}} (y, \hat{y}) = \sum_{i=1}^N \big[ - \log \hat{p}_{\hat{\sigma}(i)(c_i)} + \mathbb{1}_{c_i \neq \varnothing} \mathcal{L}_{\text{box}} (b_i, \hat{b}_{\hat{\sigma}}(i)) \big]

여기서\hat{\sigma}는 앞에서 구해진 최적의 pair를 나타낸다. 실제로는 imbalance 문제 댸문에\varnothing에 대한 항에 대해서는 10으로 나누어주었다.

다른 방법들과는 달리 박스 좌표들은 직접 prediction 한 값을 사용하였으며, 보통 사용되는 L1 loss의 경우 박스의 scale이 다른 경우에도 에러가 비슷한 문제가 있으므로 L1 loss와 generalized IoU loss를 같이 사용하였다.

\mathcal{L}_{\text{box}} = \lambda_{\text{iou}} \mathcal{L}_{\text{iou}}(b_i, \hat{b}_{\sigma(i)}) + \lambda_{\text{L1}}||b_i - \hat{b}_{\sigma(i)}||_1

DETR architecture

DETR은 3가지 요소로 이루어져 있다. (1) compact feature representation을 추출하는 CNN backbone, (2) encoder-decoder transformer, (3) 최종 prediction을 위한 feed forward network (FFN)이 그것이다.

Backbone

Backbone은 전통적인 CNN 구조를 이용하여 입력 이미지x_{\text{img}} \in \mathbb{R}^{3 \times H_0 \times W_0} 을 activation mapf \in \mathbb{R}^{2048 \times H \times W}, H = H_0 /32, W = W_0 / 32을 생성하였다.

Transformer encoder

먼저 activation map의 각 feature를 1x1 convolution을 통해d 차원으로 줄인 feature mapz_0 \in \mathbb{R}^{d \times H \times W}로 만든 뒤, 이를 하나의 sequence로 입력하기 위해d \times HW 크기로 변경하였다.

Encoder의 각 레이어들은 multi-head self-attention 모듈과 FFN 모듈을 그대로 사용하였다. Transformer 구조는 permutation에 invariant하므로 fixed positional encoding [31, 3]을 이용하여 각 attention layer에 더해주었다.

Transformer decoder

Decoder 또한 기본적이 구조를 그대로 사용한다. Decoder는d크기의N개의 embedding입력을 multi-head self-attention, encoder-decoder attention mechanism을 통하여N개 객체로 decoding 하게 된다. 원래의 구조와 다른 점이라면 N개의 객체를 병렬적으로 한번에 계산하도록 한 것이다.

Decoder는 encoder와 마찬가지로 permutation-invariant 하기 떄문에N개의 입력이 서로 달라야 다른 결과를 얻을 수 있으며, 입력되는 embedding은 학습된 positional encoding이다. 이를 object query라고 부른다. 또한 이 object query를 encoder에서와 마찬가지로 각 attention layer에 더해주었다.

최종적으로 입력된N개의 object query들은 output embedding으로 transform 된다. 이것들은 박스 위치나 class label에 관계없는N개의 prediction으로 decoding 된다.

Prediction feed-forward networks (FFNs)

출력된 embedding을 3개의 perceptron - ReLU 레이어를 이용하여 normalized center, height, width 좌표들을, 그리고 linear porjection - softmax 레이어를 이용하여 class label을 결정하도록 하였다.\varnothing을 위해서 no object class를 하나 더 추가하였다.

Auxiliary decoding losses

Prediction FFN 부분과 Hungarian loss를 각 decoder 레이어에 추가하여 학습하였다. 이 FFN들은 모두 같은 파라미터를 공유하도록 하였다. 또한 FNN의 입력은 서로 공유된 layer-norm 레이어를 통해 normalize된 입력을 사용하도록 하였다.


Add a Comment Trackback