YoojLee / paper_review

paper review archive
6 stars 2 forks source link

End-to-End Object Detection with Transformers (2020) #63

Open YoojLee opened 10 months ago

YoojLee commented 10 months ago
image

Summary

bipartite matching을 통한 set prediction loss를 기반으로 encoder-decoder 기반의 transformer를 활용하여 spatial anchor, NMS 등의 hand-designed components 없이 End-to-End로 object detection을 수행함 (기존의 다소 복잡한 detection pipeline을 간소화).

Method Highlights

image

방법론에 있어서 가장 중요한 두 가지 요소는 bipartite matching을 활용하여 set prediction loss를 통해 detector를 학습시키는 것과 encoder-decoder로 구성된 transformer 구조를 활용해서 detector를 구현했다는 부분임.

Loss

back propagation을 위한 loss를 계산하기에 앞서, 헝가리안 알고리즘으로 하나의 gt object 당 최적의 prediction box를 찾게 됨. 헝가리안 알고리즘을 통해 얻게 된, 최적의 prediction에 해당하는 prediction의 index permutation은 아래와 같이 표현될 수 있음.

image

이때의 matching cost는 아래와 같이 정의됨.

image

실제로 계산 시 효율성을 제고하기 위해서 헝가리안 알고리즘을 통한 비용 최적화는 N개 중 object가 존재하는 경우에 대해서만 매칭됨. 매치되지 않은 prediction은 no-object로 취급.

best prediction을 찾았다면, 아래의 수식과 같은 object와의 loss를 계산하게 됨.

image image

loss는 prediction에서 실제 gt에 해당하는 class의 negative log likelihood (이 p가 여기에서는 multinomial이니까 discrete해서 probability가 likelihood가 되는 것)와 bounding box의 regression 오차의 linear combination으로 구성됨. bounding box의 loss는 L1 loss와 IoU loss의 조합으로 이뤄짐 (IoU를 사용하는 이유는 실제 ground truth object의 크기에 따라 loss가 왜곡되는 걸 방지하기 위함임 -> relative error는 비슷함에도 불구하고, 절대오차는 bounding box가 큰 경우에 더 커지므로)

Architecture

image

detection pipeline을 encoder-decoder 구조로 설계했다는 건, 이미지 feature를 N개의 prediction box로 변환을 거치겠다는 것. 원래 Transformer는 machine translation 태스크에서 encoder에 source 시퀀스를 넣고, decoder에 target 시퀀스를 넣었음. decoder block의 두 번째 attention module에 key와 value로 encoder의 output을 넣어주면서 들어가는데, 이는 target 시퀀스를 쿼리로 날릴 때 target 시퀀스 토큰에 가장 잘 맞는 encoder output을 Q-K attention 연산으로 target과 source 간의 similarity 연산을 수행하고 이를 encoder output의 weight으로 이용해서, query (실제 target 시퀀스)와의 유사도를 반영하여 value (encoder output)을 업데이트하도록 함. 이를 DETR에 그대로 적용하면, encoder output인 이미지 feature token 시퀀스에 positional encoding을 쿼리로 날려주면서 각 feature token을 해당 position (object query)에 맞게 adjust하는 형태로 가는 것 같음. 약간 object queries가 기존의 region proposal과 같은 형태로 기능하지만, 여기서는 backprop을 통해 gt 값을 반영하는 형태로 end-to-end pipeline 내부에서 update가 된다는 점.

CNN backbone에서 이미지에 대한 feature map을 얻은 뒤에 이를 transformer encoder에 feed ($d \times HW$)함. 이 encoder의 매 layer에는 fixed positional encoding을 더해줌 (since the transformer encoder is scale-invariant). decoder에는 gt 대신에 learnable positional encoding인 object queries (nn.Embedding으로 구현; decoder sequence input은 정확히는 zero고 positional embedding을 더해주는 형태로 구현이 됨)를 feed해줌 (이것도 동일하게 매 레이어마다 input에 더해줌).

이후에 decoder output에 FFN을 통해 box coordinate을 예측하고, linear layer를 통해 class label을 예측하는 형태. 최종 prediction은 헝가리안 매칭을 통해 각 gt object에 매핑되고 그 다음 loss computation으로 넘어감.

Experiment Highlights

image

DC5 -> dilation과 convolution stride를 제거해서 feature resolution을 키운 케이스 model capa를 비슷한 수준으로 설정해줄 때, competitive results를 보여줌. 좀 더 디테일하게 보면, Large object를 좀 더 잘 detect하고 small object는 성능이 떨어짐. 이는 transformer의 attention이 globally communicate하면서 큰 object를 잘 찾게 되는 형태라고 추정한다고 논문에서는 이야기함.

image

학습된 모델의 마지막 인코더 레이어의 attention map을 시각화한 결과. 하나의 점이 주어졌을 때, 이미지 중에서도 그 주변에 잘 attend하고 있음을 확인. 이를 통해 어느 정도 인코더가 instance를 separate하고 있음을 확인할 수 있음 -> decoder에서 object extraction과 localization을 수행하는 것을 simplify.

image # of decoder layer에 따른 AP 성능 추이를 살펴본 것. decoding 과정에서 auxiliary loss를 사용하면서 매 레이어마다 FFN이 prediction을 수행하는 구조라서, 각 레이어 별로 prediction의 AP를 평가함. 디코더 레이어를 많이 쌓을 수록 성능이 향상됨을 확인할 수 있음. NMS도 추가적으로 수행해본 결과, shallow decoder를 활용할 때에는 output element 간의 cross-correlations를 잘 compute하지 못하므로 NMS가 효과적인 걸 확인할 수 있음. 하지만, 뒤로 갈 수록 큰 차이가 없음. 이는 self-attention을 여러 레이어 거치면서 (이걸 논문에서는 self-attention mechanism over the activations라고 함) duplicate predictions를 inhibit하는 형태로 가기 때문으로 보임. 또한 AP의 경우에는 마지막 레이어에서는 NMS를 사용하게 되면 오히려 성능이 조금 떨어지는 현상이 관찰됨.

image 디코더의 attention을 시각화한 결과. 객체 중에서도 object의 말단에만 attend하고 있음을 알 수 있음 (이게 정확히는 bounding box와 맞닿는 부분들). encoder에서 global attention을 통해서 어느 정도 instance를 특정지어두면 그 다음에 decoder에서 bounding box와 맞닿는 부분에만 attend해서 bounding box를 generate하는 형태로 가는 것 같음. -> 클래스 정보는 encoder 단에서 이미 어느 정도 파악이 가능하지 않을까?

positional encoding에 대한 실험을 해보았을 때, encoder에서의 spatial positional encoding은 빼도 only minor drop in AP (1.7 정도).

image 이미지 내 instance 수에 대한 generalization이 얼마나 잘되는지에 대해 실험. 임의로 기린 그림을 갖다 붙여서 이미지 내에 기린의 수를 24개로 증가시킴 (training set은 13개가 최대). 확인해봤을 때 잘 generalize되는 걸 확인할 수 있음. 논문에서는 object query에서 class-specialization이 크게 작용하지 않는다라고 얘기하고 있는데, instance 개수가 class 정보랑 무슨 의미가 있는지 잘 모르겠음. 이 실험이 major 실험은 아니지만, 합성된 이미지가 작위적이고 다소 패턴이 존재하므로 이게 OOD sample을 잘 핸들링한다는 주장을 충분히 뒷받침할 수 있는 결과인지에는 의문.

Panoptic Segmentation

image 논문에서는 위와 같이 DETR에 panoptic mask head를 붙여서 쉽게 panoptic segmentation을 수행할 수 있다고 밝히고 있음. mask head는 multi-head attention과 upsampling 용도의 FPN-style의 CNN으로 구성됨. detector 학습 후에, freeze하고 25 에폭 동안 추가로 mask head 학습하는 방식으로 학습을 진행함.

image

$\mathrm{PQ}$: Panoptic Quality $\mathrm{PQ^{th}}$: Panoptic Quality on things $\mathrm{PQ^{st}}$: Panoptic Quality on stuff

image

SQ와 RQ는 각각 Segmentation Quality(IoU)와 Recognition Quality(F1 score)를 의미함.

COCO panoptic의 경우, 카테고리가 things와 stuff로 크게 나뉨 as follows:

Semantic classes can be either things (objects with a well-defined shape, e.g. car, person) or stuff (amorphous background regions, e.g. grass, sky

stuff의 경우에는 baseline보다 좋은 성능을 보여주는 것을 알 수 있음. 이는 앞서 AP large와 비슷한 경우라고 볼 수 있음. DETR이 transformer에 기반하고 있기 때문에 global reasoning에 강점이 있고, 따라서 다소 크게 보아야 하는 stuff 클래스에 더 강점을 두고 있는 것.

반면, thing 클래스에 대해서는 mask AP (things class에 대해 계산)가 전반적으로 베이스라인에 비해 많이 떨어지는 걸 확인할 수 있음. 그럼에도 불구하고 panoptic quality는 어느 정도 comparable하게 나왔다는 점.

image 정성적인 결과. 어느 정도 잘 마스킹이 되는 것을 확인할 수 있지만, 가장 왼쪽 그림처럼 디테일하게 thing을 잡아내는 건 어려움을 확인. 이 부분은 지속적으로 언급되는 small object를 제대로 detect하지 못하는 부분과 연결될 수도 있을 듯함.

저자들은, DETR이 panoptic segmentation에서도 promising results를 보여줬음을 밝히고 이를 통해 fully unified models for panoptic segmentation을 이야기하고 있음.

Strengths

Weaknesses

대체적으로 weakness 2,3에 대해서 개선하는 방향으로 후속 연구가 진행되는 것으로 보임.