반응형
논문을 대략 읽어보면서 쓰는 글.
유투브에서 리뷰 영상을 봤는데 그래서 모델 component 각각에서 input/output이 어떻게 된다는건지 정확히 모르겠어서 대략 다시 보려고 한다.
What is the paper about?
- Task : Object Detection
- Main idea : transformer를 사용함으로써 end-to-end가 되었다.
- Details
- transformer를 대충 번역기처럼 생각했을때, output은 원래 번역된 각각의 단어처럼 나올건데, 여기서는 각 output 덩어리가 box prediction들을 의미한다.
- 원래 object detection에서 각 proposal에 대해 object인지/아닌지, class는 뭔지 두가지를 알려주는 head가 있었던걸 생각하자. transformer output에도 이런 처리를 해줄거라고 예상해볼 수 있다.
Input & Output
- 이미지.
feature를 뽑는다. - 인코더.
feature를 transformer encoder에 넣는다. (positional embedding 당연히 같이 들어간다.) - 디코더.
decoder input으로 1. object queries와 함께, 2. encoder output을 같이 넣는다.
(이해1) transformer에서 영어-프랑스어 번역기를 생각하면, input으로 1. <sos> token (+inferenced output. 지금까지 생성한 프랑스어 단어) + 2. 영어를 인코딩한 벡터를 같이 넣었던걸 기억하자.
(이해2) 물론 학습시에는 teacher forcing을 사용했었기 때문에 마스킹한 GT 프랑스어 문장을 넣었었다.
(이해3) 그렇다면 여기서도 object queries는 단어들처럼 어떤 덩어리 여러개가 들어갈거라고 생각할 수 있다.- object queries : learned positional embedding.
풀어서 설명하자면, 각각의 덩어리에게 '너는 이 위치를 보렴. 오른쪽 아래에 뭔가 있을지도?' '넌 그림 한가운데를 잘 봐.' '넌 왼쪽 위와 아래를 주시하도록해.' 이런 느낌이다.
position encoding은 sinusoid로 predefined인 경우도 있지만 (원래 transformer) BERT처럼 학습을 통해서 하는 경우도 있는데 여기선 미리 학습된 것을 사용했고, 이를 위해 attention layer를 사용하는 것 같다. - encoder output
방금 이미지를 sequence처럼 보면서 object detection을 위한 어떤 feature space로 인코딩 했었다. 그 feature들이다. 마찬가지로 각각은 이미지의 positional 정보도 같이 가지고있음을 기억하자. transformer 문장의 단어들처럼.
- object queries : learned positional embedding.
- decoder output : 서로 다른 object proposal에 대한 정보.
뒤에서 언급하겠지만, 각각의 proposal마다 다른 object를 담당할수 있도록 loss를 사용했기 때문에, optimal하게는 이렇게 학습된다. - Prediction Head : FFN을 거쳐 드디어 진짜로 우리가 아는 object proposal이 나온다.
Final output : 각 proposals. y=(c, b).- c : class (no object 포함)
- b : [0, 1] 사이의 4개의 값.
Loss?
그러면 어떻게 supervision을 줘서 학습시켜야하는가?
원래 transformer는 N개의 fixed size output이 나온다. (문장 끝이면 eos token이 나올 뿐이지)
여기서도 마찬가지로 N개의 object proposal이 나올 것이다.
=> bipartite matching loss 쓴다.
쉬운 예로는, 모든 proposal들이 "저기 고양이다!" "앗 고양이다!" "우왕 고양이다!" 죄다 이렇게 1:M matching이면 하나의 strong proposal에 대한것만 loss가 생겨버릴테니까, 아예 1:1 mapping을 강제하도록 pair-wise로 loss를 계산한다.
이를 위해 Match score를 계산하려면 당연히 bbox에 대한 값, class prediction에 대한 값을 정량화하는 식이 필요할 것이다.
헝가리안 로스랑 bbox loss를 쓰는데 논문을 더 읽어봐야겠다.
반응형
'AIML 분야 > Vision Transformer' 카테고리의 다른 글
Transformer와 CNN과 융합, 최강의 backbone 서베이 해보기? (EfficientNet V2, CMT, ViT, DeiT, Swin 등) (1) | 2021.08.04 |
---|---|
(읽다가 잠깐 드랍) Transformer, 진짜 필요할까? (2) (1) | 2021.06.03 |
Transformer, 진짜 필요한건가? (1) | 2021.05.28 |
[연구노트] CNN 안쓰는 3D Transformer를 만들어봤음 (for video action recognition) (0) | 2021.02.14 |
[ViT 논문] Image Recognition without CNNs? - Transformer! (0) | 2020.10.30 |
댓글