Title
- Swin Transformer: Hierarchical Vision Transformer using Shifted Windows
- Swin Transformer
논문 리뷰 시작에 앞서 고려대학교 산업경영공학부 dsba 연구실_허재혁님의 영상을 참고하면서 글을 작성한다는 점을 미리 말씀드립니다!
0. 논문을 읽기 전에 알면 좋을 것
Inductive Bias
- 모델이 데이터에 대해 가지고 있는 가정을 의미한다
- 모델을 잘 예측하기 위해 사전 정보를 통해 추가된 가정을 의미한다.
- 즉 학습하지 않은 데이터가 들어갔을 때 잘 예측하기 위한 가정
Inductive Bias가 부족하다는 것은?
- 모델이 주어진 데이터를 충분히 이해하지 못한 상태에서 일반화하기 어려운 상태
- 모델이 다양한 데이터를 학습하지 않아 새로운 데이터에 대한 예측력이 떨어지는 상태
왜 부족할까?
- 모든 input을 그대로 받아와 attention을 동시에 구해주기 때문임
- 그래서 다른 모델에 비해 Transformer 기반 모델은 self-attention or positional embedding을 통해 모든 정보는 활용하지만, inductive bias는 부족함.
Abstract
ViT 문제점
- 기존 ViT는 Classification Task를 위한 모델로 객체의 크기가 항상 일정하지 않음
- Image의 해상도가 증가함에 따라 계산복잡도가 커짐.
✅ 계산복잡도는 이미지의 크기의 제곱에 비례하기 때문에 연상량이 매우 증가한다는 문제점 가짐.
- Computer Vision에서 다양한 목적에 맞게 Backbone Network로 사용될 수 있는 Transformer Model 제안
- Transformer 구조에 이미지의 특성을 반영할 수 있는 방법 제안
✅ Shifted window를 사용하는 hierarchical(계층적인) Transformer 구조로 해결함
- 기존 ViT보다 적은 연산량을 갖는 방법 제안
✅ 기존 ViT는 이미지의 크기에 제곱에 비례했지만, Hierachical 구조의 경우 다양한 크기에 대해 유연하기 때문에 Linear하게 변함
✅ non-overlapping window내에 있는 patch 간의 self-attention을 수행함으로써 계산복잡도 개선
- 다양한 Computer Vision Task에서 좋은 성능을 도출함
1. Introduction
-
Text와 Image의 차이점
: 해상도(resolution) / 물체의 크기 (the scale of visual entities)
-
Swin Transformer는 Hierachical(계층적인) 구조를 활용하기 때문에 Object Detection과 Segmentation Task에서 SOTA 달성
✅ 하지만 Classification Task에서는 EfficientNet와 성능이 비슷함. (상대적인 낮음)
- Layer가 깊어지면서 image의 resolution을 변경하기 때문에 서로 다른 scale information을 갖고 있음.
✅ Object Detection의 FRN 구조를 사용하여 multi-scale information를 활용하기 때문에 Object Detection과 Segmentation Task에서의 성능이 매우 좋음.
- Hierachical & Shifted Windows를 사용하여 patch size를 다양하고 유동적으로 사용 가능하게 하여 representation을 학습함.
1.1.1. Vit
- image를 작은 patch들로 분할하는 방식
(image -> patch)
- ViT보다 더 작은 patch들로 분할해서 점점 patch들을 merge하는 방식
(patch -> proportion of image -> image)
✅ 작은 단위의 patch에서 점점 merge하고 계층마다 다른 representation을 가지기 때문에 다양한 크기의 entity를 다룰 수 있음. -> 좋은 성능으로 이어짐
- Local Window를 Model에 적용
- 외각선이 빨간색 선인 것들을 window라고 하고, window 내부에서만 self-attention을 진행하게 되어 연산량을 줄임.
- Hierachical Transformer 구조이기 때문에 계층마다 다른 해상도의 결과값을 얻을 수 있어서 Segmentation / Object Detection Task에서 적합한 BackBone 형태라고 말할 수 있음.
- [CLS] token을 사용하지 않고 token들의 평균값을 활용하여 classification을 수행함.
1.1.3. Self-attention in non-overlapped windows
h,w: 세로, 가로 patch 개수
M: local window size
- 기존에는 image 전체에 대해 self-attention을 수행함.
- 계산복잡도가 이미지 크기의 제곱에 비례한다는 단점
- non-overlapping window를 도입하여 window 내 각 patch끼리 self-attention만을 적용함.
1.2. Shifted Windows
Window란?
- N개의 인접한 patch들로 구성되어 있는 patch set
- Shifted Windows는 Swin Transformer에서 핵심 Idea
- ([2M, 2M]) 크기만큼이동시키면 매 stage마다 window가 다른 patch로 구성되어 있기 때문에 window간 공유가 가능해짐.
[과정]
(1) [왼쪽 그림]과 같이 patch를 분할하고 self-attention
(2) [오른쪽 그림]과 같이 window를 patch로부터 ([2M, 2M]) 크기만큼 오른쪽 밑으로 shift 시킨 후 self-attention
✅ self-attention 계산이 M개의 patch들로만 제한되기 때문에 연산의 효율성 Good
- W-MSA: feature map을 M개의 window로 나눔 [왼쪽 그림]
- SW-MSA: W-MSA에서 발생한 patch로부터 ([2M, 2M])칸 떨어진 patch에서 window 분할 [오른쪽 그림]
-> 하지만 window의 크기가 제각각이라는 문제점이 있음!!!!!!
두 가지 해결책은 다음과 같음.
- (2) 모든 크기를 M으로 통일시키기 위해 padding 추가
1.3. Cyclic shifting
- Window를 이동시키고 겹치지 않은 부분에 대해 반대편에 있는 patch를 참조함
- 이때 window내 서로 관련 없는 patch가 섞여 있음
- 관련 있는 patch끼리만 self-attention을 수행하기 위해 각 window마다 [Mask]를 씌어 관련 없는 부분을 0으로 만들기!
1.4. Relative Postion Bias
- Transformer는 절대 좌표를 더해줌 (sin과 cos 활용)
- Swin Transformer는 한 픽셀에 대한 나머지 픽셀의 상대 좌표를 더해줌
- CNN Based Model
- ResNet, DenseNet, HRNet, EfficientNet 등등
- Self-attention based backbone architectures
- Transformer based vision backbones
3. Method
3.1. Overall Architecture
전체적인 과정
(1) Patch Partion
- ViT와 같은 patch splitting module을 활용하여 non-overlapping patch로 RGB image를 나눔
- [H x W x 3] -> RGB value 3을 곱해줌
(2) Linear Embedding
- [4H x 4W x 48] tensor를 [4H x 4W x C]) tensor로 변환
(3) Patch merging
- Layer가 깊어짐에 따라 주변 patch를 merge하면서 token의 갯수를 줄임
- [4x4] 크기의 작은 patch들을 점점 합쳐가며 계층 구조를 만듬
- 인접한 [2x2] patch를 concat하여 channel 수가 4배가 됨
✅ Linear Layer를 통해 2C로 만들어줌.
- 이를 반복하여 [32H x 32W x 8C] tensor로 최종 변환
(4) Swin Transformer block
- 첫 block에서는 W-MSA를 통과한 뒤 두번째 block에서는 SW-MSA를 통과함
- 2-Layer MLP와 Layer Norm 그리고 GELU를 통과함
- 각 모듈에 Residual Connection도 적용
- MSA와 MLP이전에 Layer Norm을 두었음
3.1.1. Patch merging
- patch를 병합시키면 patch의 갯수는 절반으로 줄어들고, 차원수는 2배로 증가함
- Network의 깊이가 깊어지고 feature map의 size는 점점 작아지므로 ResNet과 같은 feature map의 계층적 표현이 가능해짐
W-MSA
- Local Window 안에서 self attention
SW-MSA
- Local Window 간의 self attention
4. Experiments
모델 버전
- Image Resolution (Default): 224 x 224
- 384 x 384일 때는 window size 12
Vision Tasks
- Classification
- Object Detection
- Semantic Segmentation
세팅
- Classification에 ImageNet 1K 사용
- Object Detection에 COCO 2017 사용
- Semantic Segmentation에 ADE20K 사용
Baseline Models
본 논문에서 언급한 점
- 다양한 Augmentation & Regularization 필요
- 기존 ViT에서 Inductive bias가 작기 때문에
- ViT에서 중요했던 repeated augmentation은 Swin Transformer에 적용시켰을 때 크게 성능 향상이 없었음
4.1. Image Classification on ImageNet-1K
(a) ImageNet-1K
- [초록색 네모 칸] Swin vs CNN Models
- Swin-B(84.5)와 EfficieNet-B7 (84.3)는 성능이 비슷함
- Swin Transformer는 CNN기반 모델에 비해 성능과 학습 속도의 trade-off가 더 작음
(b) ImageNet-22K pre-trained models
- Swin vs Vit
- model의 size가 커질수록 성능이 좋아짐
4.2. Object Detection on COCO
(a) Frameworks 기준
(b) Backbones 기준
4.3. Semantic Segmentation on ADE20K
SERT + T-Large
vs ```UperNet + Swin-L````
- UperNet + Swin-L 모델이 적은 파라미터로 더 높은 성능을 도출함
- UNet + Swin-L 모델이라면 더 좋은 성능을 도출할 수 있지 않을까하는 궁금증이 있음!!
4.4. Ablation Study
- Window 적용 방법에 따른 속도 비교
- sliding window (naive) vs shifted window (cyclic)
- shifted window 적용 방법이 성능이 훨씬 좋음.
5. Conclusion
- 모델 구조
- Local Window를 적용하여 Inductive bias를 개입 -> 이는 ViT 극복
- Patch merging을 통한 Hierachical(계층적인) 구조
- Insight
- Image 특성을 고려한 모델 구조임
- ViT보다 작은 계산 복잡도
- Classfication를 제외한 나머지 CV Task에 확장성 Good
✅ Object Detection & Segmentation 대회에서 SOTA 성능을 보임
🎯 Summary
- 저자가 뭘 해내고 싶어 했는가?
- Computer Vision에서 다양한 목적에 맞게 Backbone Network로 사용될 수 있는 Transformer Model 제안
- Transformer 구조에 이미지의 특성을 반영할 수 있는 방법 제안
- ViT의 한계점을 극복하고 다양한 CV Task에 적용
- 이 연구의 접근 방식에서 중요한 요소는 무엇인가?
- 어느 프로젝트에 적용할 수 있는가?
- 참고하고 싶은 다른 레퍼런스에는 어떤 것이 있는가?
- 느낀점은?
- 날이 갈수록 논문 리뷰가 점점 어려워진다..
이번 Swin Transformer의 핵심이었던 patch merge와 Cyclic Shift 부분이 인상 깊었다. 하지만
아직 Cyclic shift를 잘 모르겠다.. 다시 한번 공부해야겠다.
📚 References