[7주차/김희준/논문리뷰]End-to-End Object Detection with Transformers(DETR)
논문 제목: End-to-End Object Detection with Transformers
작성자: 17기 김희준
Detection의 목적은 bounding box와 객체의 label 조합을 예측해내는 것이다. 기존의 detection 모델들은 proposal, anchor 등을 많이 만들어놓고 postprocessing(후처리)에 많은 투자를 하여 이 정보를 바탕으로 조합을 예측한다. 이런 방식을 indirect하다고 한다. 이 방식의 단점은 많은 anchor box를 만들다 보니 하나의 ground truth에 매칭되는 anchor box 역시 여러개가 되는 many-to-one 현상이 발생하고, 이러한 중복을 제거하기 위해 후처리에 많은 시간을 들여야 한다는 점이다.
본 논문은 기존과 달리 direct한 방식으로 detection을 수행한다. 애당초 anchor box를 여러 개 만들어놓는 것이 아니라 하나의 ground truth에 하나의 bounding box만이 매칭되게 한다.
이를 위해 사용하는 것이 Transformer의 encoder, decoder 구조이다. transformer로 모든 객체를 한번에 예측한 후 이를 bipartite matching 방식으로 loss를 개선해나간다. DETR은 여타 모델과 달리 customized layer가 필요하지 않다. 따라서 어느 framework에서나 유동적으로 잘 작동한다는 장점이 있다.
DETR에서 가장 중요한 핵심 두 부분이 1) set prediction loss와 2) DETR architecture이다.
기존의 연구들이 수 천개의 anchor를 만든 것과 달리, DETR은 N개를 정해두고 prediction을 한다. 이는 기존에 지적된 문제인 many-to-one을 해소하기 위한 해결책이다.
위 식에서 y는 실제 ground truth set이고 y hat은 예측값이다. N은 실제 이미지에 존재하는 객체 수보다 더 큰 값으로 설정한다. 객체가 2개이고 N을 5로 설정했다면, 객체가 아닌 3개는 공집합으로 패딩된다.
L_match는 ground truth box와 bounding box의 예측값, class 예측값의 유사도를 종합적으로 고려한다. 가장 적은 loss가 발생하도록 예측값과 ground truth를 1대1로 매칭하는 것이 목적이다.
실제 실험에서는 평균적으로 N=100으로 설정한다. COCO 데이터셋의 경우 평균적으로 object가 7개씩 들어가는데, 따라서 패딩되는 공집합이 93개 가량으로 굉장히 많아진다. 이러한 불균형을 맞춰주기 위해 class가 공집합인 경우 낮은 가중치를 부여한다.
이러한 1대1 매칭을 가능하게 해주는 알고리즘이 Hungarian algorithm이다. 위 사진을 예시로 보면, N을 5로 설정하고 실제 object는 2개가 있으니, 공집합 3개를 패딩한 것을 알 수 있다. 뒷모습의 성인 남성, 빨간 옷을 입은 어린 아이가 ground truth이고, 모델이 예측한 bounding box는 5개이다. 이 때 예측한 5개의 bounding box가 5개의 ground truth(그 중 3개는 공집합)과 각각 매칭시키는 5*5 행렬을 만든다. 이 때 가장 cost가 적게 발생하는 permutation을 최적의 결과로 채택하는 것이다. 위 예시는 cost가 가장 많이 발생하는, 즉 제대로 학습되지 못한 경우이다.
이번 경우는 permutation이 3,4,1,5,2로 바뀌어 cost가 12로 줄어든 것을 볼 수 있다. 가장 적은 cost를 발생시키는 최적의 경우이다.
바로 이 지점이 본 논문에서 transformer를 사용하는 이유이다. transformer의 self attention은 모든 입력 토큰 간의 pairwise interaction을 고려한다.
NLP에서의 self attention을 예로 들면 더 쉽게 와닿는다. it이라는 지시대명사가 무엇을 의미하는지, 인간이라면 어렵지 않게 animal이라 답을 내릴 수 있다. 하지만 기계가 이러한 문맥을 읽게 하기 위해 self attention이 사용되는데, 입력 문장 내의 모든 단어들끼리 pairwise한 관계를 파악함으로써 it이 animal과 가장 관련이 높다는 추론을 한다.
예측 box와 ground truth 간의 모든 조합끼리 관계를 파악하는 것도 단어끼리의 pairwise interaction을 파악하는 것과 일맥상통하다.
또한 box의 좌표를 regression하다보면 크기가 큰 box의 loss가 비교적 커지는 현상이 일어나므로 이를 보정하기 위해 IoU loss를 함께 사용한다. IoU는 객체가 작든 크든 면적이 겹치는 비율에 따른 값이기 때문에 객체 크기에 큰 영향을 받지 않는다.
3.2. DETR architecture
DETR architecture는 CNN을 backbone으로 사용하고, transformer의 encoder와 decoder, 그리고 feed forward network(FFN)으로 구성되어있다.
backbone: 3*H_0*W_0 크기의 이미지를 input으로 받고 C=2048, H=H_0/32, W=W_0/32 크기의 feature map으로 추출해낸다.
Transformer Encoder: 1*1 convolution을 하여 C를 d차원으로 축소한다. 또한 이미지의 위치 정보를 담기 위해 positional encoding 값을 더해준다.
인코더의 역할은 픽셀값을 multi-head self attention에 태워서 attention score를 계산하는 것이다. 위 사진이 각 객체에 대한 픽셀의 attention score를 시각화한 것인데, 같은 객체의 픽셀에서 score가 높은 것을 확인할 수 있다. 즉, 전체 이미지 중 객체들이 각각 어디에 어떻게 존재하는지를 대강 파악해주는 역할을 한다.
Transformer Decoder:
NLP에서 transformer와 달리 DETR transformer decoder의 가장 첫 단은 masked multi-head attention이 아니라 multi-head self attention이다. NLP에서와 달리 굳이 이후 단어에 대해 masking을 할 필요가 없기 때문이다. 또한 input으로 들어가는 것은 object queries인데, 이것이 이후 FFN을 거쳐 class label과 좌표값으로 디코딩된다.
디코더는 탐지된 객체의 class label과 bounding box 좌표 정보를 추출해내려고 한다. 따라서 attention score를 살펴보면 객체의 가장자리, 머리, 다리, 꼬리같은 가장자리, 그 객체의 특징이 두드러지는 부분에서 높은 score를 보이는 것을 알 수 있다.
Prediction feed-forward networks(FFNs):
decoder에서 출력된 결과를 3개의 linear layer와 ReLU 활성화 함수로 보내주어 최종 예측을 한다. class label, normalized center coordinate(중심좌표), width, height를 예측한다. class label로 공집합을 예측할 수도 있는데, 이는 background를 의미한다.
ResNet을 backbone으로 한 Faster R-CNN과 비교한 결과이다. 두 모델 모두 COCO dataset으로 평가를 했다. 대부분의 경우 Faster R-CNN과 비슷하거나 더 좋은 성능을 보이고 있다. 주목할 점은 AP_M, AP_L처럼 큰 object에 대한 성능은 높은 반면, 작은 object에 대한 성능은 줄어든 것을 볼 수 있다.
어떤 요소들이 성능 향상에 도움이 되는지 ablations해본 결과들이다.
Panoptic segmentation은 모든 픽셀별로 class를 분류하는 semantic segmentation과 동일한 class 내에서도 서로 다른 객체를 구분하는 instance segmentation을 합친 task이다. DETR의 디코더에 mask head를 추가하면 이러한 Panoptic segmentation을 수행할 수 있다.
당시 SOTA 모델이던 PanopticFPN을 제치고 DETR이 SOTA 모델이 된 것을 확인할 수 있다.
https://arxiv.org/abs/2005.12872
https://rauleun.github.io/DETR
https://kyujinpy.tistory.com/4
[7주차/논문리뷰/이서연] Mask R-CNN (0) | 2023.08.17 |
---|---|
[7주차/강민채/논문리뷰] CornerNet (0) | 2023.08.14 |
[6주차/강민채/논문리뷰] M2Det (0) | 2023.08.09 |
[6주차/김희준/논문리뷰]Single-Shot Refinement Neural Network for Object Detection(RefineDet) (0) | 2023.08.09 |
[6주차/논문리뷰/이서연] Faster R-CNN (1) | 2023.08.07 |
댓글 영역