ViT (Vision Transformer)
Transformer 구조는 NLP 분야에서 놀라운 성과를 보이며 사실상 표준으로 사용하고 있습니다.
이에 따라 CV 분야에서도 Transformer를 적용하려는 시도는 있었지만, 여전히 CNN 기반 모델들에 비해 성능이 떨어졌습니다. (Stand Alone Self Attention)
하지만, ViT는 새로운 접근 방식으로 이를 극복하고 CV분야에 성공적으로 적용시켰습니다.
Architecture
ViT의 전체적인 구조는 위 그림과 같습니다.
그림의 아래 부분의 입력 이미지를 Encoder에 넣어주기 전에 Transformer가 연산할 수 있도록 데이터를 변화해주는 작업( Input Embedding)을 진행합니다. Embedding 된 이미지는 Encoder에 들어가게 되는데, Encoder는 그림의 오른쪽 부분과 같이 Transformer의 Encoder 부분을 그대로 가져와서 사용합니다.
Patch Embedding
앞서 말했던 것 처럼 Tansformer Encoding에서 데이터를 연산하기 위해서는 특정 형태로 이미지 데이터를 변환해주어야 합니다.
입력 이미지를 여러개의 패치로 나누어주고, 이 패치들은 Linear Projection을 통해 Patch Embedding으로 만들어집니다.
1. 입력 이미지(H, W, C)를 나누어 N개의 Patch(P, P, C)를 만듭니다.
2. 각 Patch를 Linear Projection을 통해 D차원의 벡터로 변환합니다.
결과적으로, NxD 사이즈의 Patch Embedding이 만들어지게 됩니다.
Position Embedding
Patch Embedding을 그대로 사용하기에는 중요한 문제가 남아있습니다. 바로 Transformer는 Self Attention을 사용하기 때문에 Permutation Invariant 하다는 문제입니다. 쉽게 말하면, 입력 데이터의 순서가 바뀌면 Transformer는 알아차리지 못한다는 것입니다.
이러한 문제는 언어와 이미지 모두에 해당하는 것인데, Transformer는 이를 Positional Embedding을 사용하여 해결하였습니다. 쉽게 말해, 위치마다 고유한 값을 지정해서 입력 데이터에 이 위치 정보를 포함하는 아이디어입니다.
ViT 또한 Postional Embedding을 도입합니다. 하지만, Transformer는 '고정된' Positional Embedding을 사용하여 학습이 진행되는 동안 변경되지 않지만, ViT에서는 학습 가능한 Positional Embedding을 사용합니다. 즉, 학습을 통해 적절한 Positional Embedding 벡터를 찾겠다는 의미입니다.
Class Token Embedding
ViT의 목적은 추출한 Feature를 가지고 Classification을 진행하는 것입니다. 단순히 Classification Layer를 추가하여 Cross Entropy Loss로 학습하면 되겠지만, ViT에서 추출된 Feature의 크기는 매우커서 연산하기가 힘듭니다. 따라서 ViT에서는 BERT에서 사용되었던 [CLS] 토큰을 활용하는 방법을 채택했습니다.
Class Token Embedding 벡터는 해당 입력 이미지의 클래스 정보를 함축하고 있는 벡터를 의미합니다. 이 벡터 또한 학습을 통해 찾아냅니다. 먼저 임의로 초기화한 1xD 사이즈의 벡터를 Patch Embedding의 가장 앞에 추가하고, Positional Embedding과 결합하여 학습을 진행하게 됩니다. 학습을 진행하면서 Self Attention 가중치는 학습 데이터의 상호 관계를 파악할 수 있고, 학습이 완료되면 해당 이미지를 분류하기 위한 정보를 포함하게 됩니다.
Input Embedding
위에서 설명한 Patch Embedding, Positional Embedding, Class Token Embedding을 결합하여 최종적으로 Input Embedding으로 구성합니다.
연산 과정
\(MSA\) : Multi Head Self Attention, \(LN\) : Layer Normalization, \(MLP\) : Multi Layer Perceptron
(1) : Input Embedding을 만드는 과정입니다.
(2) : Transformer에 해당하는 수식입니다. 이전 입력 값을 Layer Normalization한 후, Multi Head Attention을 적용합니다. 그리고 해당 값을 Skip Conntection 합니다.
(3) : Transformer에서 나온 값을 Multi Layer Perceptron에 통과시킵니다.
Inductive Bias
Inductive Bias는 귀납적 편향, 의도된 편향으로 불리며 모델이 학습하지 않은 새로운 데이터에 대해 일반화할 때 사용하는 가정이나 제약 조건을 의미합니다.
CNN은 다음과 같은 특성으로 인해 강한 Inductive Bias를 가지고 있습니다.
1. 지역성(locality) : 인접한 픽셀들이 관련 있을 가능성이 높습니다.
2. 평행 이동 불변성(translation invariance) : 특징이 이미지 내 어디에 있는 동일하게 인식합니다.
3. 계층적 구조 : 저수준(low level)에서 고수준(high level)으로 점진적으로 학습합니다.
이러한 가정 덕분에 CNN은 적은 데이터로도 이미지를 잘 이해할 수 있었습니다.
하지만, ViT는 이러한 Inductive Bias를 버리고 각 Patch 사이의 관계를 자유롭게 해석합니다. 따라서, 다양한 패턴을 자유롭게 학습할 수 있고, 이미지 전체를 한번에 고려할 수 있습니다. 하지만, 이를 제대로 학습하기 위해선 많은 데이터가 필요로 하게 되고 모든 Patch를 서로 비교하다 보니 계산량이 늘어나게 됩니다.
Hybrid Architecture
논문 저자는 CNN을 사용하여 Feature를 추출하고 이를 Patch Embedding을 사용하는 방법으로 CNN과 Transformer를 결합 할 수 있다고 합니다.
Fine Tuning and Higher Resolution
ViT는 보통 아주 많은 데이터로 Pretrain을 진행하고 특정 Task에 맞추어 Fine Tuning을 진행하여 사용합니다. 이러한 이유는 Inductive Bias가 적어서 아주 많은 학습 데이터가 필요하기 때문입니다.
그리고 가끔 학습한 해상도보다 더 큰 해상도로 Fine Tuning 하면 성능이 더 좋아지는 경우가 있다고 논문 저자는 제시했습니다.
하지만 당연하게도, 입력 사이즈가 달라지면 패치 개수가 달라지게 되고 학습한 Positional Embedding이 소용없어질 수 있습니다. 이를 해결하기 위해 저자들은 앞서 학습한 Positional Embedding을 Interpolation해서 사용하는 방법을 사용했습니다. 즉, 저해상도의 이미지를 고해상도의 이미지로 변환할 때 생기는 공간(공백)을 고려하여 Positional Embedding를 계산하는 방법입니다.
Experiments
SOTA
전이 학습 평가를 위해 각 데이터셋 별 ViT 모델과 기존 전이학습 SOTA 모델(BiT-L, Noisy Student)과의 성능 비교입니다.
Fine Tuning을 각각 3번 진행하고 정확도의 평균과 표준편차를 계산하여 정확도를 평가했습니다.
ViT의 경우 모델 파라미터 수가 증가하고, 데이터셋의 크기가 증가할 수록 성능이 증가하는 것을 확인할 수 있습니다.
Pre-training Data Requirements
ViT는 Inductive Bias가 CNN보다 부족하기 때문에 사전학습 데이터셋 크기가 클 때 좋은 성능을 보임.
Conclusion
Image Recognition 분야에 Transformer를 성공적으로 적용한 사례에 해당한다.
이미지의 각 부분을 독립적으로 보는 것이 아니라 전체 이미지의 문맥을 고려하여 정보를 처리하기 때문에 복잡한 시각적 관계나 패턴을 파악하는 데 매우 좋을 것으로 보인다. 많은 데이터를 사용할 수 록 더 높은 성능을 낼 수 있다는 장점이 있지만, 작은 데이터를 가지고 있는 한정적인 자원에서는 좋은 성능을 낼 수 없다는 한계가 있다. 또한, 이미지에 대한 관계를 모두 계산해야 하기에 계산 복잡도가 높아 학습하는 데 필요한 비용이 많이 든다는 단점도 있다.
참고
[1] https://arxiv.org/pdf/2010.11929
[2] https://ffighting.net/deep-learning-paper-review/vision-model/vision-transformer/
[3] https://daebaq27.tistory.com/108
'Paper Review' 카테고리의 다른 글
[SSD] Single Shot MultiBox Detector (0) | 2024.07.16 |
---|---|
[YOLO v1] You Only Look Once: Unified, Real-Time Object Detection (0) | 2024.07.15 |
[EfficientNet] Rethinking Model Scaling for Convolutional Neural Networks (0) | 2024.07.11 |
[SENet] Squeeze and Excitation Networks (0) | 2024.07.10 |
[MobileNet] Efficient Convolutional Neural Networks for Mobile Vision Applications (0) | 2024.07.10 |