요약

 


ViT(Vision Transofmer)은 자연어처리(NLP)분야에서는 성공적인 성능을 보이는 트랜스포머(Transfomer)을 컴퓨터 비전까지 적용하기에는 제한이 있어왔는데, 이를 시도한 사례이다. 트랜스포머에서 각 토큰을 임베딩하여 샐프 어텐션(Self-attention)하는 것과 같이, 각 토큰을 이미지로 생각하여 트랜스포머의 인코딩에 전달하는 것이 이 모델의 골자이다.

 

Vision Transformer의 시각화. 각 이미지를 1부터 9까지 패치를 만든다음에, 각 패치를 단어처럼 취급해서 임베딩한다. 임베딩할때는 0, 1, 2와 같이 이미지 패치가 어디서부터 기원했는지에 위치정보를 더해주는 포지셔널 인코딩(positional encoding)과 유사하게 패치 위치를 가리키는 벡터도 포함한다. 이를 트랜스포머의 인코딩에만 전달하면 ViT의 완성이다. GIF 출처: https://en.wikipedia.org/wiki/Vision_transformer#/media/File:Vision_Transformer.gif

 

 

모델 아키텍처 설명


본문에서는 별 다른 수정없이(with the fewest posiible modification) NLP에 쓰이던 트랜스포머를 영상처리에도 쓸 수 있다고 소개한다. 그림은 아래와 같다. 큰 순서는 다음과 같다. 1) 이미지를 잘게 자른 패치(Patch)로 N개의 패치를 만든다. 2) 패치를 Flatten하게 벡터화한다. 3) 벡터화한 이미지를 선형으로 결합하여 임베딩한다. 4) 임베딩된 결과에 클레스를 예측하는 클래스 토큰을 더해준다. 그리고, 포지셔널인 임베딩을 더해주어 패치의 위치를 더해 연산한다. 

 

 

자세히는 아래와 같다.

1) 이미지를 잘게 자른 패치(Patch)로 N개의 패치를 만든다. 원래 이미지가 H, W에 C채널 이미지인 것으로 고려한다. 컬러가 R, G, B였다면 C는 3이고, (1024, 1024)의 HD 이미지면 H는 1024, W은 1024값을 갖는다. 이런 이미지를 겹치지 않게(Not overlapping) N개의 정사각형 패치로 나눈다. 패치의 크기는 P이고, 개수는 N개이다. 이 때, 당연히, N개의 개수가 정수형이어야하고, 이미지와 맞아떨어져야하므로, $N=HW/P^{2}$으로 계산해야한다. C개의 채널을 가진 가로,세로가 각각 P인 패치를 그러면 N개를 생성하게 된다. 이렇게 만든 패치를 Flatten하여 원소의 길이가 $P*P*C$인 벡터를 얻는다. 이 벡터가 그리고 N개가 있다.

 

가로(W), 세로(H), 채널 수(C)개의 이미지를 가로(P), 세로(P)인 N개의 패치(작은 이미지)로 나눈다. 그리고 이 이미지를 Flatten한다. $\times$은 메트릭스와 같이 차원이 있다는 얘기기고, "."은 그냥 차원이 없다는 의미이다.

 

2) 각각의 패치를 각각 선형결합하여 임베딩시킨다: 각 패치를 선형결합시켜서(Dense layer을 통과시켜) 원소의 길이가 D인 벡터를 만든다. 이 단계가 $\mathbb{R}^{P^{2}C} \cdot \mathbb{R}^{P^{2} C \times D}->\mathbb{R}^{D}$에 해당한다. Linear projection을 해서 원소의 개수가 D개인 벡터를 만드는 단계이다.

 

3) 각 임베딩한 원소를 concat하고 포지션임베딩을 더해준다.: 각 원소의 길이가 D개인 벡터를 모두 concat해서 길게 만든다. 가령 N개의 패치에 D개의 원소의개수를 가진 벡터로 패치를 선형결합시킨 결과를 얻었다고하면 $N \times D$의 차원의 메트릭스를 얻게된다. 거기에 하나를 더해서 클레스임베딩($x_{class}$)을 정의하여(\mathbb{R}^{D}) 더 concat해준다. 결과적으로 $\mathbb{R}^{(N+1)\timesD}$의 메트릭스를 얻게된다. 거기에 포지셔넝임베딩을 하나 정의하여 함께 더해준다. 이 포지셔널 임베딩의 크기는 $\mathbb{R}^{(N+1)\timesD}$ 와 같다.

 

 

4) Self-attention 및 정규화 단계(NL): Transformer와 같이 진행한다. 이미 위의 단계에서 충분히 이미지를 임베딩하였으니 Transformer의 일반적인 연산과정을 거친다.

 

 

 

CNN과의 비교?

위의 연산과정을보면, ViT도 CNN과 유사한 방식을 사용한다. 패치사이즈인 16x16, stride 16의 convolution을 하는것과 같이 진행한다.

  1. 가장 큰 차이는 CNN은 국소성(locality)가 있어서 각 특징값들을 픽셀 단위에서 특징값으로 잘 표현되는데, ViT은 Transformer이다보니, 이미지의 패치의 시리즈간의 연결성도 강조할 수 있다. 즉 좌측상단의 패치와 우측상단의 패치가 연관성을 이어줄 수 있다는 것이다. 이러한 분석방법이 더욱 픽셀단위의 중요성을 강조할 수 있다고 소개되어있다[1]. 
  2. 하지만 CNN별로 데이터가 엄청나게 많지 않아도 잘 학습되는 반면, Vision Transformer은 꽤 많은 양의 데이터를 필요로한다. 
  3. Inductive bias을 줄일 수 있다. CNN은 이미지를 다루기 위한 Inductive bias을 갖고있다. 가령 CNN은 학습해야하는 커널이 각 이미지영역을 훑고 지나가면서, 근소한 이미지 연관성이 크게 학습되도록 꾸며져있고(=이를  Locality(근접 픽셀끼리의 종속성)라 함). 또한, 패치가 여러 영역을 훑기 때문에, Translation Invariance(사물의 위치가 바뀌어도 사물을 인식)의 이 된다. 하지만, 이러한 CNN의 가정들(메커니즘 방식)보다 각 패치의 연관성을 글로벌하게 연관지어 학습하기 때문에 Inductive bias을 줄일 수 있다고 한다[2][3].

 

[1] https://en.wikipedia.org/wiki/Vision_transformer

[2] Raghu, Maithra; Unterthiner, Thomas; Kornblith, Simon; Zhang, Chiyuan; Dosovitskiy, Alexey (2021-08-19). "Do Vision Transformers See Like Convolutional Neural Networks?". arXiv:2108.08810.

[3] Coccomini, Davide (2021-07-24). "Vision Transformers or Convolutional Neural Networks? Both!"Towards Data Science.

[4] https://arxiv.org/pdf/2010.11929.pdf

 

Vision transformer - Wikipedia

From Wikipedia, the free encyclopedia Jump to navigation Jump to search A Vision Transformer (ViT) is a transformer that is targeted at vision processing tasks such as image recognition.[1] Vision Transformers[edit] Vision Transformer Architecture for Imag

en.wikipedia.org


 

반응형

+ Recent posts