주제: 7-1 ViT (Vision Transformer와 Patch Embedding)

분류: vision

타입: concept

난이도: 중급

선수지식: 있음 — Self-Attention, Transformer, Linear Layer

ViT는 "이미지를 CNN처럼 보지 말고, 작은 패치들의 시퀀스로 바꿔서 Transformer에 넣자"는 아이디어다.

처음 보면 이 발상이 낯설지만, 핵심은 이미지를 완전히 다른 대상이 아니라 "시각 토큰들의 집합"으로 다시 해석하는 데 있다. NLP에서 단어를 token으로 다뤘듯이, ViT는 이미지 patch를 token처럼 다룬다.

문제 설정

기존 컴퓨터 비전 모델은 CNN을 사용했습니다.


Image → Conv → Conv → Conv → Classifier

하지만 Transformer가 NLP에서 성공하면서 다음 질문이 생겼습니다.

"이미지를 Transformer로 처리할 수 있을까?"

이 질문에 대한 답이 Vision Transformer (ViT)입니다.

즉 ViT는 convolution 중심의 inductive bias를 줄이고, 대신 충분한 데이터와 self-attention의 전역 문맥 처리 능력을 활용하려는 시도라고 볼 수 있다. 그래서 ViT를 이해하면 vision과 NLP 구조가 하나의 공통 프레임으로 이어진다는 감각도 잡힌다.

시각 자료로 먼저 보기

Vision Transformer 전체 처리 흐름
이미지를 patch로 쪼개고, 각 patch를 token처럼 임베딩한 뒤 Transformer encoder에 넣는 ViT의 전체 흐름이다.
원본 / 라이선스 · Daniel Voigt Godoy · CC BY 4.0
Vision Transformer 구조 요약 그림
CLS 토큰, positional encoding, encoder stack이 어떻게 연결되는지 더 압축된 형태로 보여주는 ViT 개념도다.
원본 / 라이선스 · d2l-ai 저자진 · CC BY-SA 4.0

1. 핵심 아이디어

ViT는 이미지를 작은 패치로 나누어 토큰처럼 처리합니다.


Image
 ↓
Patch Split
 ↓
Patch Embedding
 ↓
Transformer Encoder
 ↓
Classification

NLP와 동일한 구조를 사용합니다.

2. Patch Split

이미지를 일정 크기의 patch로 나눕니다.

예:


Image: 224 × 224
Patch size: 16 × 16

patch 개수:

N=(H×W)/P²

기호 의미

왜 필요한가

이미지를 Transformer가 처리할 수 있는 token sequence로 변환합니다.

주의점

patch 크기가 너무 크면 세부 정보가 손실됩니다.

3. Patch Embedding

각 patch를 벡터로 변환합니다.

flatten:

xp(P²·C)

embedding:

z0=xpWe

기호 의미

왜 필요한가

Transformer 입력 차원으로 변환합니다.

주의점

patch embedding은 사실상 linear projection입니다.

4. Positional Encoding

Transformer는 순서를 인식하지 못하기 때문에 위치 정보를 추가합니다.

z=z0+Epos

기호 의미

왜 필요한가

patch 위치 정보를 모델에 전달합니다.

5. Self-Attention

ViT는 일반 Transformer encoder를 사용합니다.

Attention(Q,K,V)=softmax(QKT/dk)V

기호 의미

왜 필요한가

이미지의 모든 patch 간 관계를 학습합니다.

주의점

attention 계산량은 O(N²)입니다.

6. Classification Token

ViT는 BERT처럼 CLS token을 사용합니다.


[CLS] + patch tokens

출력:

y=softmax(Whcls)

기호 의미

왜 필요한가

전체 이미지 정보를 하나의 벡터로 요약합니다.

7. 전체 ViT 구조


Image
 ↓
Patch Split
 ↓
Patch Embedding
 ↓
+ Positional Encoding
 ↓
Transformer Encoder
 ↓
CLS Token
 ↓
MLP Head

8. CNN vs ViT

특징 CNN ViT
연산 convolution self-attention
local bias 강함 약함
global context 제한적 직접 모델링

9. 계산 복잡도

attention 복잡도:

O(N²)

기호 의미

주의점

고해상도 이미지에서는 계산 비용이 증가합니다.

코드-수식 연결

개념 코드 설명
patch split torch.nn.Unfold() 이미지 패치 분할
patch embedding nn.Linear() patch → embedding
attention nn.MultiheadAttention() self-attention

자주 하는 오해 5개

체크리스트 (스스로 설명 가능해야 하는 질문)