Vision Transformer

3 minute read

Vision Transformer 흐름에 대해 정리한 글입니다.

최근 가장 관심이 뜨거웠던 vision 분야의 transformer 관련 연구들에 대해 아주 간단히 정리해보았습니다.

기존에 transformer 개념에 대해서는 따로 설명하고 있지 않기 때문에, 혹시나 헷갈리는 분이 있다면 이 블로그 또는 강의 동영상 을 참고 하시기 바랍니다:)

Vision Transformer (ViT)

Reliance on CNNs is not necessary. A pure transformer can perform very well on image classification tasks.

스크린샷 2021-06-06 오후 10.27.46

기존 대부분의 vision task에서 사용되었던 CNNs을 전혀 사용하지 않고 오직 MLP와 attention 조합인 transformer 사용하여 기존 CNN 베이스의 네트워크와 견줄만한 결과를 보였습니다. larger dataset 으로 pre-trained 했을 때는 오히려 더 좋은 성능을 보이기도 했습니다.

제안하는 구조는 위 그림과 같습니다. Transformer는 NLP에서 사용되었던 구조를 그대로 가져왔습니다. 중요한 부분은 standard Transformer에서 input을 1D sequence of token으로 넣어줬던 것처럼, image도 이와 같이 만들어줘야 합니다.

이 논문에서는 이미지 하나를 N개의 \((P, P)\) patch로 나누고, 각 image patch를 flatten 하여 linear projection을 하여 transformer input token 형태로 만들어주었습니다. 각 patch token에 position embedding 정보를 더해서 transformer input으로 넣어줬습니다. output은 MLP classification Head 를 통과하여 classification 됩니다.

이 ViT 모델은 translation equivalence 나 locality와 같은 inductive bias들은 부족하기 때문에 한정된 데이터 내에서는 잘 generalize 되지 않지만, 굉장히 큰 데이터셋 (14M-300M 이미지) 으로 pre-trained 되었을 때는 일반적인 SOTA CNNs 보다 더 좋은 성능을 보여주었습니다.

MLP-Mixer

많은 사람들이 위에서 소개했던 ViT 논문에 뜨거운 관심을 보이며, ViT에서 좀 더 구조를 향상시킨 T2T-ViT, DeepViT, LocalViT, CrossViT 등의 연구들이 나왔습니다.

하지만, transformer가 왜 잘 되는지는 아무도 정확히 몰랐고 다들 어림짐작으로 self-attention 때문이지 않을까 생각했을 텐데, self-attention 을 뺀 오직 MLPs 만으로도 competitive 한 결과를 보인 논문이 바로 MLP-Mixer 입니다. 사실상, 잘 되었던 것이 self-attention 때문이 아닐수도 있다는 것?

스크린샷 2021-06-06 오후 10.54.35

위 그림에 (a)가 바로 MLP-mixer의 구조입니다. 오직 multi-layer perceptrons (MLPs)만 사용하였고 competitive but conceptually and technically simple 한 모델입니다. 이미지를 patch로 잘라서 input으로 넣어주는 방식은 ViT와 동일하고, 우리가 봐야 할 부분은 위 구조에서 token-mixing 과 channel-mixing 부분입니다.

token-mixing 부분을 보면 channel independent 하게 각각 다른 patch들이 MLP 1 의 input으로 들어가고, channel-mixing 부분을 보면, token(patch) independent 하게 각 channel 들이 MLP 2의 input으로 들어갑니다. CNN 관점에서 보면 MLP 1은 single-channel depth-wise convolution으로, MLP 2는 1x1 convolution으로 볼 수 있습니다.

separate per-location operation (channel-mixing) and cross-location operation (token-mixing)

CNN 에서 large kernel이나 Vision Transformer 에서는 per-location operation과 cross-location operation을 한번에 진행하는데, MLP-mixer에서는 두 역할을 분리했습니다. token-mixing에서는 다른 spatial location 사이의 feature들을 mix 하고, channel-mixing에서는 주어진 location (patch) 안에서 feature들을 mix 합니다.

이 모델은 complexity가 이미지의 pixel에 따라 linear하게 증가한다는 면에서 architecture style은 CNN에 가까우면서도, 모든 layer가 같은 크기의 input을 받는 isotropic design이기 때문에 Transformer와 더 가깝다고 합니다.

결론은 transformer 가 잘된 이유는 attention 때문이 아닐 수도 있다는 것? 오히려 위 그림 (b)와 같은 MLP-mixer와 거의 비슷한 구조로 실험을 한 논문 에서는 MLP를 활용한 patch embedding 과 같은 다른 원인이 크게 작용했을 수도 있다고 합니다.

Dynamic Vision Transformers

Transformer 구조나 MLP만 사용한 구조 모두 나중에는 CNN을 대체할 수도 있을 것 같다는 생각을 했습니다. 하지만 완전히 대체하는데 발생하는 여러가지 문제 중 하나가 바로 1D sequence로 input을 넣어주는 부분이 아닐까 싶습니다.

1D sequence로 넣어주기 위해서 이미지를 N개의 token(patch)로 나눠서 넣어주는데, 이때 보통 이미지를 14라는 fixed size로 고정시킵니다. 하지만 모든 sample 들을 같은 크기의 token으로 넣어주는 것은 computational cost가 크고 좋지 않은 방법이라고 Dynamic Vision Transformers 논문에서는 말하고 있습니다. (token number에 따라 computational cost가 quadratically 증가합니다)

스크린샷 2021-06-06 오후 11.25.52

cascading multiple transformers with increasing # of tokens (coarse to fine represent)

위 그림과 같이 기존의 Vision Transformer는 그대로 쓰는데, input의 token number을 점점 늘려주면서 넣어줍니다. 만약 easy sample 이라면 token number 가 작아도 쉽게 좋은 판단을 할 수 있을 것입니다. 이러한 termination criterion을 만족했다면 바로 output을 내고, 아니라면 더 많은 token number을 갖고 다시 vision transformer를 통과시켜 믿을 만한 결정을 내렸는지 판단합니다. 이러한 방법으로 hard sample 들만 14 token size로 판단할 수 있는 것이죠.

input을 dynamic 하게 넣어준 것 외에도 downstream Transformer에서 이전 Transformer에서 학습한 relationship이나 feature 정보들을 활용할 수 있는 Relationship & Feature Reuse 방법들도 제안하였습니다.

기존의 fixed size input을 넣는 단점을 이런 방식으로 해결한 논문도 있다는 것을 설명드리고 싶어 가져온 논문 Dynamic Vision Transformer 였습니다.


Reference:
[1] ViT
[2] MLP-Mixer
[3] Dynamic ViT

Leave a comment