Swin Transformer
Swin Transformer는 이동된 로컬 윈도우에서 셀프 어텐션을 계산하는 계층형 비전 Transformer로, 이미지 크기에 따라 계산 비용이 선형적으로 증가합니다.
Swin Transformer(Shifted Window Transformer의 약칭)는 작은 로컬 윈도우 안에서 자기 어텐션을 계산하고 연속 레이어 사이에서 윈도우를 이동하는 계층형 비전 트랜스포머입니다. Microsoft Research Asia의 Ze Liu와 동료들은 2021년 논문 Swin Transformer: 이동 윈도우를 사용하는 계층형 비전 트랜스포머에서 이를 소개했으며, 이 논문은 ICCV 2021 최우수 논문상인 Marr Prize를 수상했습니다. 로컬 윈도우를 사용하면 어텐션 비용이 픽셀 수에 따라 이차가 아닌 선형으로 증가합니다. 또한 패치를 단계별로 병합해 합성곱 신경망과 같은 다중 스케일 특징 맵을 생성합니다. 이러한 특성 덕분에 트랜스포머는 분류를 넘어 고해상도 이미지의 객체 탐지 및 세그멘테이션에 활용되는 범용 백본으로 실용성을 갖추게 되었습니다.
이동 윈도우의 작동 방식#
Swin은 먼저 이미지를 4×4픽셀 패치로 나누고 각 패치를 토큰 임베딩으로 투영합니다. 따라서 224×224 이미지는 Tiny 모델에서 96개 채널을 가진 56×56 토큰 그리드가 됩니다. 토큰 3,136개 전체에 전역 어텐션을 적용하면 모든 토큰을 서로 비교해야 합니다. Swin은 그리드를 겹치지 않는 7×7 토큰 윈도우로 나누고 각 윈도우 안에서만 어텐션을 계산합니다. 논문에서는 h×w 그리드와 C개 채널의 전역 어텐션 비용을 4hwC² + 2(hw)²C로 제시하고, M×M 토큰 윈도우의 비용을 4hwC² + 2M²hwC로 제시합니다. 후자는 hw에 대해 선형입니다.
윈도우만 사용하면 서로 정보를 주고받지 못하므로, 블록을 두 개 쌓을 때마다 윈도우 그리드를 윈도우 너비의 절반인 토큰 3개만큼 이동해 새 윈도우가 기존 경계를 가로지르게 합니다. 윈도우 수를 일정하게 유지하기 위해 구현에서는 특징 맵을 순환 방식으로 이동시키고, 원본 이미지에서 서로 이웃하지 않았던 토큰 사이의 어텐션을 마스킹합니다. 각 블록은 어텐션 점수에 학습된 상대 위치 편향도 추가합니다.
단계 사이에서 패치 병합 레이어는 인접한 토큰 2×2 그룹을 연결한 뒤 선형 투영해 해상도를 절반으로 줄이고 채널 수를 두 배로 늘립니다. 네 단계에서는 입력 해상도의 1/4, 1/8, 1/16, 1/32에 해당하는 특징 맵을 출력합니다. 이는 ResNet과 같은 스트라이드이므로 Swin을 특징 피라미드 네트워크와 같은 기존 탐지 및 세그멘테이션 헤드에 바로 연결할 수 있습니다. torchvision 구현에서는 두 메커니즘을 모두 확인할 수 있습니다.
import torch
from torchvision.models import swin_t
# Swin-T architecture; random weights are enough to inspect its structure
model = swin_t().eval()
# Each pair of blocks uses 7x7 windows, the second shifted by 3 patches
regular, shifted = model.features[1]
print(f"Window {regular.attn.window_size}, shift {regular.attn.shift_size} then {shifted.attn.shift_size}")
# features alternates stages with patch merging; stage outputs are (batch, height, width, channels)
x = torch.randn(1, 3, 224, 224)
with torch.no_grad():
for i, layer in enumerate(model.features):
x = layer(x)
if i % 2 == 1:
print(f"Stage {i // 2 + 1}: {tuple(x.shape)}")Window [7, 7], shift [0, 0] then [3, 3]을 출력한 다음 단계별 출력으로 (1, 56, 56, 96), (1, 28, 28, 192), (1, 14, 14, 384), (1, 7, 7, 768)을 표시합니다. 각 단계에서 그리드의 크기는 절반으로 줄고 채널 수는 두 배가 되므로, 고밀도 예측 헤드가 필요로 하는 피라미드가 만들어집니다.
Swin Transformer와 ViT 및 CNN 비교#
기존 ViT는 이미지를 16×16 패치로 나누고 모든 레이어에서 단일 해상도를 유지하며 전역 어텐션을 적용합니다. 이는 이미지 분류에는 적합하지만 탐지 및 세그멘테이션의 고해상도 입력에는 비용이 많이 듭니다. Swin은 합성곱 네트워크의 두 가지 사전 특성인 지역성과 특징 계층 구조를 다시 도입하면서 어텐션 메커니즘의 입력 의존적 가중치는 유지합니다. Swin의 로컬 윈도우는 모든 토큰이 자신의 이웃에 어텐션을 적용하는 슬라이딩 윈도우 어텐션과 다릅니다. Swin의 윈도우는 여러 토큰이 공유하는 고정 분할이므로 GPU 행렬 곱 연산에 효율적으로 매핑됩니다.
출시 당시 가장 큰 모델인 Swin-L은 ImageNet-22K에서 사전 학습되었으며, ImageNet-1K에서 top-1 정확도 87.3%, COCO test-dev에서 박스 AP 58.7 및 마스크 AP 51.1, ADE20K에서 mIoU 53.5를 기록해 해당 탐지 및 시맨틱 세그멘테이션 벤치마크에서 당시까지 발표된 최고 성능을 달성했습니다. 이 모델의 성공은 합성곱 연구의 발전도 이끌었으며, Meta의 ConvNeXt(2022)는 Swin의 설계 요소를 차용해 ResNet을 현대화하고 Swin의 정확도와 대등하거나 더 높은 정확도를 기록했습니다.
Swin은 맞춤형 Ultralytics 모델의 백본으로 사용할 수 있습니다. 모델 YAML 파일의 TorchVision 모듈은 사전 학습된 ImageNet 가중치와 함께 torchvision의 swin_t를 불러오며, YOLO 탐지 헤드는 반환된 단일 스트라이드-32 특징 맵을 사용해 학습합니다.
변형 모델과 활용 분야#
- Swin Transformer V2: 2022년에 설계를 매개변수 30억 개와 최대 1,536×1,536픽셀 이미지까지 확장했습니다. 학습 안정성을 유지하기 위해 스케일링된 코사인 어텐션과 로그 간격의 연속 위치 편향을 사용합니다.
- 비디오 동작 인식: Video Swin Transformer는 윈도우를 공간과 시간 축을 아우르는 3차원으로 확장해 비디오 클립의 동작을 분류합니다.
- 초해상도 및 복원: SwinIR은 Swin 블록을 사용해 이미지 확대, 노이즈 제거 및 JPEG 아티팩트 제거를 수행합니다.
- 의료 영상 분석: Swin-Unet과 Swin UNETR은 Swin 인코더와 U-Net 방식 디코더를 결합하며, Swin UNETR은 3D MRI 볼륨에서 뇌종양을 세그멘테이션합니다.










