본문 바로가기

연구/papers

[논문 리뷰] End-to-end object detection with transformers 빠르게 이해하기(DETR 리뷰)

반응형

Contribution

1.Transformerobject detection에 최초로 적용

2.기존의 object detection 모델들과 달리 direct prediction이 가능하여 hand-crafted process 가 없어도 된다.

 


배경설명

기존의 object detection 기법들

region proposal

RCNN

물체가 있을법한 영역에 bounding box를 생성하고 이후 network에서 해당 부분의 image를 분석한다.

R-CNN이후 연구들에선 region proposalnetwork 로 학습하는 연구를 하고있다.

 

anchor

anchor

object detection의 고질적인 문제로 1개의 grid에 여러 object겹쳐있을 때 해당 grid에서 여러 object를 탐지하기 어렵다는 단점이 있다. 때문에 이를 해결하기 위해 나온 기법으로 anchor라는것이 제안된다.

anchor는 가로,세로 ratio가 정해진 bbox를 의미하는데 위 사진에서 검은 점을 중심으로 여러개의 anchor가 생성된다.

이 때 검은 점의 grid에 사람과 자동차를 모두 detecting하기 위해 anchor를 사용함으로써 둘 다 검출하게 된다.

그러나 anchor는 미리 정해진 ratioanchor box만 생성이 가능하다는 단점이 있어 input image에 맞춰서 dynamic하게 bbox를 생성하기 어렵다.

 

NMS

YOLO의 NMS

NMS란 최대값을 제외한 값들을 억제하는 알고리즘으로 위 사진처럼 하나의 물체에 대해 여러개의 bbox가 생기는 문제를 막기 위해 사용된다.

 


DETR 장점과 단점

장점

1. object detection에서 발생하는 문제들을 해결하기 위해 위의 기법들이 각각 적용되는데 이렇게 복잡해지는 과정을 direct prediction으로 아주 단순하게 만들어 버렸다.

2. CNN 이후 Transformer를 사용하면 되는 구조로 매우 단순한 구조를 취하게 된다.

 

단점

1. Transformer의 특성상 학습하는데 굉장히 많은 시간이 필요하다.

2. small object 탐지력이 약하다.


System architecture

DETR 전체 시스템 구조

전체구조는 다음과 같다. Backbone + Transformer + MLP구조로 이루어져 있고 MLP는 object detection을 위해 class, bbox를 예측하는 역할을 한다.

transformer encoder는 image feature vector를 입력으로 받는다. image feature vector는 CNN으로 부터 오는데 AvgPooling Layer를 거치기 전의 input이미지의 stride 32 크기를 가진 feature map를 가져온다. 예를 들어 input image resolution이 224x224 라면 7x7 feature map을 가져오게 된다.

그러나 transformer encoder는 3차원 tensor가 아닌 2차원으로 이루어진 sequence를 입력으로 받기 때문에 flatten 하는 과정이 필요하다.

 

즉 49개의 feature vector를 encoder에 넣게된다.(후에 나오지만 CNN에 dilated convolution을 적용하여 output resolution을 2배로 늘린경우에는 14x14개의 feature vector를 input으로 받는다.)

 

Decoder는 object query를 입력으로 받게되는데 이 때 object 는 DETR이 prediction하고자 하는 모든 object class를 의미한다.

 

original Transformer("Attention is All You Need")와 DETR의 transformer 비교

대부분 비슷한 모양을 하고있지만 Vaswani가 제안한 transformer와 DETR의 transformer는 2가지 차이점이 있다.

첫 째, positional encoding하는 위치가 다르다. Vaswani의 transformer는 transformer module(encoder, decoder)에 한 번만 encoding을 하지만 DETR은 모든 encoder, decoder module에서 positional encoding을 한다. 이 때 attention에서만 positional encoding을 하는데 이 방법이 성능이 더 좋다는걸 이론적으로 설명하진 않고 실험적으로 증명하고 있다.

 

둘 째, Vaswani의 transformer는 auto-regression방식으로 output하지만 DETR은 parallel 방식으로 output한다.

여기서 잠깐 auto-regression방식이 무엇인지 짚고 넘어가도록 하자.

 

transformer model이 gt를 예측할 때 모든 entity를 한 번에 output하지 않고 매 tick마다 하나의 entity씩 예측한다.

auto-regression이란 현재 tick에서의 값을 예측하기 위해 지금까지 예측한 값들을 이용해서 예측하는 방식을 말한다. 이러한 방식은 주식같은 시계열 데이터에서 많이 사용하는 방식이다.

 

그에 반해 parallel decoding output은 auto-regression과 달리 한 번에 모든 entity들을 output한다.

이 때 computational cost는 parallel 방식이 더 적다는 장점이 있으며 auto-regression보다는 정확도가 떨어질 수 있으나 DETR에서는 output들이 object query이고 이 object들은 NLP task처럼 서로가 밀접한 관련이 있는 task가 아니므로 parallel하게 output하는 방식이 적절하다고 본다.

 

Model Detail

bipartite matching

DETR학습을 위해 FFN까지 거치고 나온 output에 bipartite matching을 적용해야 한다. 적용해야 하는 이유를 설명하기에 앞써 먼저 bipartite matching이 무엇인지 빠르게 알아보자.

 

bipartite matching이란 서로 다른 두 그룹이 주어졌을 때, 각각의 그룹 '안'에서는 연결(matching)이 없고, 서로 다른 그룹끼리로의 연결만 존재하게끔 하는 matching방법이다.

 

DETR의 output으로 class와 bbox가 나오게 되는데 이 때 순서가 정해져있지 않기 때문에 DETR에서 예측한 output이 어떤 GT를 예측한 것인지 알아야 loss를 걸어줄 수 있다.

이 때 loss를 걸어주기 전에 output과 gt를 서로 matching시켜 pair집합을 만들어 주는 과정이 필요한데 여기서 사용하는것이 bipartite matching이란 것!!

 

bipartite matching이란 matching cost가 가장 작아지는 방향으로 이루어지는데 수식은 다음과 같다.

yi는 gt, y_hat은 output이다.

가장 아래 수식을 보면 모델이 예측한 class가 gt class와 같을 확률이 높을수록, 모델이 예측한 bbox와 gt의 bbox간 loss가 작을 수록 매칭 cost가 작아진다는 것을 알 수 있다. 이를 그림으로 쉽게 이해해보자.

위 그림은 이해를 위해 class로만 예시를 들었다. output의 첫 번째 class는 horse일 확률이 가장 크므로 당연히 gt의 첫 번째와 matching되기 보다는 1번째 index를 가진 gt와 matching되는 방향으로 matching이 이루어진다. 다른 output들도 마찬가지이다.

 

transformer encoder

encoder의 역할은 한마디로 말해서 image를 이해하는 역할이라고 볼 수 있다. 이 때 MHSA에서는 image feature vector간 distance에 상관없이 image feature vector를 분석하는 과정을 거치게 되는데 결과적으로 image 내에서 어떤 grid가 object이고 어떤 grid가 background인지를 학습하게 된다.

 

transformer decoder

Decoder의 역할은 크게 2가지로 볼 수 있다.

(1) object query의 이해

(2) object query가 image feature vector들과 무슨 관련이 있는지를 조사

 

(1) object query는 decoder의 MHSA에서 서로간의 관계를 조사하면서 object에 대해 이해하는 과정을 거치게 된다. object query만 MHSA에 넣는게 무슨 의미가 있나 싶을 수 도 있지만 object 끼리 비교하는 과정을 거쳐야 서로간의 공통점, 차이점을 비교하면서 해당 object에 대한 이해도가 높아질 수 밖에 없다. 예를 들어 코끼리 object와 기린 object를 비교한다고 치면 코끼리는 기린과 마찬가지로 다리가 4개지만 귀가 크고 코가 길며 뚱뚱하구나! 라는 object의 특성을 이해할 수 있다.

(2) MHA(cross attention) 과정을 설명하기에 앞서 잠깐 query, key, value의 개념에 대해 짚고 넘어가자.

 

Query : 영향을 받는 entity

Key : 영향을 주는 entity

Value : Q,K matmul을 통해 계산된 attention score를 적용할 entity.

 

즉 cross attention에서 일어나는 일을 말로 풀어서 설명하면 "object query가 image feature로부터 어떤 영향을 받는지, 얼마나 관련이 있는지를 조사"하게 된다고 할 수 있다. 

 

Encoder의 attention visualization

해당 이미지는 encoder의 MHSA 내용을 시각화 한것이다. 사진에 찍힌 빨간 점을 query라고 했을 때 그 query에 대해 활성화 되는 attention map을 시각화 한 것이다.

신기하게도 encoder에서 이미 object와 background를 구별할 수 있는 능력을 갖추게 되고, 심지어 같은 class(소)지만 다른 객체까지도 구별할 수 있게 된다. 논문의 저자들의 말을 빌리면 덕분에 Decoder에서는 simple한 작업만을 수행하게 된다고 한다.

Decoder의 attention visualization

Decoder에서는 object의 extremities에 집중하는 경향을 보인다. 잘 보면 신기하게도 단순히 object pixel의 모든 가장자리에 집중하는 것이 아니라 bbox영역을 표시하기 위해 가장 활성화되어야 할 부분이 활성화 되는 것을 볼 수 있다.

 


Comparison with Faster R-CNN

대체로 DETR이 성능이 좋아보이지만 논문에서 언급한대로 small object에 대해서는 탐지능력이 많이 떨어지는 것을 확인할 수 있다. 논문에서는 이를 보완하기 위해 CNN resolution을 늘리는 DETR-DC5모델을 제안하기도 했지만 성능을 더 끌어올릴수는 없나보다. 다만 저자들도 알다시피 FPN구조처럼 multi-level 구조를 사용하면 small object에 대해서도 성능을 올릴 순 있지만 DETR의 막대한 학습시간때문에 이 방법은 사용하지 않은듯 하다.

 

Panoptic segmentation

segmentation에서도 마찬가지로 대체로 좋은 성능을 보이지만 기존의 model들과 비교해서 항상 우위에 있는것은 아니다. PQ^st 는 stuff에 대한 PQ를 의미하는데 stuff는 background를 의미한다. PQ^th 는 thing에 대한 PQ를 의미하는데 thing은 background를 제외한 객체들을 의미한다. DETR의 transformer 구조는 image의 background까지 분석하는 능력은 월등하다는 것을 위 표에서 확인할 수 있지만 객체에 대한 분석능력은 기존의 segmentation model들을 넘는다고 보기는 어렵다.

 

반응형