논문 리뷰
[논문리뷰] An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale
y_unique
2025. 1. 24. 16:41
728x90
진짜진짜 오랜만에 돌아온 논문리뷰
ViT를 가지고 왔습니당
정확하지 않으며 제 생각이 많이 들어간 글이라는 점..
인지하시고~
설 연휴 직전이걸랑요
새복많입니다.
Abstract
- nlp에서 transformer가 자리를 잡는 동안 cv에선 한계가 있었음
- cnn 구조를 가져가면서 attention을 적용하거나 전체 구조는 유지해야만 했음
- 저자는 pure transformer에 직접적으로 Image patch를 붙여 image classification을 수행하도록 함
- 많은 양의 데이터로 pre-trained 되었거나 imageNet 등의 인식 벤치마크로 trnasfered 한 경우 sota 달성
- 대체로 fewer computational resources
Introduction
- CNN architecture with self-attention의 경우 이론적으론 효율적이지만 하드웨어적으로 아직 가속화되지 못했다
- so transformer directly to image
- image into patches
- provide the sequence of linaer embeddings of patches ← input?
- supervised
- 하지만 mid-sized datasets such as ImageNet without strong regularization
- ResNet보다 낮은 성능
- → trnasformer는 CNN이 가지는 inductive bias가 부족해!!!
- trnaslation equivariance or locality
- 그래서 충분한 데이터가 있어도 잘 일반화되지 않음
- 근데 lager dataset으로 하니까 성능이 높아짐
- inductive bias가 좀 부족한 점을 이겨버린거지
Method
Vision Transformer
- input : 2D image를 다루기위해 flatten
- standard transformer input : 1D
- (C, H, W) → (P, P) 패치로 N개로 자름
- P는 hyperparmeter (ex 14, 16, 32 등)
- linear projection 수행하여 D인 벡터의 시퀀스로 차원 변경
- CLS token
- BERT’s class token과 유사
- 이때 CLS 토큰은 문장의 전체 표현을 나타내는데 사용
- leanable embedding sequence 를 앞에 붙임
- 얘도 이미지 전체의 representation을 학습하는데 사용
- 이는 pretraining, finetuning 단계에서 classification 하는데 사용
- pretrain → 하나의 hidden layer를 포함한 MLP로 구성
- finetuning → single linear layer (특정 작업에 fit 되도록)
- BERT’s class token과 유사
- position embedding
- to position information
- transformer는 입력 시퀀스의 위치 정보는 담을 수 없었기에
- image patch를 입력으로 사용하니까 각 패치에 위치임베딩을 더함
- 2D-aware position embedding 을 하면 성능 향상이 크지않았음 ⇒ 왤까?
- → 1D 를사용
- 이는 encoder input으로 사용
- to position information
- transformer encoder
- multihead-self-attention and MLP의 attention layer
- 모든 블록 앞에 LN
- 모든 블록 후에 residual connection
- MLP는 GELU (none-linearity)
- inductive bias
- ViT는 CNN에 비해 inductive bias가 적음
- CNN
- locality
- two-dimensional neighborhood structure
- translation equivariance
- 이미지가 다른 위치로 이동해도 동일한 특징을 감지할 수 있음
- ViT
- MLP layer만 locality + translation equivariant
- 왜?
- 패치가 독립적으로 계산되니까?
- 여기서 MLP는 position-wise FFN 이기때문에 각 토큰에 동일한 weigt 적용 → 1x1 conv를 적용하는 것과 동일
- 왜?
- 초기화에서 position embedding은 2차원에 대한 정보가 포함되지 않음
- 패치간 모든 공간적 관계는 scrach부터 학습해야함
- MLP layer만 locality + translation equivariant
- Hybrid Architecture
- CNN feature map을 input으로?
- 패치 크기가 1x1인 경우
- feature map을 flatten 후, transformer 차원으로 투영 시킨 것과 같다?
- 그냥 이미지의 feature map을 일반적으로 flatten 하는 것과 같은거임
- 패치 크기가 1x1 이면 feature map 전체를 보는 것과 같으니까
Fine-tuning and higher resolution
- pretrain large datatsets and fintuned downstream task
- pretiain 보다 높은 해상도를 사용하는 것이 유리.
- 패치 크기는 동일하게 유지 → 더 긴 시퀀스 길이가 생성됨…
- 아하.. 피자 10개를 셋이먹냐 20개를 셋이먹냐 이런건가
- 근데 입력 시퀀스가 길어지면 좋아요?.. 성능 향상이랑 무슨 관계지
- 일단 패치 크기가 동일한데 입력 size가 커지면 패치가 늘어날 것 -> 입력 시퀀스가 길어짐
- 해상도가 높아진다는 관점에서 성능에 영향을 미칠 것이라고 생각
- 패치 크기는 동일하게 유지 → 더 긴 시퀀스 길이가 생성됨…
- fintuning 시에 position embedding이 의미가 없다?
- pretrain 과 비교했을 때 해상도가 바껴서 의미없다고 생각함
- 2D 보간으로 새로 맞춤
- 근데 위에서 무슨 2D로 하면 성능 향상이 적어서 1D로 한다하지않았나
⇒ 위 두 과정이 (패치추출, 해상도 조절) 2D 구조에 대한 inductive bias를 주입하는 효과
Experiment는 리뷰에서 잠시 생략하도록 할게요.
논문을 읽고!
온전히 나의 생각 ....
그래서 ViT가 CNN보다 좋은 게 뭘까?
- Self-attention 메커니즘
- CNN은 Local filter를 사용하여 이미지를 처리해 작은 receptive field에서 feature를 추출
- 하지만 ViT는 attention 연산을 통해 이미지 전체의 global한 feature를 한 번에 학습할 수 있다
- dataset
- ViT는 짱짱 대규모 dataset을 사용하여 뛰어난 성능을 발휘함
- 높은 model capacity를 활용할 수 있다!
- 유연한 architecture
- 뭔가 CNN은 filter, stride 등 어떤 도메인에 특화된 hyperparmeter들이 있다면 비교적
- ViT는 아키텍처 관점에서 그 제약이 적다고 생각
- 그래서 다른 데이터 type에 유연하게 적용될 수 있다?
- hadware efficiency
- transfomer 기반 아키텍처는 병렬처리니까 하드웨어에서 효율적일것
ViT의 contribution이 뭘까?
- transformer를 vision task에 도입했다는 점
- 이전까지 transformer는 nlp task에서 사용됨
- patch embedding
- 이미지를 패치단위로 나누고 각 패치를 linear projection에 태운 후 transformer input으로 변환함
- 이미지를 transformer로 처리할 수 있었던 가장 큰 부분이라고 생각