본문 바로가기
Artificial Intelligence/컴퓨터 비전 (CV)

[PyTorch] Vision Transformer(ViT) 논문구현

by 후안주안 2023. 2. 16.

Vision Transformer

  • Paper Implementation with PyTorch : "An image is worth 16x16 words: Transformers for image recognition at scale(2020)"
  • Code Practice : 아래 Colab 과 Git 링크를 통해 어떻게 구현되었는지 구체적으로 확인해 보실 수 있습니다.
  • Open In Colab
  • Generic badge

Description

Vision Transformer(ViT)는 CNN이 아닌 Transformer만을 사용하여 이미지를 분류합니다. 여기서 Transformer의 Self-Attention과 Self embedding을 차용했습니다. ViT의 메커니즘은 다음과 같습니다. 먼저 input 이미지를 패치 단위로 분할하고, 각 패치를 linear embedding 해줍니다. 다음으로, positianl embedding을 더해주고 결과 벡터의 시퀀스를 Transformer Encoder에 입력해줍니다.
이미지를 분류하기 위해 Classification token을 설계하고 sequence에 더해줍니다.

논문(Dosovitskiy, A. et al., 2020)에 따르면, 대량의 데이터(JFT-300M)에 대해 사전 학습한 후 작은 이미지 인식 벤치마크(imagenet, CIFAR-100, VTAB)에 적용하였습니다.그 결과 Vision Transformer(ViT)은 여타의 SOTA CNN 기반의 모델(ex.EfficientNet)과 비교했을 때 훌륭한 성능을 얻었을 뿐만 아니라 학습과정에서 계산자원을 좀 더 효율적으로 소모하였습니다.

1. ViT Architecture:

  • ViT Class : Patch Embedding, Classification Head, Transformer Encoder
  • Transformer Encdoer -> Transformer Encoder Block
  • Transformer Encoder Block -> Residual Add
  • Residual Add -> Multihead Attention, Feedforward Block(MLP layer)
    Figure 1. Vision Transformer Architecture : Dosovitskiy, A. et al. (2020)

2. Activation Function:

  • 논문에서 ReLU 함수가 아닌 GELU(Gaussian Error Linear Unit) 함수가 적용되었습니다.
  • GELU 함수는 dropout + zoneout + ReLU를 조합하여 개발한 activation function 입니다

3. Regularization:

  • 규제는 Dropout을 사용하였습니다.
  • Dropout = 0 in JFT-300 dataset
  • Dropout = 0.1 in Imagenet
  • for Paper Implementation: Dropout = 0 (CIFAR-10)

4. Image Preprocessing

  • 이미지 전처리는 다음과 같이 진행하였습니다.
  • Input image shape = 224x224x3
  • Resize image = 256x256
  • Random crop = 224
  • normalize by RGB channel (mean, STD)
  • Mean subtraction of RGB per channel

5. Hyperparameter:

  • 하이퍼파라미터는 다음과 같이 설정하였습니다.
  • Patch size = 16
  • Embedding size = 768
  • Number of heads = 8
  • Learning rate = 0.0001
  • Optimizer = Adam
  • Batch size = 128 for training, 64 for prediction
  • Epoch = 40

6. Test Results:

  • Test 결과는 Accuracy, Loss, Classification Report, Confusion Matrix로 확인해 보실 수 있습니다.

7. Dataset:

  • 개발환경의 제한으로 대용량 데이터셋을 사용하지는 못했습니다.
  • 논문 : ImageNet Large Scale Visual Recognition Challenge(ILSVRC), JFT-300M
  • 구현 : CIFAR-10

8. System Environment:

  • Goolge colab pro plus GPU : K80(Kepler), T4(Turing), and P100(Pascal)
  • Jupyter Notebook, Visual Studio Code

Reference

[1] "[Pytorch] ViT (Vision Transformer) 코드 구현", 한별요, 2022년 12월 22일 수정, 2023년 1월 25일 접속,
https://haystar.tistory.com/95.
[2] "[논문리뷰] Vision Transformer - An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale", 아기여우의 자기계발로그,
2021년 1월 9일 수정, 2023년 1월 25일 접속, https://littlefoxdiary.tistory.com/70.
[3] "Image classification with Vision Transformer", Khalid Salama, 2021년 1월 18일 수정, 2023년 1월 25일 접속,
https://keras.io/examples/vision/image_classification_with_vision_transformer/.
[4] "Vision Transformers from Scratch (PyTorch): A step-by-step guide", Brian Pulfer, 2022년 2월 4일 수정, 2023년 1월 25일 접속,
https://medium.com/mlearning-ai/vision-transformers-from-scratch-pytorch-a-step-by-step-guide-96c3313c2e0c.
[5] Dosovitskiy, A., Beyer, L., Kolesnikov, A., Weissenborn, D., Zhai, X., Unterthiner, T., ... & Houlsby, N. (2020). An image is worth 16x16 words: Transformers for image recognition at scale. arXiv preprint arXiv:2010.11929.https://arxiv.org/pdf/2010.11929.pdf
[6] Krizhevsky, A., & Hinton, G. (2009). Learning multiple layers of features from tiny images.http://www.cs.utoronto.ca/~kriz/learning-features-2009-TR.pdf
[7] "The CIFAR-10 dataset", Alex Krizhevsky's home page, 2009년 작성, 2022년 12월 28일 접속, https://www.cs.toronto.edu/~kriz/cifar.html.
[8] Ulhaq, A., Akhtar, N., Pogrebna, G., & Mian, A. (2022). Vision Transformers for Action Recognition: A Survey. arXiv preprint arXiv:2209.05700. https://arxiv.org/pdf/2209.05700.pdf
[9] "[논문] 최근 AI의 이미지 인식에서 화제인 "Vision Transformer"에 대한 해설", 두더지 개발자, 2020년 10월 16일 수정, 2023년 1월 25일 접속, https://engineer-mole.tistory.com/133.
[10]. Hendrycks, D., & Gimpel, K. (2016). Gaussian error linear units (gelus). arXiv preprint arXiv:1606.08415.

'Artificial Intelligence > 컴퓨터 비전 (CV)' 카테고리의 다른 글

[PyTorch] ResNet 논문구현  (0) 2023.02.12
[PyTorch] VGGNet 논문구현  (0) 2023.02.08
[PyTorch] GoogLeNet 논문구현  (0) 2023.02.07
[PyTorch] AlexNet 논문구현  (0) 2023.02.06

댓글