Vision Transformer
- Paper Implementation with PyTorch : "An image is worth 16x16 words: Transformers for image recognition at scale(2020)"
- Code Practice : 아래 Colab 과 Git 링크를 통해 어떻게 구현되었는지 구체적으로 확인해 보실 수 있습니다.
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 |
댓글