Swin Transformer
Swin Transformer 是對 ViT 的重新設計,修補了它在通用視覺上的兩個實務弱點:在高解析度影像上的二次方成本,以及它單一、扁平的尺度。名字是 Shifted WINdow(移位視窗)的縮寫。Swin 不讓每個圖塊跨整張影像去注意其他每個圖塊,而只在小的局部視窗內計算注意力;它也不維持單一固定的詞元解析度,而是建起一座由粗到細、愈來愈寬的詞元金字塔——很像卷積網路的各階段(想想 ResNet 的 C2–C5 特徵圖)。結果是一個能直接插進偵測與分割流程的骨幹,而樸素 ViT 在這些任務上很吃力。
兩個點子撐起了這個設計。第一,以視窗為基礎的多頭自注意力,把特徵圖切成互不重疊的視窗(例如 7x7 個圖塊),只在每個視窗內部跑完整的注意力;因為視窗大小固定,成本隨影像面積線性成長、而非二次方——這正是讓百萬像素輸入變得可行的關鍵改變。第二,由於純粹的視窗化會把資訊永遠困在各視窗裡,交替的層改用移位視窗:視窗格被偏移半個視窗,於是原本在某視窗邊緣的圖塊,現在和它先前的鄰居共處一個視窗,讓資訊得以在連續的層之間跨越視窗邊界流動。
階層是靠各階段之間的圖塊合併(patch merging)建起來的:把 2x2 群相鄰的詞元串接後做線性投影,使空間解析度減半、通道寬度(通常)加倍,正如 CNN 裡的下採樣。從一個細密的格子出發,Swin 在多個尺度上產生特徵圖(常見是輸入的 1/4、1/8、1/16、1/32),這正是特徵金字塔偵測器與分割頭所期望的多尺度輸入。
這些選擇把類似卷積的內建偏好——局部性與由粗到細的階層——重新引入 Transformer,這也是為什麼 Swin 只用 ImageNet-1k 就能訓練得很好、不需 ViT 那種龐大的預訓練,以及為什麼它在 2021 年問世時,成了密集預測(物體偵測、語意與實例分割)的主流通用骨幹,而後續版本更擴展到非常大的模型與高解析度。
Swin 用效率換掉了 ViT「從第一層就全域」的感受野:任一層只看得到視窗內,全域脈絡是透過移位與合併逐步組裝起來的。對於需要在全解析度下立即進行長程推理的任務,這種分階段的局部性可能是個限制,不過在實務上階層通常能補償回來。