AI/컴퓨터비전(CV)

[CV 논문] An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale

CSE 2026. 1. 7. 09:00

 

 

아래 글에서 이 블로그에서 리뷰한 논문들의 흐름과 분야별 분류를 한 눈에 볼 수 있다.

읽은 논문들 정리

 

이 논문은 ViT라고 부르는, 트랜스포머를 이미지에 적용시킨 기술에 대한 논문이다.

이 논문은 아래 링크에서 볼 수 있다.

https://files.ryancopley.com/Papers/2010.11929v2.pdf


1. Introduction

Transformer의 탄생이후 NLP분야에서는 이것이 대세가 되었다.

CNN방식을 버리고 아예 transformer를 CV분야에 적용해보려는 시도이다.

이미지를 격자로 쪼개, 각 구역이 하나의 토큰(단어)인 것처럼 동작시킨다.

작은 규모의 데이터셋에서 실험했을 때는 ResNet보다 안좋았지만, 

대규모 데이터셋에서는 최고성능을 기록했다.

 


3. METHOD

2. Related Work는 생략하고 바로 ViT구조를 설명하는 부분으로 넘어가자.

이 논문에서는 기존 트랜스포머를 최대한 가깝게 따라가려고 했다.


3.1. VISION TRANSFORMER (VIT)

일단 모델의 구조는 아래와 같다.

기존 트랜스포머와 다르게 decoder는 없고 대신 MLP Head라는 간단한 분류기로 대체되었다.

 

원래 transformer는 단어들의 1차원 나열을 입력으로 받는다.

하지만 이미지는 2차원이다.

따라서 이미지를 $P \times P$크기의 patch라는 단위로 쪼갠 후 처리한다.

총 patch의 개수는 $\frac{HW}{P^2}$가 되고 이를 flatten한다.

결과적으로는 $P^2 \times C$크기를 갖고 있는 patch가 N개 있는 행렬이 된다.

 

transformer논문 리뷰 글에서 입력을 512차원으로 다뤘던 것을 기억할 것이다.

여기서도 $P^2 C$의 크기가 $D(=512)$와 다를 수 있기 때문에 차원을 맞춰주기 위해 linear projection을 해준다.

따라서 $N \times D$의 행렬이 입력으로 들어간다.

 

그 이후는 transformer와 똑같다.

 

BERT의 방법에서처럼 패치들의 시퀸스 앞에 학습가능한 class라는 이름의 벡터 하나를 추가로 붙인다.

따라서 전체 입력은 $(N+1) \times D$이다.

이 패치는 실제 이미지는 아니고 똑같이 신경망에 입력으로 들어간다.

encoder를 거친 이 가장 처음의 패치는 MLP Head로 들어가 분류에 사용된다.

 

이미지를 패치로 나누게 되면 위치 정보가 사라진다.

따라서 Positional embedding을 더해준다.

차원을 맞춰야 더해지므로 $(N+1) \times D$의 차원을 가진다.

 

식으로 알아보자.

입력으로 넣을 $z_0$행렬을 만든다.

앞에 $x_{class}$를 추가하고, 각 패치들($x^1_p, x^2_p...$)에 $E$을 곱해 $D$차원으로 만들어준다.

이후 방금 설명한 positional embedding을 더해준다.

 

(2),(3)식은 encoder를 반복하는 식이다.

아래 그림의 과정을 식으로 나타낸 것이다.

LN이 층 정규화(그림:Norm)이고, MSA는 Multi-Head attention을 의미한다.

기존 트랜스포머는 연산 후 Norm을 했는데 여기는 거꾸로 되어있다. 

층이 깊어질수록 이게 더 좋다는 것을 알게 되었기 때문이다.

 


 

 

CNN은 "가까운 픽셀끼리 연관이 있다."와 "특징은 위치가 바뀌어도 똑같다"는 규칙이 모델에 들어있다.

하지만 ViT는 여러층을 거치지 않고도 이미지 끝과 끝의 관계를 바로 볼 수 있다.

이후 패치 간의 관계는 처음부터 스스로 학습한다.

 

이런 특징 때문에 CNN보다 더 많은 데이터가 필요하지만, 더 많기만 하면 정해진 규칙이 아닌 그 외의 규칙도 스스로 찾아낼 수 있으므로 성능이 더 좋다.

 

CNN과 섞어 쓰는 Hybrid Architecture도 있다.

CNN을 통과해 나온 특징 맵을 패치로 취급해 학습시키는 방법이다.

CNN의 로컬 정보 추출 능력으로 데이터 셋이 조금 작을 때 ViT보다 좋은 선택일 수 있다.

 


3.2. FINE-TUNING AND HIGHER RESOLUTION

ViT는 보통 큰 데이터셋으로 먼저 사전학습(pre-training) 하고 작은 실제 과제(downstream task) 에 맞게 파인튜닝한다.

NLP에서 BERT 쓰는 방식이랑 완전히 동일한 전략이다.

 

학습 때 썼던 head는 제거하고 $D\times K$레이어를 새로 붙여 학습한다.

파인 튜닝시에는 데이터가 적기 때문에 해상도를 높여서 주면 더 좋다.

해상도를 높일 때 패치의 크기는 유지하고, 따라서 개수가 늘어난다.

트랜스포머 구조상 이렇게 개수가 늘어나는 건 상관없기 때문에 적용가능한 방법이다.

 

하지만 문제는 N이 바뀌기 때문에 positional embedding의 차원이 맞지 않는 것이다.

따라서 positional embedding을 2D 격자로 보고 보간(interpolation) 해서 새 해상도에 맞게 늘려쓴다.


4. Experiments


4.1. SETUP

ImageNet(1.3M), ImageNet-21k(14M), JFT-300M(303M)의 세가지 데이터 셋을 사용했다.

또 BERT의 설정을 따라 아래처럼 세 가지의 모델을 정의했다.

아래에서 ViT-L/16 같은 모델이름이 나올텐데, 이는 Large모델에 16x16의 패치 사이즈를 사용한 모델이라는 의미이다.

 

adam optimizer를 사용하고 배치 사이즈는 4096으로 했다.


4.2. COMPARISON TO STATE OF THE ART

JFT-300M으로 사전 학습된 ViT-H/14 모델은 당시 최고 수준의 CNN 모델인 Noisy Student(EfficientNet-L2)와 BiT-L을 모든 벤치마크에서 능가했다.

이게 놀라운 점은 계산 자원을 기존의 1/4정도밖에 사용하지 않았다는 것이다.

 


4.3. Pre-training Data Requirements

저용량 데이터(ImageNet)에서 보듯 데이터가 적을 때는 ViT가 ResNet(CNN)보다 성능이 낮다.

이는 CNN이 가진 '이미지 특화 지식(Inductive Bias)'이 없기 때문이다.

고용량 데이터(JFT-300M)처럼 데이터가 많아질수록 ViT의 성능 향상 폭이 CNN을 압도하며 역전이 일어난다.

결론 : 대용량 학습이 Inductive Bias를 이긴다.


4.4. Scaling Study

동일한 Compute budget 내에서 ViT는 ResNet보다 일관되게 더 높은 성능을 보여준다.
Hybrid 모델: 아주 작은 모델 사이즈에서는 CNN을 섞은 하이브리드 모델이 살짝 좋았으나, 모델이 커질수록 순수 ViT와 차이가 사라졌다.


4.5. Inspecting Vision Transformer

Linear Projection: 첫 번째 층에서 학습된 필터들을 시각화해보니, CNN의 초기 필터들처럼 경계선이나 색상을 파악하는 Basis functions들이 학습되었다.

여기서 필터는 $E$행렬을 다시 이미지화 한것을 얘기한다(왼쪽그림).

Position Embeddings: 학습된 위치 임베딩 간의 유사도를 보면, 실제 이미지상의 거리(가까운 패치는 가깝게, 행/열 구조 등)를 모델이 스스로 깨우쳤음을 확인했다(가운데그림).

Attention Distance: 모델의 낮은 층에서도 일부 헤드는 이미지 전체를 넓게 보고 있음을 발견했다(오른쪽그림).

이는 CNN이 초기에 아주 좁은 영역만 보는 것과 대조적인 ViT만의 강력한 특징이라고 할 수 있다.


<요약>

이미지를 격자 형태의 패치로 나누어 '단어'처럼 취급함으로써, CNN의 구조적 도움 없이 순수 Transformer만으로도 세계 최고 수준의 이미지 인식 성능을 달성할 수 있음을 증명하며 컴퓨터 비전의 패러다임을 바꾼 논문


핵심 포인트

1. 문제 : CNN에 대한 의존성과 연산 효율성

그동안 비전 분야는 CNN의 구조적 특성(Inductive Bias)에 의존해 왔으며, 어텐션을 적용하려는 시도들도 픽셀 단위 연산으로 인한 기하급수적인 연산량 증가 때문에 고해상도 이미지 처리에 한계가 있었다.

 

2. 해결 아이디어 : 패치로 쪼개 단어처럼 취급하기

이미지 전체를 한꺼번에 보는 대신, $16 \times 16$ 크기의 패치로 쪼개어 나열함으로써 이미지를 하나의 '문장'처럼 변환했다. 이를 통해 복잡한 CNN 설계 없이도 자연어 처리용 표준 Transformer를 그대로 이미지 인식에 적용할 수 있게 되었다.

 

3. 해결 구조 : Patch Embedding & [class] Token

쪼개진 패치들을 선형 투영(Linear Projection)을 통해 $D$차원 벡터로 만들고, 맨 앞에 이미지 전체 정보를 요약할 수 있는 학습 가능한 [class] 토큰을 추가했다. 여기에 1D 위치 임베딩을 더해 패치 간의 공간적 관계를 모델이 스스로 배울 수 있도록 설계했다.

 

4. 핵심 발견 : Scale over Inductive Bias

CNN이 가진 이미지 전용 지식(지역성 등)은 데이터가 적을 땐 유리하지만, 데이터가 압도적으로 많아지면 오히려 제약이 된다. ViT는 대규모 데이터셋(JFT-300M 등)에서 학습할 때 이러한 제약 없이 더 자유롭고 강력한 특징을 학습하여 CNN의 성능을 추월한다.

 

5. 성능

당시 최고 성능의 CNN 모델(BiT, Noisy Student)보다 더 적은 연산 자원을 사용하면서도, ImageNet 등 주요 벤치마크에서 SOTA(State-of-the-Art)를 달성했다. 이후 이 구조는 영상 인식뿐만 아니라 비전 분야 전반의 표준 백본(Backbone)으로 자리 잡았다.