VIT(Vision Transformer) 논문리뷰
논문리뷰

VIT(Vision Transformer) 논문리뷰

728x90

이번 포스팅은 이전에 작성한 Transformer 기술을 이미지에 적용한 논문인 Vision Transformer 논문에 대한 기술을 설명하려고 한다.

- 아래는 ViT논문 원본링크

https://arxiv.org/pdf/2010.11929.pdf

 

요즘 Vision 분야의 Sota의 대부분이 이 논문을 기반으로 하고 있다. 

기존 CNN 네트워크보다 더 좋은 성능을 보여주고 있다.

 그럼 ViT논문인 AN IMAGE IS WORTH 16X16 WORDS : TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE논문에서 이미지를 어떻게 Transformer에 적용했는지 중심으로 리뷰를 시작한다.

 

Vision Transformer (ViT) 이란?

기존에 Transformer 기술은 자연어 처리(NLP) 분야에 만이 사용되었는데 이 기술을 이미지에 적용하는 방법론

원래의 이미지 처리기술에서는 CNN 구조를 기반으로 되어있었는데 Transformer Encoder의 Attension구조를 사용해서 구현하였다. 놀랍게도 기존 CNN구조보다 더 좋은 성능을 나타냄. 하지만 대용량일 경우에 효율적이라고 한다 좀 더 자세히 아래에서 알아보겠다.

ViT 네트워크 구조 및 설명

논문에서는 NLP분야의 Transformer Encoder부분(Self-Attention)을 응용했다.

논문에서 강조하는 메세지는 Vision분야에서 CNN을 이용하지 않고도 충분한 퍼포먼스를 낼 수 있다는 점을 제시했다.

하지만 단점 또한 존재하는데, 충분한 데이터 셋으로 pretrain하고 target 도메인에 Fine-tuning해야 성능을 제대로 발휘한다는 점이다. 즉, 많은 데이터가 필요함

1. Image Patch 

이미지를 Encoder에 Input시키기 위해 1D 임베딩 작업이 필요하다. 논문에서는 먼저 이미지 패치를 만들어 1D 임배딩을 만들어 나간다.

예를들어, (300,300,3) 이미지를 (100,100,3)이미지 9개로 자른다.

2. Patch Embedding 

패치화된 이미지를 1D로 임배딩하는데 이때 Patch Embedding 이라는 작업을 한다.(Linear Projection)

예를 들면, (100,100,3)로 이미지 패치한 픽셀을 일렬로 이어 붙여서 (1, 100x100x3)인 1D input값을 생성한다.

3. Class token

이 Class token 방법은 BERT의 CLS token과 유사하다.  논문에서는 임베딩된 patch 앞에 하나의 학습가능한 Class token을 추가했다.

이 Class token은 Encoder의 여러층을 거쳐 최종 output이 나왔을 때, 이미지에 대한 1차원 representation vector로써 역할을 수행한다.

(BERT에 대해 공부하면 더 이해가 쉬움 -> https://wikidocs.net/115055)

4. Position Embedding

이 내용은 이전 Transformer의 내용과 동일하기때문에 간단하게 설명하고 넘어간다. 내용학습이 필요하면 아래 링크에서 확인

(https://zeuskwon-ds.tistory.com/87)

Position Embedding은 1차원으로 만들어진 임베딩 벡터에 순서 정보를 부여하기 위한 방법론이다.

5. Encoder

이 부분의 상세내용도 위 블로그에서 확인가능하다.

이렇게 임베딩된 1D input값을 Encoder에 입력값으로 사용하고 기존 Encoder의 Self-Attention방법을 여러번 실행하고 output을 출력하게 된다.

출처 - https://wikidocs.net/137253

위 그림처럼 출력된 값은 일반적인 CNN Image Classfier와 동인하다.

특이한 것은 Class token을 사용한다는 점이다.

앞서 말했듯 Class token이 Transformer의 여러 encoder층과 Layer Normalization을 거쳐 최종 output, y가 나왔을 때,
이 y가 이미지에 대한 1차원 representation vector로써의 역할을 수행하기 때문이다.

 

MLP는 y를 Flatten한 후 단순 Linear Layer를 통과시켜 Classification을 수행한다.

ViT 실험

ViT 논문에서의 목표는 더 낮은 Pre-Training 비용으로 SOTA 달성하는것과 Self-Supervision 실험을 진행하는 것이다.

사전학습데이터 셋은 ImageNet-1k(1.3M), ImageNet-21k(14M), JFT-18k(303M)을 사용했고, 작은 데이터 용량부터 큰 용량까지 사전학습된 모델을 제시했다. 

ViT 모델은 아래 그림처럼 설정했다.

3개의 모델 사이즈를 설정해서 실험을 진행했음

학습에 사용된 Hyper-Parameter는 Optimaizer(Adam), Batch Size(4096), Weight Decay(0.1)로 모델학습 진행

비교대상은 BiTNoisy Student - Semi-Supervised Learning을 적용한 Large EfficientNet을 비교대상으로 삼았다.

비교 결과는 아래와 같다.

모든 이미지에 대해서 ViT의 성능이 더 우수한 결과를 보였다.

사전학습시 데이터 셋이 클수록 ViT 성능이 좋게 나온다. 사전학습 데이터가 작으면 오히려 CNN계열인 ResNet보다 성능이 안나온다는것을 확인할 수 있음

ViT 모델 확인

1번째 이미지는 Embedding Filter를 확인할 수 있는 그림.

가운데 그림은 Position Embedding을 나타내는 이미지 ViT에서는 Prijection 후 Position Embedding을 Patch Representation에 추가함

위 이미지에서 ViT로 이미지의 Feature 추출한 결과를 보여줌

 

이렇게 ViT논문의 리뷰를 마치며 Vision분야 역시 Transformer 기술이 적용되면서 ViT의 단점에도 불구하고, 상대적으로 Pre-Train 비용이 적기 때문에 추후 많은 논문에서 Transformer를 적용한 vision기술이 나올것으로 예상된다.

 

728x90