Swin Transformerは、画像をパッチ列として扱うVision Transformer(ViT)系のひとつで、階層的ウィンドウ注意——小さな窓の中だけでAttentionを計算し、層ごとに窓をずらしてつなぐ——設計が特徴です。ViTが「画像全体を一度に見る」重さを抱えたのに対し、Swinは「まず近所だけ、次の階で広げる」というCNNに近い発想をTransformerに持ち込みました。本記事はパラメータ数の比較より、なぜ窓に区切るのかに焦点を当てます。
試験で問われる見方
Swin Transformer単独の定義問題はまだ少ないですが、ViTの延長線として押さえます。ViTは「画像をパッチに分割し、Transformerの仕組みを画像認識に適用するモデル」(G-328、TF-123)——Swinもこの系譜です。
同時に、Attentionの計算対象(G-295)と、CNNとの対比——畳み込みではなくパッチ列のTransformer処理——を混同しないことが得点源です。
演習で確認する
G検定:G-328(ViTの定義)、TF-123(ViTの○×)、G-295(Attention)、G-239(CNNとの区別)
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がプーリングで特徴マップを縮小するのに似た階層構造です。
- Stage 1 — 細かいパッチ、高解像度の特徴
- Stage 2〜4 — マージを繰り返し、粗いスケールへ
- 出力 — 複数スケールの表現——検出・セグメンテーション向き
分類だけなら最終段の表現で足りますが、物体の位置まで欲しいタスクでは、粗い段と細かい段の両方が効きます。FPNがCNNバックボーンから多スケール特徴を抜くのと同様、SwinはTransformer単体で階層的バックボーンになり得ます。
どこで使われるか
- 画像分類 ImageNetなどでViT系として高精度——ViTそのものとの比較対象
- 物体検出・セグメンテーション バックボーンとして採用され、DETRなどとは別系統の「特徴抽出器」としても登場
- 事前学習の土台 MAEやBEiTが対象とするViTに代わる、または補完するバックボーンとして研究・実装で参照される
試験ではモデル名そのものより、「画像=パッチ列+Transformer」「Attentionで関係をとる」「CNNとは違う経路」というViT共通の骨格を押さえる方が再利用しやすいです。
ViT系の位置づけ
| 観点 | 典型ViT | Swin Transformer |
|---|---|---|
| 注意の範囲 | 全パッチ(グローバル) | ウィンドウ内(局所)+シフトで接続 |
| 解像度 | 基本は単一スケール | パッチマージで階層化 |
| 計算 | 高解像度で重い | 局所注意で効率化 |
| CNNとの関係 | 対抗軸として語られる | 階層性を積極的に取り込む |
| 試験 | G-328・TF-123の定義 | ViT系の改良として理解 |
SimCLRやMAEが「どう学習するか」、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系アーキテクチャに取り込んだ設計です。