ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Swin Transformer: 계층적 비전 트랜스포머
    AI 2026. 5. 11. 15:35

    2021년 Microsoft Research에서 발표한 Swin Transformer는 컴퓨터 비전 분야에서 트랜스포머를 백본(Backbone)으로 사용하는 방식에 큰 획을 그은 모델입니다. 기존 ViT가 가졌던 고질적인 문제들을 어떻게 해결했는지, 그리고 왜 이 모델이 객체 탐지(Detection)나 세그멘테이션(Segmentation)에서 탁월한 성능을 보이는지 자세히 분석해 보겠습니다.

     

    ViT(Vision Transformer)의 한계와 Swin의 등장 배경

    Swin Transformer를 이해하려면 먼저 기존 ViT가 가진 두 가지 치명적인 약점을 알아야 합니다.

    • 고해상도 이미지 처리의 어려움 (Complexity): ViT는 이미지 전체의 패치들 간에 셀프 어텐션을 수행합니다. 만약 이미지 해상도가 커져서 패치 수가 $N$개로 늘어나면, 계산 복잡도는 $O(N^2)$으로 급격히 증가합니다. 이는 고해상도 이미지를 다루는 데 큰 걸림돌이 됩니다.
    • 고정된 스케일 (Scale Invariance의 부재): ViT는 항상 동일한 크기의 패치(예: $16 \times 16$)를 유지합니다. 하지만 실제 이미지 속 객체들은 크기가 제각각입니다. 다양한 크기의 사물을 인식해야 하는 세그멘테이션이나 탐지 작업에서는 계층적인 특징(Multi-scale feature)을 추출하는 능력이 필수적입니다.

    Swin Transformer는 이 문제를 해결하기 위해 '계층적 특징 맵(Hierarchy)'과 '윈도우 기반 어텐션(Window-based Attention)'을 도입했습니다.

     

    계층적 구조

    기존 ViT는 모든 레이어에서 동일한 해상도($16 \times 16$ 패치 등)를 유지하는 Single-scale 구조입니다.

    반면 Swin Transformer는 CNN의 설계를 계승하여 레이어를 지날수록 해상도를 줄이고 채널을 늘리는 Multi-scale 구조를 채택했습니다.

     

    단계별 특징 맵 (Feature Map)의 변화

    전체 구조는 총 4개의 Stage로 구성되며, 각 Stage를 거칠 때마다 다음과 같은 변화가 일어납니다.

    • Stage 1: 입력 이미지 $(H, W, 3)$를 $4 \times 4$ 패치로 나누어 $(\frac{H}{4}, \frac{W}{4}, C)$ 크기의 특징 맵을 생성합니다.
    • Stage 2: Patch Merging을 통해 $(\frac{H}{8}, \frac{W}{8}, 2C)$로 변환됩니다.
    • Stage 3: 다시 Patch Merging을 거쳐 $(\frac{H}{16}, \frac{W}{16}, 4C)$가 됩니다. (가장 많은 연산이 일어나는 구간)
    • Stage 4: 최종적으로 $(\frac{H}{32}, \frac{W}{32}, 8C)$ 크기에 도달합니다.

    왜 계층적 구조인가?

    1. 다양한 수용 영역 (Receptive Field): Stage 1에서는 세밀한(Fine-grained) 특징을, Stage 4에서는 거시적인(Coarse) 특징을 추출합니다. 이는 다양한 크기의 객체를 탐지해야 하는 FPN(Feature Pyramid Network) 구조에 완벽히 부합합니다.
    2. 연산 효율성: 고해상도에서는 Local Window(W-MSA)로 연산량을 억제하고, 저해상도로 갈수록 채널을 늘려 정보의 밀도를 높임으로써 정확도와 속도의 밸런스를 잡습니다.

    Patch Merging: Transformer의 '풀링(Pooling)' 연산

    Patch Merging은 CNN의 Pooling이나 Strided Convolution과 유사한 역할을 수행하지만, 정보 손실을 최소화하기 위해 Space-to-Depth 연산 방식을 차용합니다.

     

    상세 동작 메커니즘 (Step-by-Step)

    색종이 4장을 겹쳐서 하나의 두꺼운 타일로 만드는 과정'이라고 생각하고 단계별로 아주 쉽게 풀어보겠습니다.

    이미지 위에 $2 \times 2$ 크기의 작은 창문이 수없이 많이 떠 있다고 상상해 보세요.

    • 1단계: 격자 나누기 (4가지 색깔 매기기)
      • 가장 먼저, 이미지의 모든 패치에 위치에 따라 번호를 매깁니다.
      • $2 \times 2$ 구역 안에서 좌상(1번), 우상(2번), 좌하(3번), 우하(4번)라고 이름을 붙이는 거죠.
      • 이 작업이 끝나면 전체 이미지는 1, 2, 3, 4번이 반복되는 체크무늬 형태가 됩니다.
    • 2단계: 같은 번호끼리 모으기 (분리): 이제 같은 번호를 가진 애들끼리 따로 모읍니다.
      • 1번 패치들만 쏙쏙 뽑아서 따로 정렬하면, 원래 이미지보다 가로/세로가 절반 크기인 작은 이미지가 생깁니다.
      • 2, 3, 4번도 똑같이 하면, 결국 크기가 1/4로 줄어든 작은 이미지 4장이 생겨납니다.
    • 3단계: 뒤로 쌓기 (두께 늘리기)
      • 이 4장의 작은 이미지를 옆으로 펼치는 게 아니라, 위아래로 차곡차곡 겹쳐 쌓습니다.
      • 크기: 가로/세로는 여전히 절반인 상태입니다.
      • 두께: 4장을 겹쳤으니 두께(채널)는 4배가 됩니다.
      • 핵심: 정보를 하나도 버리지 않았습니다! 원래 넓게 퍼져 있던 정보들을 '두께(깊이)' 속에 고스란히 집어넣은 것입니다.
    • 4단계: 꾹 눌러서 압축하기 (다이어트)
      두께가 4배나 되면 너무 무겁습니다. 그래서 이 4층짜리 정보를 꾹 눌러서 2층으로 압축합니다.
      • 이때 단순히 누르는 게 아니라, 학습 가능한 필터(Linear Layer)를 통과시킵니다.
      • 결과: 4층의 정보가 서로 잘 섞이면서, 핵심 정보만 남은 2배 두께($2C$)의 특징 맵이 완성됩니다.

    수학적 표현

    입력 특징 맵을 $z \in \mathbb{R}^{H \times W \times C}$라고 할 때, Patch Merging 이후의 출력 $z'$는 다음과 같습니다.

    $$z_{merged} = \text{Concat}(z_{0,0}, z_{1,0}, z_{0,1}, z_{1,1}) \in \mathbb{R}^{\frac{H}{2} \times \frac{W}{2} \times 4C}$$
    $$z' = \text{LayerNorm}(z_{merged}) \cdot W_{proj} \in \mathbb{R}^{\frac{H}{2} \times \frac{W}{2} \times 2C}$$
     

    💡 왜 이런 짓(?)을 하나요?

    1. 시야가 넓어집니다: 픽셀들을 뭉쳐서 작게 만들었기 때문에, 다음 층의 로컬 윈도우($7 \times 7$)는 이미지의 더 넓은 영역을 한 번에 볼 수 있게 됩니다. (작게 봐야 전체가 보이는 원리입니다.)
    2. 버리는 게 없습니다: 일반적인 풀링(Pooling)은 4개 중 제일 큰 것만 남기고 3개를 버리지만, Patch Merging은 일단 다 챙겨서 채널로 보낸 뒤 AI가 알아서 중요한 걸 골라내도록 합니다.

    요약하자면

    "4개의 인접한 칸을 뽑아(분리), 위로 쌓고(적층), 꾹 눌러서(압축) 해상도는 낮추되 정보의 밀도는 높이는 과정입니다."


    MLP (Multi-Layer Perceptron)

    한마디로 "Attention이 찾아낸 정보들을 더 깊게 해석하고 가공하는 요리사"라고 생각하면 쉽습니다.

    Swin Transformer Block 구조를 보면 항상 Attention (W-MSA/SW-MSA) 다음에 MLP가 나옵니다. 왜 이 두 개가 세트로 붙어 다니는지 그 역할을 설명해 드릴게요.

     

    1. MLP의 핵심 역할: "정보의 비선형 가공"

    Attention이 하는 일은 "이미지의 어떤 패치가 서로 연관이 있는가?"를 찾아내어 정보를 섞어주는 것입니다. 하지만 이것만으로는 데이터가 충분히 복잡하고 깊게 학습되지 않습니다.

    • Attention: "야, 왼쪽 위에 있는 강아지 귀랑 오른쪽 아래 꼬리가 연결돼 있어!" (관계 파악)
    • MLP: "그래? 그럼 그 관계들을 종합해 볼 때, 이건 '골든 리트리버'일 확률이 높겠군." (데이터 변환 및 판단)

    즉, Attention이 패치들끼리 '대화'를 시켜준다면, MLP는 그 대화 내용을 바탕으로 각 패치가 가진 '정보의 질을 높이는' 역할을 합니다.

     

    2. 내부 구조 (2단계 레이어)

    보통 Swin Transformer의 MLP는 두 개의 Linear Layer(선형 레이어)와 그 사이의 활성화 함수(GELU)로 구성됩니다.

    1. 확장 (Expansion): 채널 수를 일시적으로 4배 정도로 뻥튀기합니다. (정보를 더 넓고 세밀하게 펼쳐서 보기 위함)
    2. 활성화 (GELU): 펼쳐진 정보에 복잡한 비선형 성질을 부여하여 모델이 어려운 특징도 배울 수 있게 합니다.
    3. 압축 (Compression): 다시 원래 채널 크기로 줄입니다. (핵심만 남긴 요약)

     

    3. 왜 Attention 다음에 꼭 MLP가 올까?

    Attention 연산은 주로 패치 간의 공간적 관계를 다룹니다. 반면 MLP는 각 패치 내부의 채널 정보를 깊게 파고듭니다.

    • Attention: 옆 동네랑 정보 교환 (Spatial mixing)
    • MLP: 자기 안에 있는 특징들을 재조합 (Channel mixing)

    이 두 과정이 반복되어야만 모델이 이미지의 형태와 의미를 모두 완벽하게 이해할 수 있습니다.

     

    💡 쉬운 비유

    Attention은 여러 명의 전문가가 모여서 회의를 하는 과정이고, MLP는 회의가 끝난 후 각 전문가가 자기 자리에 돌아가서 회의 내용을 정리하고 보고서를 쓰는 과정입니다.그래서 Swin Transformer Block 하나는 [회의(Attention) + 보고서 작성(MLP)]이라는 루틴으로 구성되어 있다고 이해하시면 완벽합니다!


    Swin Transformer Block: 효율적 연산의 핵심 (The Engine)

    로컬 윈도우(Local Window)와 연산 효율화

    ViT가 가진 $O(N^2)$ 복잡도 문제를 해결하기 위해 Swin Transformer가 도입한 핵심 장치가 바로 로컬 윈도우(Local Window)입니다.

     

    로컬 윈도우란 무엇인가?

    기존 ViT는 이미지 전체 패치를 하나의 거대한 캔버스로 보고 모든 패치 간의 관계를 계산했습니다. 반면, Swin Transformer는 이미지를 겹치지 않는 일정한 크기의 격자(Grid), 즉 로컬 윈도우로 나눕니다. (일반적으로 $7 \times 7$ 또는 $12 \times 12$ 패치 크기로 설정합니다.)

    • W-MSA (Window-based Multi-head Self-Attention): 셀프 어텐션 연산이 이미지 전체가 아닌, 오직 윈도우 내부에 속한 패치들끼리만 수행됩니다. 윈도우 경계를 넘어서는 패치들은 서로 참조하지 않습니다.

    왜 로컬 윈도우가 혁신적인가? (수학적 증명)

    이 방식은 계산 복잡도를 획기적으로 낮춰줍니다. 입력 이미지의 패치 수를 $N$, 윈도우 한 변의 길이를 $M$이라고 할 때의 복잡도는 다음과 같습니다.

    • 기존 ViT (Global MSA): $O(N^2)$ — 해상도가 2배 커지면 연산량은 4배(제곱)로 폭증
    • Swin Transformer (W-MSA): $O(M^2 \times N)$$M$은 고정된 상수이므로, 연산량은 패치 수 $N$에만 비례하는 선형적(Linear) 증가

    결과적으로 이미지 해상도가 아무리 높아져도 연산량이 감당 가능한 수준으로 유지되므로, 4K나 8K 같은 초고해상도 이미지도 백본 모델로 처리할 수 있게 된 것입니다.

     

     

    시프트 윈도우(Shifted Window) – 정보의 단절을 허물다

    로컬 윈도우(W-MSA)는 계산 효율을 비약적으로 높여주지만, 윈도우 경계에 있는 패치들이 서로 소통할 수 없다는 치명적인 단점이 있습니다. 즉, 윈도우 내부의 정보만 고립되어 학습되는 것이죠. 이를 해결하기 위해 등장한 것이 바로 시프트 윈도우(SW-MSA)입니다.

    ① W-MSA (Window-based Multi-head Self-Attention)

     그림의 Layer $l$처럼 정해진 격자(윈도우) 내부에서만 어텐션을 수행합니다.

    • 복잡도: 이미지 크기에 대해 선형적($O(N)$)으로 매우 효율적입니다.
    • 한계: 윈도우 간 정보 교환이 불가능하여 전역적인 특징을 파악하는 데 한계가 있습니다.

    ② SW-MSA (Shifted Window Multi-head Self-Attention)

    W-MSA의 정보 고립 문제를 해결하기 위해, 다음 레이어에서는 윈도우의 위치를 절반($\lfloor M/2 \rfloor$)만큼 이동(Shift)시켜 어텐션을 수행합니다. 이를 통해 이전 레이어에서 서로 다른 윈도우에 속해 있던 패치들 간의 연결성이 확보됩니다.
    효과: 시프트를 통해 이전 레이어(Layer $l$)에서 서로 다른 윈도우에 속했던 패치들이 하나의 윈도우로 묶이게 되며, 자연스럽게 윈도우 간 경계를 넘나드는 연결성이 확보됩니다.

     

    💡 기술적 디테일: Cyclic Shift & Attention Mask 윈도우를 이동시키면 모서리 부분에 규격이 맞지 않는 잘린 조각들이 생깁니다. 이를 처리하기 위해 Swin Transformer는 매우 영리한 Cyclic Shift(순환 이동) 방식을 사용합니다.

    1. 순환 이동: 잘린 조각들을 반대편 빈 공간으로 옮겨 붙여 다시 온전한 정사각형 윈도우 형태를 만듭니다.
    2. Attention Mask: 이때 실제로 인접하지 않았던 조각들이 같은 윈도우에 묶이게 되는데, 이를 방지하기 위해 마스크를 씌워 불필요한 연산을 차단합니다.
    3. 역 순환 이동: 연산이 끝나면 다시 원래 위치로 복원(Reverse Shift)시킵니다.

     

    상대적 위치 편향 (Relative Position Bias)

    이미지 상의 패치들은 절대적인 좌표값보다 '서로 얼마나 떨어져 있는가'라는 상대적인 관계가 더 중요할 때가 많습니다. Swin Transformer는 이를 위해 수식에 $B$라는 학습 가능한 파라미터를 추가했습니다.

    $$Attention(Q, K, V) = \text{Softmax}\left(\frac{QK^T}{\sqrt{d}} + B\right)V$$
    • 동작 원리: 윈도우 내 각 패치 쌍에 대해 상대적 좌표($dx, dy$)를 계산합니다. 이 좌표값들을 인덱스로 사용하여 Bias Table에서 해당되는 가중치 $B$를 가져옵니다.
    • 효과: 고정된 위치 정보만 주는 것보다 이미지 내 객체의 기하학적 형태와 구조를 훨씬 더 유연하게 학습할 수 있게 해줍니다.

     

    분류헤드

    분류 헤드(Classification Head) 부분은 모델이 학습한 복잡한 특징들을 모아 최종적으로 "이 이미지는 강아지다"라고 결론을 내리는 아주 중요한 단계입니다.

    기존 ViT와 Swin Transformer는 이 결론을 내리는 방식에서 큰 차이가 있는데, 질문하신 [CLS] 토큰 방식과 전역 평균 풀링(Global Average Pooling) 방식을 비교해서 설명해 드릴게요.

     

    1. ViT: [CLS] 토큰 방식 (대표 뽑기)

    ViT는 이미지 패치들 외에 [CLS](Classification)라는 가상의 패치를 하나 더 추가해서 모델에 넣습니다.

    • 동작: 이 [CLS] 토큰은 다른 모든 이미지 패치들과 어텐션을 주고받으며 정보를 흡수합니다.
    • 결론: 마지막 층에 도달하면 다른 패치들은 무시하고, 모든 정보를 다 알고 있는 이 [CLS] 토큰 하나만 딱 골라내어 분류 레이어(MLP)에 보냅니다.
    • 비유: 학급(이미지 패치들)의 의견을 종합해서 선생님께 전달하는 '반장(CLS)' 한 명만 보고 성적을 매기는 것과 같습니다.

    2. Swin Transformer: 전역 평균 풀링 방식 (평균 내기)

    Swin Transformer는 계층적 구조를 가지기 때문에 마지막 Stage 4가 끝나면 $(\frac{H}{32} \times \frac{W}{32})$ 크기의 특징 맵들이 남습니다. 여기엔 [CLS] 토큰이 따로 없습니다.

    • 동작: 마지막에 남은 수많은 패치(토큰)들의 값을 전부 더해서 평균을 냅니다. 이를 전역 평균 풀링(Global Average Pooling, GAP)이라고 합니다.
    • 결론: 이 평균값을 분류 레이어에 보냅니다.
    • 비유: 반장 한 명의 의견이 아니라, 반 학생 전체의 점수를 평균 내어 그 반의 실력을 평가하는 방식입니다.

     

    3. 왜 Swin은 평균을 낼까요?

    Swin Transformer는 CNN의 장점을 많이 가져왔기 때문입니다.

    1. 공간 정보 유지: Swin은 계층적 구조를 통해 마지막까지 이미지의 공간적인 위치 정보를 어느 정도 유지합니다. 특정 한 점이 아니라 이미지 전체에 퍼진 특징들의 평균을 내는 것이 더 안정적입니다.
    2. 구조적 유연성: Swin은 분류뿐만 아니라 탐지(Detection)나 세그멘테이션에도 쓰기 위해 설계되었습니다. [CLS] 토큰 같은 특수 장치 없이 일반적인 특징 맵 형태로 결과가 나와야 다른 Task의 헤드(FPN 등)에 연결하기가 훨씬 수월합니다.

     

    💡 정리 (분류 헤드 비교)

    비교 항목 ViT Swin Transformer
    핵심 도구 [CLS] 토큰 전역 평균 풀링 (GAP)
    방식 특정 위치의 토큰 하나만 사용 마지막 층 모든 패치의 평균값 사용
    비유 대표 한 명의 의견 듣기 투표 결과(평균) 집계하기

    결론적으로, "각 토큰의 평균값"이라는 말은 마지막 Stage 4에서 뽑힌 특징 맵의 모든 칸(토큰) 값들을 다 더해 칸 수로 나누어 하나의 대표 정보 뭉치로 만든다는 뜻입니다.

     

     

    ViT vs Swin Transformer 최종 비교

    비교 항목 ViT (Vision Transformer) Swin Transformer
    구조 단일 해상도 (Non-hierarchical) 계층적 구조 (Hierarchical)
    어텐션 범위 전역(Global) - 모든 패치 간 연산 지역(Local) - 윈도우 내 연산 + Shift
    복잡도 $O(N^2)$ (해상도 증가 시 급증) $O(N)$ (선형적 증가)
    위치 정보 Absolute Positional Encoding Relative Position Bias
    주요 용도 이미지 분류(Classification) 분류, 탐지, 세그멘테이션 백본

     

Designed by Tistory.