-
abstract
- Transformer Architecture가 NLP tasks에서 사실상의 표준이 되었지만, Computer Vision 분야에의 적용은 아직 제한적이다.
- 따라서 우리는 CNN에 의존하지 않고도 Transformer만을 사용해 image classification task를 수행할 수 있음을 보여주려고 한다.
- 이미지를 image patches의 sequence로 처리하고, 대량의 데이터에 대해 pre-trained한 후 작은 image recognition benchmarks(ImageNet, CIFAR-100 등) 에 적용시킨다.
- 그 결과 Vision Transformer (ViT) 는 다른 모델과 비교해서 좋은 성능을 얻을 수 있었고, 동시에 computational resources를 현저히 적게 사용하였다.
-
Model
- 이미지를 고정된 크기의 patch로 쪼개고 각각 linear하게 embedding한 후 position embedding을 더해 결과 벡터를 transformer encoder의 입력으로 input한다.
- Classification task를 수행하기 위해 classification token을 만들어서 sequence에 추가한다.
-
Vision Transformer (ViT)
- 일반적인 Transformer는 token embedding에 대한 1차원 sequence를 입력으로 받는다. 따라서 2차원의 이미지를 다루기 위해 이미지를 flattened 2차원 patch sequence로 reshape한다.
- 즉 H W C를 N (P^2 C) 로 변환한다. H*W는 원본 이미지의 크기, C는 채널의 개수, (P,P)는 image patch의 크기이고 N = HW / P^2 은 patch의 개수이다.
- Transformer는 모든 레이어에서 고정된 벡터 size D를 사용하기 때문에 이미지 패치를 flatten한 뒤 D차원의 벡터로 linear projection 시킨다.
- 또한 BERT의 [CLASS] 토큰과 비슷하게 Embedding된 patch의 sequence에 z0 = x_class embedding을 추가로 붙여넣는다. 이후 나온 encoder output은 이미지 representation으로 해석해서 classification에 사용한다.
- 이는 위치 정보를 활용할 수 있도록 한 위치 embedding이다. 학습 가능한 1차원의 embedding을 사용하는데, 2차원 정보를 유지하는 위치 embedding도 활용해 보았으나 유의미한 성능 향상은 없었기 때문이다.
-
Result
성능은 유의미하게 뛰어나지만, pre-training 데이터가 적으면 성능이 안 좋아진다.