이번 논문은 Swin Transformer 논문!
ICCV 2021 논문이다.
얘도 초록하고 모델구조 정도만 읽어봤다.
스윈 트랜스포머 말만 들어봤지 솔직히 뭔지도 몰랐다.
일단 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.
헐 어제 이해 안되던 게 오늘은 이해가 된다 꺄앙ㄱ