Proposals에 대한 box를 만들어서 detector 앞단에 Proposal region을 추천하는 RPN(Region Proposal Network)가 존재하는 two-stage detectors(대표적으로 faster R-CNN)
anchors나 사물의 중심에 대한 grid와 관련하여 예측하는 single-stage methods(대표적으로 YOLO)
이러한 방법론들은 처음 guess를 어떻게 하는가에 대해 성능이 크게 좌우된다.
또한, 해당 박스가 실제로 객체일 가능성을 계산한 것이 objectness score인데 threshold를 기준으로 일정 기준 이상의 score인 박스만 남겨주는 과정을 거치고 여기에 추가로 NMS(Non-Maximum Suppression) 알고리즘을 적용해 중복되는 박스를 제거한다.
따라서 objectness의 threshold와 NMS 알고리즘의 기준이 되는 IoU threshold를 별도로 지정해 주는 작업이 필요하다.
NMS란 최대값을 제외한 값들을 억제하는 알고리즘이다. 여러 개의 bbox가 생기는 문제를 막기 위해 사용된다.
Q. 그렇다면 본 논문에서는?
Object detection문제를 direct set prediction 문제로 재정의함으로써 사전에 정의된 앵커 박스, NMS와 같은 hand-designed feature를 제거한다.
본 논문의 방법론은 이런 손수 처리하는 수고를 덜고 anchor대신에 input image와 관련해서 absolute box prediction으로 직접 set을 detection할 수 있게 된다. 또 bipartite matching으로 loss function을 설계해서 end-to-end로 학습이 가능하다.
사전에 정의된 앵커 박스를 사용하지 않기 때문에 train 데이터와 다른 결의 데이터가 test 시에 나타났을 때에도 대응 가능하다.
(다만 사전에 object query를 정해주어야 한다. 이것도 결국엔 사전지식이 주입되는 것이 아닌가. 라는 견해들도 있음.)
Method
전체적인 구조는 fig 2와 같다. 충분히 큰 N개의 종류의 prediction이 이루어진다고 가정한다. 왜 충분히 큰 N개로 해야할까? 이미지에 object 종류가 총 몇 개가 있을지 모르기 때문이다. 그래서 충분히 큰 N개 종류가 있다고 가정해놓고 object에 해당하지 않는 부분은 No object로 예측한다.
그러고 나서 예측된 값과 실제 값을 이분매칭 하게 되고, 이를 최적화한다.
매칭된 loss값은 pair-wise한 matching cost이다. 결과적으로 sigma를 찾는 task는 최적 할당 문제로 생각할 수 있고 다시 말해 가중 이분 매칭(bipartite matching)이다. 이 과정은 hungarian algorithm에 따라 이루어진다. (bipartite matching에 관한 설명은 생략하겠다.) 이 매칭 과정은 학습과는 상관이 없다. 즉 backpropagation이 흘러가지 않는다. loss를 계산하기 전에 이분 매칭을 통해 예측값과 ground truth 간 1:1 매칭을 해준다.
해당 task를 수행하면서 결과적으로 생성되는 아웃풋은 class와 bounding box가 나온다. 그리고 bounding box는 일반적으로 중심 좌표, 높이, 너비에 한 정보를 담는다. 본 논문에서는 bounding box 관련 값들을 0과 1 사이로 normalize 한다.
매칭된 loss값의 수식이다. class가 잘 맞고 bounding box 또한 잘 맞춘다면 loss가 줄어드는 형태이다.
즉, classification loss, IoU loss 둘 다 최소로 해야 한다. 그런데 이 때 대부분의 정답이 no object이기 때문에 class imbalance 문제가 생겨 no object의 경우 probability term을 1/10으로 줄여주게 된다. (Fast-RCNN에서 subsampling 개념과 유사함.)
두 bounding box가 유사해지도록 하는 역할이다.
이분 매칭을 통해 기존 region proposal 혹은 anchor와 같은 heuristic한 방법론과도 잘 맞는다. 이분 매칭의 결과로 set prediction의 중복된 결과를 피할 수 있게 된다.
구조를 파트별로 나눠서 살펴보겠다.
Input
backbone CNN에 이미지를 태워 feature map을 얻고 1x1 conv를 통해 이 feature map을 d차원(256)으로 축소하고 flatten 시켜 인코더에 들어간다. 이 때 2D positional encoding 방식으로 element-wise로 feature map을 더해준다.
Encoder & Decoder
encoder에서는 multi-head self-attention을 수행한다. Decoder에서는 object query와 encoder의 output을 입력으로 한다. 이 object query는 입력 이미지에 어떤 object가 존재하는지 query를 날리는 것이다. 구현상으로는 초기에는 랜덤하게 초기화된 embedding vector, 혹은 학습된 positional embedding vector가 들어가게 된다. 즉 정보를 받는 빈 그릇이라고 생각하면 되겠다. Decoder는 병럴적으로 인코딩되어서 해당 정보들이 기본적으로 하나의 인스턴스가 되어 prediction 하게 된다.
Encoder-Decoder attention을 통해 이미지의 어느 부분을 위주로 봐야할지 학습하고 self attention을 통해 역할을 어떻게 분배하여 최적의 1:1 매칭을 수행할 수 있을지 학습한다.
이미지의 특정 부분에서는 object query를 재사용한다. 말그대로 class 정보를 학습하는게 아니라 spatial한 정보를 학습하는 것이 object query의 역할임을 실험적으로 밝혔다.
(It turns out experimentally that it will tend to resuse a given slot to predict objects in a given area of the image.)
Prediction feed-forward networks(FFNs)
Decoder를 거쳐 최종적으로 예측되는 정보는 bounding box 예측(바운딩 박스의 중심 정보, 높이, 너비)과 class 예측이다. 이는 3-layer perceptron with ReLU를 거쳐 계산된다.
만약 class가 없다면 no-object로 결과가 산출되고 이미지 상 background에 해당한다. (위 예시 그림에서 새가 두마리니까 100개의 N 중에서 2개를 제외한 나머지 98개는 모두 no object label로 할당된다. )
장점
direct prediction을 통한 간소화
Transformer 구조 사용
단점
학습 시간 오래걸림
small object에 대한 탐지력은 약함
yolo,ssd와 같은 detector들은 multi-scale feature를 사용하지만, DETR는 한 레벨의 featuremap만 사용한다.
Transformer encoder의 경우 계산 복잡도가 feature map의 길이의 제곱에 비례하기 때문에 높은 해상도의 feature map을 사용하기 어려움.
큰 object에 대해서는 성능이 좋지만 확실히 small object에 대해서는 faster-RCNN에 뒤쳐지는 것을 볼 수 있다. CNN을 태우고 나온 이미지 중 마지막 layer를 사용하기 때문에(receptive field가 커지니까) 작은 feature에서 성능이 낮은 결과를 보였을 것이다. 따라서 multi-scale feature를 사용하면 이 문제를 해결할 수 있다. (Deformable DETR)
마치 maskformer에서 작은 물체 segmentation 성능이 안좋아서 multi-scale feauture를 쓴 mask2former와 비슷한 느낌임. (maskfomer -> mask2former / DERT -> Deformable DETR)
paper link : https://www.ecva.net/papers/eccv_2020/papers_ECCV/papers/123460205.pdf
Q. (이 논문이 나오기 이전의) 일반적인 OD 모델들은 어떻게 작동했을까?
Q. 그렇다면 본 논문에서는?![image](https://user-images.githubusercontent.com/67910856/234489727-618891c5-961d-47ff-995c-9c09f771e934.png)
Method
그러고 나서 예측된 값과 실제 값을 이분매칭 하게 되고, 이를 최적화한다.![image](https://user-images.githubusercontent.com/67910856/234500349-ec58475f-3204-4079-a20b-ee9fe59dc016.png)
매칭된 loss값은 pair-wise한 matching cost이다. 결과적으로 sigma를 찾는 task는 최적 할당 문제로 생각할 수 있고 다시 말해 가중 이분 매칭(bipartite matching)이다. 이 과정은 hungarian algorithm에 따라 이루어진다. (bipartite matching에 관한 설명은 생략하겠다.) 이 매칭 과정은 학습과는 상관이 없다. 즉 backpropagation이 흘러가지 않는다. loss를 계산하기 전에 이분 매칭을 통해 예측값과 ground truth 간 1:1 매칭을 해준다.
해당 task를 수행하면서 결과적으로 생성되는 아웃풋은 class와 bounding box가 나온다. 그리고 bounding box는 일반적으로 중심 좌표, 높이, 너비에 한 정보를 담는다. 본 논문에서는 bounding box 관련 값들을 0과 1 사이로 normalize 한다.
매칭된 loss값의 수식이다. class가 잘 맞고 bounding box 또한 잘 맞춘다면 loss가 줄어드는 형태이다. 즉, classification loss, IoU loss 둘 다 최소로 해야 한다. 그런데 이 때 대부분의 정답이 no object이기 때문에 class imbalance 문제가 생겨 no object의 경우 probability term을 1/10으로 줄여주게 된다. (Fast-RCNN에서 subsampling 개념과 유사함.)
두 bounding box가 유사해지도록 하는 역할이다.
이분 매칭을 통해 기존 region proposal 혹은 anchor와 같은 heuristic한 방법론과도 잘 맞는다. 이분 매칭의 결과로 set prediction의 중복된 결과를 피할 수 있게 된다.
구조를 파트별로 나눠서 살펴보겠다.
encoder에서는 multi-head self-attention을 수행한다. Decoder에서는 object query와 encoder의 output을 입력으로 한다. 이 object query는 입력 이미지에 어떤 object가 존재하는지 query를 날리는 것이다. 구현상으로는 초기에는 랜덤하게 초기화된 embedding vector, 혹은 학습된 positional embedding vector가 들어가게 된다. 즉 정보를 받는 빈 그릇이라고 생각하면 되겠다. Decoder는 병럴적으로 인코딩되어서 해당 정보들이 기본적으로 하나의 인스턴스가 되어 prediction 하게 된다.
Encoder-Decoder attention을 통해 이미지의 어느 부분을 위주로 봐야할지 학습하고 self attention을 통해 역할을 어떻게 분배하여 최적의 1:1 매칭을 수행할 수 있을지 학습한다.
이미지의 특정 부분에서는 object query를 재사용한다. 말그대로 class 정보를 학습하는게 아니라 spatial한 정보를 학습하는 것이 object query의 역할임을 실험적으로 밝혔다.
(It turns out experimentally that it will tend to resuse a given slot to predict objects in a given area of the image.)
Prediction feed-forward networks(FFNs)
장점
단점
마치 maskformer에서 작은 물체 segmentation 성능이 안좋아서 multi-scale feauture를 쓴 mask2former와 비슷한 느낌임. (maskfomer -> mask2former / DERT -> Deformable DETR)