안녕하세요. 2D Detection관련하여 이번에는 DETR 모델에 관련해서 포스팅 하려합니다.
포스팅 시점 현재 2D image detection에서 bench mark SOTA에 올라와 있는 모델이 DETR기반의 모델이기 때문에 해당 모델을 포스팅의 주제로 잡았습니다. 시작전에 trasnformer에 대한 배경지식은 아래 포스팅 참고하세요.
DETR
End-to-End Object Detection With Transformers의 full name을 가지고 있으면 meta에서 내놓은 최초의 transformer를 활용한 2D object detection model입니다. 위의 그림과 같이 기존의 구조는 pre-defined anchor를 사용하면서 predicted bbx와 GT와의 관계가 many-to-one이 되어 nms등을 사용해야합니다. 즉, 복잡한데 반해 DETR은 아래의 overview처럼 hand-crafted anchor를 이용하지 않고 one-to-one관계가 가능합니다. post-processing이 필요하지 않고 간략합니다.
위의 전체적인 구조를 보면 CNN backbone + Transformer + FFN(MLP layers)로 이루어진 간단한 구조를 가지고 있습니다.
추선 backbone은 resnet을 이용하였습니다.(task 종류마다 resnet50, resnet101을 이용하였다고 합니다)
CNN을 통해 feature map을 추출하고 최종 [C,H,W] 을 1D conv를 이용하여 [D,H,W]로 변경하여 transformer의 input에 들어가기 위해 [D, HW]로 reshape하여 input으로 들어가게 됩니다.
Transformer단계에서는 아래와 같은데 기존의 Transformer와는 다르게 positional encoding을 summation하는 위치가 다릅니다.
Encoder단계에서는 CNN을 통과시킨 feature 와 positional encoding을 summation하여 MHSA를 통과합니다. attention은 input과 output의 shape은 같습니다.
Decoder에서는 N개의 bbox에 대해서 각각 query를 생성합니다. 이 object query들은 MHSA을 통과하고 attention을 통해 feature화된 N개의 object query unit들은 Query로 Encoder단계에서의 출력들은 Key와 Value로 하여 cross multi-head attention(CMHSA)을 수행합니다. 이후 FFN(mlp)를 통과하여 object class와 bbox정보(중점, 크기)를 prediction하게 됩니다.
기존의 transformer의 decoder(auto-regression)와 다르게 parallel방식으로 한번에 output정보를 출력합니다. 즉, 이전단계의 output이 다음 단계의 output에 영향을 미치지 않고 통채로 출력합니다.
이 과정에서 최대한 많은 후보의 N개 bbox를 설정하고 각각 bbox는 class와 bbox의 위치,크기를 prediction하게 됩니다. 여기서 bbox과 GT를 매칭하는 과정이 필요한데 Hungarian algorithm을 사용해서Bipartite matching(이분매칭)을 통해 이를 해결합니다.
이전에 AB3Tracking 논문을 리뷰할때 나온 알고리즘입니다.
Loss function에 대해 살펴보면 기존의 anchor base는 bbox범위가 크게 벗어나질 않지만 DETR은 initial guess가 없기때문에 예측 범주가 큽니다. 그렇기에 L1 loss와 GIoU Loss를 같이 사용합니다. GIoU 또한 AB3Tracking 에서 다루었던 내용입니다. 즉, IoU가 -일때도 loss를 합리적으로 적용할 수 있도록 하기 위함입니다.
헝가리안 알고리즘을 통해서 위의 loss를 최소로 하는 pred bbox와 GT쌍으로 loss를 적용합니다.
최초의 transformer기반의 object detection이지만 학습에 많은 시간이 소요되고 small object에 성능이 안좋은 단점이 있습니다.
**DEMO CODE
Deformable DETR
DETR이 transformer detection의 문을 열고나서 Deformable DETR이라는 모델이 publish되었습니다. 앞서 말했듯이 DETR은 학습이간이 오래걸리고 작은 object에 약점이 있었습니다. 고해상도의 feature map을 처리하는데 computation cost, memory문제가 있기 때문입니다. Deformable DETR은 이를 위해 feature map에서 핵심 요소에만 집중해서 attention을 연산하는 deformable attention module을 제안한 모델입니다. FPN없이 multi scale feature를 학습할 수 있도록 하였습니다.
Encoder
Deformable Attention Module은 아래의 그림과 같습니다. Deformable convolution에서 아이디어를 얻었으며 feature map의 공간 크기에 상관없이 기준점 주변의 작은 key 샘플링 주변 set에만 주의를 기울입니다. 이렇게 되면 모든 feature와 attention module을 적용할 필요가 없게되어 시간상 많은 이점이 생기게 되고 FPN의 다양한 feature에서도 적용이 가능하여 small detection의 문제도 자연스럽게 해결할 수 있게 됩니다.
[C,H,W]의 feature map이 주어지면 특정 query feature에서 linear layer를 통과한 후 다시 sampling offset layer를 거쳐 얻은 sampling offset을 통해 sampling points를 얻게 됩니다. 이 feature points와 query feature를 또 다른 linear layer를 통해 얻은 attention weight와 aggregation하여 sampled values를 얻게 되고 최종 linear layer를 거쳐 output feature를 뽑아내게 됩니다.
Decoder
디코더부분은 크게 self attention과 cross attention부분이 있는데 self attention은 decoder의 input(object query)들을 MHSA하는 부분(DETR과 동일), cross attention은 object query를 linear laryer에 통과시켜 reference point들을 뽑고 reference point에서 sampling point를 뽑아 인코더와 동일하게 value를 계산합니다.
Co-DETR
DETRs with Collaborative Hybrid Assignments Training이라는 full name을 가지고 있는 모델은 현재 coco dataset에서 sota인 모델입니다.
Co-DETR에서는 Deformable DETR에서 decoder에서 적은 수의 positive query로 일해 학습이 잘 이뤄지지 않는다는 점을 해결하기 위해 여러 auxiliary head를 추가합니다. encoder의 feature가 주어지면 multi-scale adapter를 통해 feature pyramid로 변환합니다. K개의 auxiliary head들은 feature들에 대해 prediction을 출력하고 supervised target을 계산하는데 사용됩니다. 아래는 auxiliary head의 종류입니다.
사실상 deformable DETR과 같은데 여러 auxiliary head를 붙여 성능을 높힌, 전형적인 auxiliary를 활용한 파생 모델로 성능은 sota이지만 노벨티가 있어보이지는 않습니다.
이상 DETR계열의 모델들을 살펴보았습니다.