본문 바로가기
Deep Learning/[논문] Paper Review

DETR: End-to-End Object Detection with Transformers

by 제룽 2023. 7. 23.
728x90
반응형

 

 
 
📝
<논문 요약>
  1. 본 논문에서는 object detection을 direct set prediction(일대일대응)으로 정의, transformer와 bipartite matching loss를 사용한 DETR(DEtection TRansformer)을 제안함.
  1. DETR은 COCO dataset에 대하여 Faster R-CNN과 비슷한 수준의 성능을 보임
  1. 추가적으로, self-attention을 통한 global information(전역 정보)를 활용함으로써 크기가 큰 객체를 Faster R-CNN보다 훨씬 잘 포착.
📝
<Architecture 요약> 1. Backbone(ResNet)을 입력해서 피처맵을 추출 2. 피처맵을 1x1 conv에 입력해서 flatten한 피처맵에 대해 positional encoding 구해서 더함 ※ spatial positional encoding은 Encoder의 모든 multi-head self-attention layer에서 query와 key에 더해짐 3. Transformer Encoder 통과 ※ feature map z0 을 입력받아 multi-head self-attention, feed forward network를 거쳐 feature map에 대한 representation을 학습시킴 → output: Encoder memory 4. Object queries 생성 (target 넣는거와 비슷) ※ query positional embedding은 Decoder의 모든 multi-head self-attention layer에서 query와 key에 더해짐 5. Attnetion 지나서 나온 output 값들(encoder memory) 을 Decoder multi-head atten layer에 전달함 6. Transformer Decoder 통과 ※ query를 입력 받아 multi-head attention layer 거친 후, encoder memory와 multi-head attention 수행 7. 이후, FFN 거쳐 output embedding 출력 8. Class prediction Head를 통한 class 예측 ※ Decoder의 output 값인 output embedding을 입력 받아 FN Layer 통해서 N개의 prediction에 대한 class 확률값을 출력함 (배경까지 c+1개 예측) 9. Bounding box head를 통한 예측 ※ Decoder의 output 값인 output embedding을 입력 받아 FN Layer 통해서 N개의 prediction에 대한 bounding box 출력 10. Hungarian Matcher을 통한 최적의 σ(i) 탐색

※ class head와 bounding box head를 통해 N개의 class prob와 bounding box를 예측했음 이를 기반으로 matching cost matrix 활용해서 Hungarian matcher를 통해 prediction과 ground truth 사이의 matching cost를 최소화할 수 있는 최적의 permutation σ(i)을 탐색

11. Loss 구하기 ※ Hungarian matcher를 통해 구한 permutation σ(i)으로 matching된 prediction과 ground truth 사이의 loss를 구함

 

 

 

1. INTRO

  • 기존의 detection의 경우, proposal, anchor, window와 같은 기법들을 기반으로 결과값을 찾아냈다면, 이 논문은 set을 직접적으로(일대일)로 예측하는 접근법을 제안함
📝
<기존의 방식> : 이미지 내 고정된 지점마다 다양한 scale, aspect ratio를 가진 anchor를 생성했음 > 그렇게 되면 하나의 정답값(ground truth)에 다수의 bounding box가 matching 됨. > 즉, many-to-one의 형태 장점 : 다수의 anchor 생성을 통해 다양한 크기와 형태의 객체를 효과적으로 포착하는 것이 가능 단점 : 정답은 하나인데, 다수의 bounding box가 존재하기 때문에 NMS(Non Maximum Suppression)과 같은 후처리가 필요하게 됨
📝
<DETR> : one to one 방식 > 여러 크기로 정의한 anchor를 사용하지 않음 > 하나의 ground truth에 하나의 예측된 bounding box만 매칭 시킴 > 즉, 후처리 방법이 필요 없어짐

 

2. 사전 지식

1. Hungarian Algorithm

  • 두 집합 사이의 일대일 대응 시 가장 비용이 적게 드는 bipartite matching(이분 매칭)을 찾는 알고리즘
  • Hungarian algorithm은 어떠한 집합 I와 matching 대상인 집합 J가 있으며, i∈I를 j∈J에 matching하는데 드는 비용을 c(i,j)라고 할 때, σ:I→J 로의 일대일 대응 중에서 가장 적은 cost가 드는 matching에 대한 permutation σ 을 찾는 것
  • 행렬의 행은 predicted bounding box를, 열은 ground truth를 의미함
  • 첫 번째 사진의 경우, 일자 형태로 매칭되어있을 때의 cost는 32
  • 두 번째 사진의 경우, permutation이 [3,4,1,5,2]인 경우, cost가 12로 상대적으로 낮음➡️ 즉, 이처럼 Hungarian Algorithm은 cost에 대한 행렬을 입력 받아서 cost가 최소인 permutation을 출력시킴

2. Bounding Box Loss

  • 기존의 방법들은 anchor를 기반으로 bounding box prediction을 수행하기 때문에 예측하는 bounding box의 범위가 크게 벗어나지 않았음➡️ 절대적인 거리를 측정하는 l1 loss만을 사용할 경우, 상대적인 error는 비슷하지만 크기가 큰 box와 작은 box에 대하여 서로 다른 범위의 loss를 가지게 될 것임 (큰 box는 큰 loss를, 작은 box는 작은 loss를).
  • 반면, DETR은 어떠한 initial guess가 없이 bounding box를 예측하기 때문에 예측하는 값의 범주가 상대적으로 큼➡️ 이러한 문제를 해결하기 위해 본 논문에서는 l1 loss와 generalized IoU(GIoU) loss를 함께 사용함
  • generalized IoU(GIoU) loss 는 두 box 사이의 IoU(Intersection over Union) 값을 활용한 loss로 scale-invariant 하다는 특징이 존재.
📝
<공식 설명> 1. predicted box bσ(i)와 ground truth box^bi를 둘러싸는 가장 작은 box B(bσ(i),^b)를 구함 2. 이 때 predicted box와 ground truth box가 많이 겹칠수록 B(bσ(i),^b)가 작아지며, 두 box가 멀어질수록 B(bσ(i),^b)가 커짐.  3. IoU(bσ(i),^b)는 두 box 사이의 IoU를 의미하며  |B(bσ(i),^b)∖bσ(i)∪^bi|B(bσ(i),^b)|는 B(bσ(i),^b)에서 predicted box와 ground truth box를 합한 영역을 뺀 영역에 해당. ➡️ 파란색에서 초록색 뺀 값을 말함 ➡️ 뺀 값이 작아질수록 겹치는게 많다는거 → 잘 예측했다 4. 이 때 GIoU는 -1~1 사이의 값을 가지며, GIoU를 loss로 사용할 때 1−GIoU형태로 사용하여 loss의 최대값은 2, 최소값은 0이 됨

➡️ 전체 Bounding Box Loss 식 (람다 iou, 람다 L1의 경우, 두 term 사이를 조정하는 하이퍼 파라미터)

 

3. Transformer for NLP task vs DETR Transformer

  • DETR의 경우 Transformer을 사용함
  • Transformer의 self-attention은 모든 입력 sequence의 token 사이의 상호작용(pairwise interaction)을 모델링하기 때문에 set prediction에 적합

➡️ (서로 모든 정보들을 주고받고 해서 겹치지 않게 예측할 수 있도록 하는.. 즉, 일대일으로 대응시키기에 좋다는 의미 같음)

 

3.1 DETR에서의 Transformer 사용

 

  1. encoder에서 이미지 feature map을 입력으로 받음 ↔ 기존 Transformer의 경우 문장에 대한 embedding을 입력받음
    1. CNN backbone에서 feature map을 추출
    1. 1x1 convolution layer를 거쳐 차원을 줄임
    1. spatial dimension을 flatten하여 encoder에 입력
    1. h,wℎ,가 height, width이며, C가 channel 수, d가 C보다 작은 channel 수라고 할 때 C×h×w×ℎ× 크기의 feature map을 d×hw×ℎ로 변환시킴
  2. <과정>

 


 

  1. Positional Encoding(2D 차원으로 변경해줌)↔ 기존 Transformer의 경우, 입력 embedding의 순서와 상관 없이 동일한 값을 출력하는 permutation invariant한 성질을 가졌기 때문에 positional encoding을 그냥 더했었음
    1. DETR의 경우, x, y axis가 있는 2D 크기의 feature map을 입력받기 때문에 기존의 positional encoding을 2D 차원으로 일반화시켜 spatial positional encoding을 수행함
    1. 입력값의 차원이 d라고 할 때 x, y 차원에 대하여, row-wise, column wise로 2/d 크기로 sine, cosine 함수를 적용
    1. 이후 channel-wise하게 concat하여 d channel의 spatial positional encoding을 얻은 후 입력값에 더해줌


  2. <과정>
  1. Transformer Decoder - Object Queries 입력↔ 기존 Transformer의 경우, decoder에 target embedding 입력
    1. Object Query는 object query feature과 object query positional embedding으로 구성됨
    1. object query featuredecoder에 initial input으로 사용되어, decoder layer를 거치면서 학습됨
    1. query positional embedding은 decoder layer에서 attention 연산 시 모든 query feature에 더해짐
    1. query feature는 학습 시작 시 0으로 초기화(zero-initialized)되며, query positional embedding은 학습 가능(learnable)
    1. Object queries는 길이가 N으로(여기서 N은 실제 객체보다 많이 설정한 값) , decoder에 의해 output embedding으로 변환(transform)되며 이후 FFN을 통해 각각 독립적으로(independently) box coordinate와 class label로 decode됨
    ➡️ 각각의 object query는 하나의 객체를 예측하는 region proposal에 대응된다고 볼 수 있음.
  2.  
  3. <과정>
  1. Decoder에서 첫 번째 attention 연산 시 multi-head self-attention 수행↔ 기존 Transformer의 경우, masked multi-head attention 수행

  2. ➡️ DETR의 경우, 입력 이미지가 동시에 모든 객체의 위치를 예측하기 때문에, masking을 해줄 필요가 없음
  1. 2개의 output으로 이루어짐 (1. Bounding box head, 2. Class probability head)↔ 기존 Transformer의 경우, Decoder 이후, 하나의 head를 가짐
  2. ➡️ 이미지 내 객체의 bounding box와 class probability를 예측하기 때문에 각각을 예측하는 두 개의 linear layer를 지님

 

 

3. Method

<필수요구사항>

(1) predicted bounding box와 ground truth box 사이의 unique matching을 가능하도록 하는 set prediction loss

(2) 한 번의 forward pass로 object model 사이의 relation을 예측하는 architecture

 

1. Object detection set prediction loss 

  • 첫 번째 조건 (1)을 충족하기 위해 loss를 계산하는 과정은 두 단계로 구분됨.
  1. predicted bounding box와 ground truth box 사이의 unique한 matching을 수행
  1. matching된 결과를 기반으로 hungarian loss를 연산

 

1.1 Find optimal matching (최적의 매칭 값을 찾아줌)

  • 고정된 크기의 N개의 prediction만을 수행함으로써, 수많은 anchor를 생성하는 과정을 생략 (일대일 대응)
  • N의 경우, 이미지 내 존재하는 객체의 수보다 훨씬 더 큰 수로 지정(최대 N개)➡️ 이를 통해 적은 수의 prediction이 생성, ground truth와의 unique matching을 상대적으로 쉽게 수행

  • y는 객체에 대한 ground truth set이며 y^은 N개의 prediction. y의 크기도 N개이며, 객체의 수를 제외한 나머지는 ∅ (no object)로 pad 됨.ex) 이미지 내 객체의 수가 3개이면, y에서 97개는 ∅로 pad됨
  • 두 개의 set(y와 y^) 에 대하여 bipartite matching을 수행하기 위해, 아래의 cost를 minimize할 수 있는 N의 permutation을 탐색함
  • 이때 L(match): ground truth와 matching cost는 class prediction과 predicted bounding box와 ground truth box 사이의 similarity(유사도)를 모두 고려하는 식

1.2 Compute Hungarian loss (최적의 매칭 값을 찾아줌)

  • 앞선 과정을 통해 matching된 pair를 기반으로 loss function인 Hungarian loss를 계산함
  • loss는 class loss와 box loss로 구성
  • class loss는 prediction에 대한 negative log-likelihood를 계산.
  • box loss는 Preliminaries에서 언급했듯이 l1 loss와 generalized IoU loss를 결합하여 사용

※ σ^(i)

: 이전 단계에서 구한 optimal assignment. 실제 학습 시 예측하는 객체가 없는 경우인 ci=∅에 대하여 log-probability를 1/10로 down-weight한다고 함

➡️ 왜? : 실제로 객체를 예측하지 않는 negative sample의 수가 많기 때문에 class imbalance를 위해 해당 sample에 대한 영향을 줄이기 위해 down-weight 해줌

 

 

2. DETR architecture


📝
<Architecture> 1. Backbone(ResNet)을 입력해서 피처맵을 추출 2. 피처맵을 1x1 conv에 입력해서 flatten한 피처맵에 대해 positional encoding 구해서 더함 ※ spatial positional encoding은 Encoder의 모든 multi-head self-attention layer에서 query와 key에 더해짐 3. Transformer Encoder 통과 ※ feature map z0 을 입력받아 multi-head self-attention, feed forward network를 거쳐 feature map에 대한 representation을 학습시킴 → output: Encoder memory 4. Object queries 생성 (target 넣는거와 비슷) ※ query positional embedding은 Decoder의 모든 multi-head self-attention layer에서 query와 key에 더해짐 5. Attnetion 지나서 나온 output 값들(encoder memory) 을 Decoder multi-head atten layer에 전달함 6. Transformer Decoder 통과 ※ query를 입력 받아 multi-head attention layer 거친 후, encoder memory와 multi-head attention 수행 7. 이후, FFN 거쳐 output embedding 출력 8. Class prediction Head를 통한 class 예측 ※ Decoder의 output 값인 output embedding을 입력 받아 FN Layer 통해서 N개의 prediction에 대한 class 확률값을 출력함 (배경까지 c+1개 예측) 9. Bounding box head를 통한 예측 ※ Decoder의 output 값인 output embedding을 입력 받아 FN Layer 통해서 N개의 prediction에 대한 bounding box 출력 10. Hungarian Matcher을 통한 최적의 σ(i) 탐색

※ class head와 bounding box head를 통해 N개의 class prob와 bounding box를 예측했음 이를 기반으로 matching cost matrix 활용해서 Hungarian matcher를 통해 prediction과 ground truth 사이의 matching cost를 최소화할 수 있는 최적의 permutation σ(i)을 탐색

11. Loss 구하기 ※ Hungarian matcher를 통해 구한 permutation σ(i)으로 matching된 prediction과 ground truth 사이의 loss를 구함

 

<참고/무한한 감사합니다>

https://herbwood.tistory.com/26


 
 
728x90
반응형