モデル・技術

Swin Transformerとは?窓の中だけ見る——階層的ウィンドウ注意がViTの重さを解く

読み:スウィン・トランスフォーマー / 英:Swin Transformer(Shifted Window Transformer)

更新日: 読了目安:約7分

Swin Transformerは、画像をパッチ列として扱うVision Transformer(ViT)系のひとつで、階層的ウィンドウ注意——小さな窓の中だけでAttentionを計算し、層ごとに窓をずらしてつなぐ——設計が特徴です。ViTが「画像全体を一度に見る」重さを抱えたのに対し、Swinは「まず近所だけ、次の階で広げる」というCNNに近い発想をTransformerに持ち込みました。本記事はパラメータ数の比較より、なぜ窓に区切るのかに焦点を当てます。

試験で問われる見方

Swin Transformer単独の定義問題はまだ少ないですが、ViTの延長線として押さえます。ViTは「画像をパッチに分割し、Transformerの仕組みを画像認識に適用するモデル」(G-328TF-123)——Swinもこの系譜です。

同時に、Attentionの計算対象G-295)と、CNNとの対比——畳み込みではなくパッチ列のTransformer処理——を混同しないことが得点源です。

ViTが重くなる理由

ViTは画像を一定サイズのパッチに切り、各パッチをトークンとして系列化します。典型のViTでは、すべてのパッチ同士にSelf-Attentionをかける——いわば画像全体を一度に見渡す——設計です。

パッチ数を n とすると、注意の計算はおおむね O(n²) で増えます。解像度を上げるほどパッチが増え、メモリと計算が急増する。これが「Transformerを画像にそのまま持ち込むと重い」という課題です。

  • ViTの強み — 長距離の依存関係を1層でつなげられる
  • ViTの弱み — 高解像度・密な予測(セグメンテーションなど)でコストが厳しい
  • Swinの問い — 全体を見ずに、どう精度を落とさずに軽くするか

ウィンドウ注意とシフト

Swinの答えはウィンドウ内の局所Self-Attentionです。画像上の小さな矩形(ウィンドウ)ごとにパッチをまとめ、その窓の中だけで注意を計算します。窓の外のパッチとは、その層では直接やり取りしません。

しかし窓だけだと、隣の窓の情報が届かない——「部屋の壁で遮断された」状態です。Swinはシフトしたウィンドウ注意(Shifted Window)でこれを解きます。奇数層と偶数層でウィンドウの切り方を半分ずらし、前の層では別窓だったパッチが、次の層では同じ窓に入るようにします。

操作役割イメージ
ウィンドウ注意計算量を局所に抑える近所のパッチだけ会話
ウィンドウシフト窓をまたぐ情報伝達隣の部屋とも次の階で顔を合わせる
相対位置バイアス窓内の位置関係を表現絶対座標より柔軟な位置づけ

結果として、層を重ねるほど実効的な受容野が広がり、遠いパッチ間の関係も学習できます。全パッチ一括の注意より軽く、かつViTの「関係性を直接つなぐ」利点も残す——これがSwinの設計の芯です。

階層とパッチマージ

SwinはViTの「単一解像度のパッチ列」だけで終わりません。パッチマージ(Patch Merging)で隣接パッチをまとめ、段階的に系列を短く・チャネルを太くします——CNNがプーリングで特徴マップを縮小するのに似た階層構造です。

  1. Stage 1 — 細かいパッチ、高解像度の特徴
  2. Stage 2〜4 — マージを繰り返し、粗いスケールへ
  3. 出力 — 複数スケールの表現——検出・セグメンテーション向き

分類だけなら最終段の表現で足りますが、物体の位置まで欲しいタスクでは、粗い段と細かい段の両方が効きます。FPNがCNNバックボーンから多スケール特徴を抜くのと同様、SwinはTransformer単体で階層的バックボーンになり得ます。

どこで使われるか

  • 画像分類 ImageNetなどでViT系として高精度——ViTそのものとの比較対象
  • 物体検出・セグメンテーション バックボーンとして採用され、DETRなどとは別系統の「特徴抽出器」としても登場
  • 事前学習の土台 MAEBEiTが対象とするViTに代わる、または補完するバックボーンとして研究・実装で参照される

試験ではモデル名そのものより、「画像=パッチ列+Transformer」「Attentionで関係をとる」「CNNとは違う経路」というViT共通の骨格を押さえる方が再利用しやすいです。

ViT系の位置づけ

観点典型ViTSwin Transformer
注意の範囲全パッチ(グローバル)ウィンドウ内(局所)+シフトで接続
解像度基本は単一スケールパッチマージで階層化
計算高解像度で重い局所注意で効率化
CNNとの関係対抗軸として語られる階層性を積極的に取り込む
試験G-328・TF-123の定義ViT系の改良として理解

SimCLRMAEが「どう学習するか」、Swinは「どう構造するか」——自己教師ありのレシピと、アーキテクチャの工夫は別軸で整理すると試験でも実務でも混乱しません。

すり替えに注意

誤った説明正しい理解
Swin=CNNパッチ列のTransformer。畳み込み演算そのものではない(G-239)
Swin=ViTと完全同一ViT系だが、ウィンドウ注意と階層化が独自の改良点
ウィンドウ注意=畳み込みどちらも局所性を使うが、Self-Attentionと畳み込みは別メカニズム
画像をピクセル列1本で処理ViT同様、パッチ単位で系列化(G-328)
Swin=RNN並列なAttention処理 vs 逐次の隠れ状態更新
全パッチ間の注意が常に必要Swinは局所+シフトで実効的な広がりを得る

よくある質問

Swin TransformerとViTの違いは?

Vision Transformer(ViT)は画像パッチ列に対して全パッチ間のグローバルSelf-Attentionを行うのが典型です。Swin Transformerはウィンドウ内の局所注意に限定し、層をまたいでウィンドウをシフトさせることで遠方のパッチとも情報を交換します。さらにパッチマージで解像度を下げ、CNNのように階層的な特徴マップを作ります。

ウィンドウ注意とは何ですか?

画像を小さな矩形のウィンドウに区切り、各ウィンドウの中のパッチ同士だけでSelf-Attentionを計算する方式です。全パッチ対全パッチの注意より計算量が小さくなります。隣接ウィンドウが直接つながらない問題は、次の層でウィンドウ位置をずらすシフト操作で解消します。

Swin TransformerはCNNですか?

いいえ。Swin Transformerは画像をパッチ列としてTransformerで処理する系統であり、畳み込みニューラルネットワーク(CNN)そのものではありません。ただしパッチマージで解像度を段階的に下げるなど、CNNが持つ階層的な特徴抽出の利点をViT系アーキテクチャに取り込んだ設計です。