논문리뷰

[논문리뷰] Swin Transformer: Hierarchical Vision Transformer using Shifted Windows

syveany 2026. 2. 11. 17:56

이번 논문은 Swin Transformer 논문!

ICCV 2021 논문이다.

https://openaccess.thecvf.com/content/ICCV2021/papers/Liu_Swin_Transformer_Hierarchical_Vision_Transformer_Using_Shifted_Windows_ICCV_2021_paper.pdf

 

얘도 초록하고 모델구조 정도만 읽어봤다.

스윈 트랜스포머 말만 들어봤지 솔직히 뭔지도 몰랐다.

 

일단 Swin은 Shifted window의 약자라고 한다.

Window가 무엇이고 이게 왜 어떻게 shift 된다는 것인가? 잘 모르겟다. 한번 알아보겠다.

 

(공부하는 단계에서 정리한 내용입니다.

잘못된 부분이 있다면 알려주시면 정말 감사하겠습니다.)

 

0. Abstract

언어랑 비전은 특성이 완전 달라서 NLP에서 쓰는 transformer를 그대로 쓰기에는 무리가 있음

대표적으로 아래 두 가지 특성이 있음

 

[Scale variation 문제]

 NLP는 'I love deep learning'이라는 문장이 있을 때 단어 하나하나가 비슷한 scale을 가짐

 근데 비전은? 이미지 안에서도 객체가 클 수도 있고 작을 수도 있음

 크고 작은게 왜 문제인가 하면

 사람 얼굴이 16*16 패치에 들어간다고 할 때

 1~2개 패치만 차지할 정도로 너무 작으면 특징이 잘 안 보이고

 16*16에 다 채워지게 될 정도로 너무 크면 멀리 있는 패치끼리 상호작용하기가 어려워짐

 

[Resolution 문제]

 NLP에서는 보통 20~100개 토큰 정도만 사용해서 Self-attention 복잡도 $O(N^2)$도 별 문제 없음

 근데 비전은? 토큰이 미친듯이 많아짐

 뭐 *ViT처럼 224*224 이미지를 16*16해서 14*14=196token해서 복잡도 ${196}^2$ 정도 되는거까지는 문제 없는데

 Detection이나 Segmentation 할 때 1024*1024 이미지를 16*16해서 64*64=4096token 하게 되면 복잡도가 ${4096}^2$가 됨

 복잡도가 $N^2$라서 숫자가 조금만 커져도 미친듯이 많아짐. 심지어 한 레이어에서 이정도임

 *ViT는 애초에 분류 task 위주로 설계됨

 

이러한 차이를 해결하기 위해서 Shifted window 방식으로 계산을 하는 계층적 transformer를 제안함

Shifted window는 레이어마다 윈도우를 쉬프트해서 살짝살짝씩 바꾸는 방법임

복잡도도 $O(N)$이라고 함 (우와 어케 이게 가능함)

 

이러한 특성 때문에 비전 분야에서 범용 백본으로 쓰일 수 있음

분류(ImageNet-1K top-1 87.3%), 객체 탐지(COCO testdev 58.7 *box AP 51.1 **mask AP), 의미분할(***ADE20K val 53.5mIoU) 등 다양하게 적용 가능함. 성능도 Sota보다 훨씬 높음

* box AP: AP가 Average Precision임. 즉, 예측한 bbox가 실제 객체 위치하고 얼마나 잘 겹치는가를 의미함

** mask AP: Bbox가 아니라 픽셀 단위로 영역 맞춤

*** ADE20K val: ADE20K라는 의미 분할 데이서셋임 (약 2만장, 클래스 150개, 픽셀 단위로 라벨링 되어있음)

 

그리고 의의가 또 있는데, 이러한 계층적설계 + shifted window 방식을 all-MLP 구조에도 적용 가능함

(걍 attention에 탑승해서 성능을 잘 낸 게 아니라 우리가 방식을 잘 했다는걸 언급하려는 의도인 듯)

 

초록부터 어렵네 .. 

3. Method

섹션3은 통째로 다 보겠음

심호흡 한번 하고 시작

3.1 Overall Architecture

 

논문에 나온 그림은 Swin-T 버전 구조임 (T가 tiny의 t라고 함) (귀엽다!)

여기서는 $H$=224, $W$=224인 이미지를 사용함

그러므로 $224 * 224 * 3$ 임

처음에는 이 이미지를 안겹치게 $4*4$ 크기로 나눔 (ViT는 16*16으로 나눴음. 비교가능)

그럼 $\frac{224}{4} * \frac{224}{4} *48$ 이 됨

즉, 48차원짜리 token이 $\frac{224}{4} * \frac{224}{4}$개 있다는 거임

 

이제 Stage1 시작

여기에 선형임베딩 넣어서 임의의 차원 $C$로 변환시킴 

그럼 $\frac{224}{4} * \frac{224}{4} * C$가 됨

그러고 swin 블록에 통과시킴

Swin 블록에 통과시키면 token이나 차원변화는 없음

그래서 최종 결과는 $\frac{224}{4} * \frac{224}{4} C$

 

Stage2 시작

레이어가 깊어질수록 계층적 표현을 위해서 patch merging 레이어를 넣음

Patch merging이 무엇이냐. 2*2 concat하고 선형변환 하는거임

먼저 2*2 concat하면 $\frac{224}{8} * \frac{224}{8} * 4C$가 됨

그러고 선형변환 해서 $4C$를 $2C$로 만듦

그럼 $\frac{224}{8} * \frac{224}{8} * 2C$가 됨

그러고 swin블록 2개에 통과시킴. 통과시켜도 token이나 차원 변화는 없음 

 

Stage3 시작

Patch merging 단계에서 먼저 2*2 concat하면 $\frac{224}{16} * \frac{224}{16} * 8C$가 됨

그러고 선형변환해서 $8C$를 $4C$로 만듦

그럼 $\frac{224}{16} * \frac{224}{16} * 4C$가 됨

그러고 swin블록 *6개에 통과시킴. 통과시켜도 token이나 차원 변화는 없음

* 다른 데서는 2개씩 하는데 왜 여기서 6개나 하는가? 대충 적정하기 때문

 token수도 많이 줄어서 부담 없고 채널도 적당히 커져서 표현력도 좋은 고런 시점에 깊이 늘리기 위해서 그럼

 

Stage4 시작

Patch merging 단계에서 2*2 concat하면 $\frac{224}{32} * \frac{224}{32} * 16C$가 됨

그러고 선형변환해서 $16C$를 $8C$로 만듦

그럼 $\frac{224}{32} * \frac{224}{32} * 8C$가 됨

그러고 swin블럭 2개에 통과시킴. 통과시켜도 token이나 차원 변화는 없음

 

그동안에는 비전 태스크에서 ViT보다는 주로 CNN을 써왔음. 왜냐면 CNN이 여러 크기의 피처맵을 제공하기 때문임

근데 ViT는 해상도가 14*14로 1종류이기 때문에 detection 모델같은 곳에 끼워 넣으려면 구조를 이리저리 바꿔야했음

근데! Swin은 CNN처럼 Stage들마다 다양한 피처맵을 내뱉기 때문에 아무 비전 태스크에나 적용할 수 있음!

 

(모델 쭉 그린거 사진 넣기)

 

Swin Transformer block

Swin블록은 기존 transformer의 MSA부분만 swin으로 바꿔서 구성함

LN → MSA → Residual → LN → MLP → Residual → ... 에서 MSA 부분만 바꿔서

LN → W/SW-MSA → Residual → LN → MLP → Residual → ...   식으로 쓴다는 거임

 

(일단 그림으로만 표시해놓고 자세한 설명은 3.2에서 하는 듯하다.)

 

 

3.2 Shifted Window based Self-Attention

Transformer하고 ViT 둘 다 global self-attention을 함

즉, 한 토큰이 모든 다른 토큰들과의 관계를 계산하게되면서 $N^2$가 되어 복잡도가 $O(N^2C)$가 됨

그래서 dense prediction처럼 계산량 많은 비전 task에 적합하지 않음

 

Self-attention in non-overlapped windows

효율적인 모델링을 위해서 *local window 안에서만 self-attention을 하는 것을 제안함

* local window: 겹치지 않게 자르는 방법. 겹치게 자르는거는 sliding window!

 

각 window가 $M*M$개의 패치를 포함한다고 할 때, $N = h * w$개 패치를 가지는 이미지에 대해서 global MSA랑 window MSA의 계산량은 아래와 같음

$\Omega(MSA) = 4hwC^2 + 2(hw)^2C$

$\Omega(W-MSA) = 4hwC^2 + 2M^2hwC$

(식이 왜 이렇게 되는지 설명)

 

$hw$ 기준 global MSA는 복잡도 $O(N^2)$이지만 window MSA는 복잡도 $O(N)$임!

 

Shifted window partitioning in successive blocks

 

 

Efficient batch computation for shifted configuration

 

 

Relative position bias

 

 

3.3 Architecture variants

 

 

4.4 Ablation Study (?)

 

 

 

 

---

26.02.11.

이해하기 어려워서 하루만에 못 정리하고 좀 쉬었다가 이틀에 걸쳐서 써보려고 합니다..

ㅠㅠ 아 구조 이해하다가 머리 빠질 것 같아요

하지만 어이없게도 재미는 있음..

 

26.02.12.

헐 어제 이해 안되던 게 오늘은 이해가 된다 꺄앙ㄱ