paper review: https://gaussian37.github.io/dl-concept-vit/

image processing 과정


vit.gif

Screen Shot 2022-09-18 at 5.58.12 PM.png

  1. 입력 이미지를 패치 단위로 쪼갠 후 각각의 패치를 순서대로 나열한다.

    $$ (N,P^2C)\\\;N=the\;number\;of\;patches\;,\\ P=the\;size\;of\;patches\;,\\ C=the\;number\;of\;channel\; $$

  2. 각각의 패치들을 벡터로 취급하여 행렬연산을 통해 벡터들을 Embedding을 해준다.

$$ (N,P^2C)\times(P^2C,D)\;=\;(N,D)_{embed} $$

  1. Embedding dimension 길이의 벡터(클래스 토큰 벡터)를 Embedding된 행렬에 더해준다.

$$ (N+1,D)_{embed} $$

  1. positional encoding을 추가하기 위해 동일한 크기의 행렬을 element wise로 더해준다.

$$ (N+1,D){embed}\;\bigodot\;\,(N+1,D){position}\;=\;(N+1,D) $$

  1. 이렇게 준비된 벡터는 Transformer encoder로 들어간 후 특정 수만큼 반복된다.
  2. 마지막 출력에서 클래스 토큰 벡터만을 추출한 후 MLP를 거쳐 클래스 분류를 실시한다.

🔗self attention

🔗positional encoding: