논문 발표 당시 최근까지 나온 detection 모델을 설명하기 위해서는 Region proposl, Anchor box, NMS 등 새로운 개념들이 많이 등장했다. 이런 개념들은 실제로 구현하기 어렵고 코드가 길어진다는 단점이 있었는데, 2020년 당시 Facebook(현 META)은 이런 개념들을 적용하지 않고 네트워크 구조가 단순하면서 end-to-end 학습이 가능한 DETR을 제안한다.
기존 Object detection
본 논문에서는 객체 인식을 bbox와 category라는 set을 예측하는 task로 정의한다. 이 때 기존의 모델들은 다수의 proposal, anchor, window center 등을 기반으로 set을 찾는 간접적인 방법에 기반을 두고 있다. 본 논문에서는 이러한 pipeline을 간소화하기 위해 set을 직접 예측하는 접근법을 제안한다.
기존 모델들은 anchor기반일 경우 anchor를 기반으로 생성한 bbox와 gt를 매칭시킨다. 이 때 IoU 값이 특정 threshold 이상일 때 positive smaple, 미만일 때 negative sample로 간주해 Positive smaple에만 bbox regression을 진행한다. 이처럼 threshold를 기준으로 독립적으로 예측하기 때문에 bbox와 gt의 관계가 many-to-one이 된다. 이 때 near-duplicate하거나 redundant한 bbox를 제거하기 위해 NMS와 같은 후처리 과정이 필요하다.
반면 DETR은 위 그림처럼 직접 정의한 hand-crafted anchor를 사용하지 않는다. 또한 하나의 gt에 하나의 bbox를 매칭시킨다. 이를 통해 예측된 bbox와 gt의 관계가 one-to-one이 되며 후처리 과정이 필요하지 않게 된다.
Architecture
1. Backbone
backbone으로는 CNN인 ResNet을 사용해 feature mape을 추출한다.
2. Transformer encdoer
1 이후 1x1 conv 연산을 적용해 C차원의 feature map을 d차원으로 감소시킨다. Transformer는 sequence를 입력을 받기 때문에, feature map을 Flatten하여 dxHW로 사이즈를 변경시켜준다. 각 Encoder layer는 MHSA와 FFN으로 구성되어 있다. Transformer 구조는 입력 embedding의 순서와 상관없이 같은 출력값을 생성하는 permutation-invariant 속성이 있어 encdoer layer 입력 전에 입력 Embedding에 positional encoding을 더해준다.
3. Transformer decoder
decoder는 masking을 통해 다음 token을 예측하지만, DETR은 N개의 object에 대한 정보를 한 번에 출력한다. decoder 역시 permutation-invariant하기 때문에 입력으로 받는 embedding으로 Object queries라고 불리는 learnt poisitional encoding을 사용한다.
Object query는 object query feature와 object query positional embedding으로 구성되어 있다. feature는 decoder에 Initial input으로 사용되어 decoder layer를 거쳐 학습된다. positional embedding은 decoder layer의 attention 연산 시 모든 feature에 더해진다. feature는 학습 시작 시 0으로 초기화되며, positional embedding은 학습 가능하다. 이러한 object queries는 길이가 N으로, decoder에 의해 output embedding으로 변환되어 이후 FFN을 통해 독립적으로 box coordinate와 class label로 decode된다. 이는 각각의 query가 하나의 객체를 예측하는 region proposal에 대응된다고 볼 수 있다. 즉 object queries는 N개의 객체를 예측하기 위한 일종의 prior knowledge로도 볼 수 있다.
encoder와 유사하게 이 query들을 각 attendtion layer에 입력한다. 이 때 Embedding은 self-attention과 encdoer-decoder attention을 통해 이미지 내 전체 context에 대한 정보를 사용한다. 이를 통해 객체 사이의 pair-wise relation을 포착해 객체간의 global한 정보를 모델링하는 것이 가능해진다.
4. Prediction FFN
decoder에서 출력한 output embedding을 3개의 linear layer와 ReLU함수로 구성된 FFN에 입력해 최종 예측을 수행한다. FFN은 이미지에 대한 class label과 bbox좌표를 예측한다. 이 때 예측하는 class label 중 ∅은 객체가 포착되지 않은 경우로, "background" class를 의미한다.
5. Auxiliary decoding losses
학습 시 각 decoder layer마다 FFN을 추가해 auxiliary loss를 구한다. 이러한 loss를 사용할 경우 모델이 각 class 별로 올바른 수의 객체를 예측하도록 학습시키는데 도움을 준다. 추가한 FFN은 파라미터를 공유하고, 입력 전에 사용하는 Layer normalization layer도 공유한다.
Training
1. Extract faeture map by CNN backbone(ResNet)
이미지를 입력해 사이즈가 Cxhxw인 feature map을 추출한다.
2. Add Positional Encoding
1에서 얻은 feature map의 1x1 conv 연산을 거쳐 dxhxw 사이즈로 만든다. 이 후 spatial dimension을 flatten 시켜 dxhw 사이즈로 만들고, 이에 대한 spatial positional encoding을 구한다.
첫 번쨰로 이미지가 존재하는 영역은 1, 존재하지 않는 영역은 0으로 표시한 binary mask를 row-wise 누적합을 구한다. 이를 통해 y축에 대한 절대적인 위치를 구할 수 있다.
두 번째로 누적합에 대해서 기존 positional encdoing과 같이 각 위치에 sin, cos 변환을 수행한다. 동일하게 column-wise 누적합을 통해서도 이 과정을 수행한다.
세 번째로 x, y축에 대한 positional encoding을 concat하고, Feature map과 동일한 차원의 sptail positinal encoding(dxhxw)
를 구해준다.
이 positional encoding은 encoder의 모든 MHSA에서 query와 key에 더해진다.
3. Generate Object queries
query feature(Nxd)와 query positional embedding(Nxd)를 생성한다. 이 때 N은 에측값의 수이며, d는 channel 수이다. query feature는 zero initialize된다. 이 후 feature와 positional embedding을 더해 object query q를 생성한다. positional embedding은 모든 Decoder의 MSHA에서 query와 Key에 더해진다.
4. Output encoder memory by Transoformer encdoer
encoder는 feature map을 입력받아 MSHA, FFN을 거쳐 feature map에 대한 representation을 학습한 encoder memory(hwxd)를 출력한다. 이 memory는 모든 Decoder의 Multi-head attention layer에 전달된다.
5. output embedding by Transformer decoder
decoder는 q(object query)를 입력받아 MHSA를 거친 후, encoder memory와 함께 Multi-head attention을 수행한다. 이 후 FFN을 거쳐 output embedding(hwxd)를 출력한다.
6. Class prediction by Class head
Class prediction by Class head는 decoder output embedding을 입력받아 FC layer를 통해 N개의 prediction에 대한 class prob을 출력한다. class 수가 c이라면 배경까지 고려해 c+1의 class를 예측한다. (Nx(c+1))
7. Bbox prediction by Bbox head
Bbox head는 decoder output embedding을 입력받아 FC layer를 거쳐 N개의 prediction에 대한 bbox coordinate(Nx4)를 출력한다.
8. Math prediction with GT by Hugrian Macher
Hungarian algorithm은 두 집합 사이의 일대일 대응 시 가장 비용이 적게 드는 이분 매칭을 찾는 알고리즘이다.
위 예시에서는 두 사람(객체)를 detection할 떄, 예측된 bbox를 gt와 매칭시키는 문제이다. 이 때 각 예측된 bbox를 gt에 매칭시킬 경우의 모든 cost는 오른쪽 행렬과 같다. 가운데 그림처럼 1대1 대응이 될 경우의 총 cost는 32이다.
하지만 위 가운데 그림처럼 1대1 대응이 된다면 총 cost는 12가 된다. Hungrarian algorithm은 이렇게 cost에 대한 행렬을 입력 받아 mathcing cost가 최소인 permutation을 출력한다.
이 Hugraian Matcher를 사용해 class head와 bbox head를 통해 입력받은 값을 기반으로 1대1대응이 되는 permutation을 찾는다.
9. loss
Hugrarian matcher를 통해 구한 loss는 다음과 같다.
여기서 첫 항의 log 진수는 매칭된 class prob이고, 두번째 항의 두 번째 인자는 predicted bbox를 의미한다. 여기서 bbox에 대한 Loss는 L1과 GIoU를 같이 사용하는데, GIoU는 아래와 같다. (1 loss만을 사용할 경우 오차는 비슷하지만 크기가 큰 box와 작은 box에 대해 다른 범위의 Loss를 가지게 되는 문제를 보완하기 위함)
Conclusion
본 논문의 저자들이 말하는 contribution은 다음과 같다.
- 본 논문에서는 object detection을 direct set prediction으로 정의하여, transformer와 bipartite matching loss를 사용한 DETR(DEtection TRansformer)을 제안한다.
- DETR은 COCO dataset에 대하여 Faster R-CNN과 비슷한 수준의 성능을 보인다.
- 추가적으로, self-attention을 통한 global information(전역 정보)를 활용함으로써 크기가 큰 객체를 Faster R-CNN보다 훨씬 잘 포착한다.
이 밖의 주요한 실험 결과는 다음과 같다.
- encoder layer의 수로 ablation study를 진행한 결과 encoder를 전혀 사용하지 않을 때 성능이 3.9%p 감소했다. 저자들은 encoder가 global scene reasoning을 통해 객체를 분리하는 작업을 수행하기 때문이라고 가정한다.
- Dencoder layer는 추가할수록 성능이 향상되었다. 저자들은 encoder가 global attention을 통해 객체를 배경으로부터 분리했기 때문에 decoder는 객체의 경계 부분만 포착하면 될 것이라고 가정한다.
- FFN을 제거하고 attention만 사용할 경우, AP가 2.3%p 감소했다.
- spatial positional encoding을 사용하지 않고 decoder에 object queries만 사용한 결과 베이스라인에 비해 AP 값이 7.8%p 감소했다.
- l1 loss와 GIoU loss에 대한 ablation 실험을 수행한 결과, GIoU loss만 사용한 경우 성능이 0.8%p 정도만 감소했으나, l1 loss만 사용한 경우 성능이 5%p 가까이 감소하였습니다. 이를 통해 GIoU loss가 사실상 bounding box loss에 대한 기여도가 매우 높음을 알 수 있습니다.
저자들이 밝힌 단점 및 한계점은 다음과 같다.
- anchor-based가 아니어서 다양한 크기나 형태의 객체를 포착하지 못한다.
- bbox와 gt가 one-to-one 매칭되기 때문에 모델이 수렴하는데 긴 학습시간을 필요로 한다.
'DL > Object detection' 카테고리의 다른 글
EfficientDet (0) | 2024.01.24 |
---|---|
YOLO v4: Optimal Speed and Accuracy of Object Detection (0) | 2024.01.24 |
M2Det(M2Det: A Single-Shot Object Detector based on Multi-level Feature Pyramid Network) (2) | 2024.01.22 |
YOLO v3 (0) | 2024.01.22 |
[논문 리뷰] Object Detection in 20 Years: A Survey (0) | 2024.01.19 |