CNN出力サイズ電卓 & 畳み込みアニメ
— カーネル・ストライド・パディングを動かして理解
畳み込みの出力サイズ計算は、E資格の計算問題の定番。 スライダーを動かすと式に数値が代入されてライブ計算され、 カーネルが画像の上を滑るアニメで「なぜその式になるのか」が見えます。 複数層を重ねたときのサイズと受容野を計算できるチェーン電卓つき。
左=入力(薄い外周はパディング/青枠はカーネルの位置・濃いマスは dilation で参照する画素)/ 右=出力マップ
🧮 層を重ねる電卓(サイズ&受容野)
| # | 種類 | k | s | p | d | 出力サイズ | 受容野 |
|---|
⚙️ パラメータ数・乗算回数 ミニ電卓(1つのConv層)
「この畳み込み層の重みは何個?計算量は?」——これも定番の計算テーマです。数値を変えるとライブで再計算されます。
パラメータ数 = k²·Cin·Cout + Cout(バイアス)/ 乗算回数 = k²·Cin·Cout·H·W(H・W=出力サイズ。CNNの解説ページの式と同じ。 Depthwise Separable畳み込みでこれが約 1/Cin + 1/k² に減る話も同ページ参照)
出力サイズの公式(これ1本で全部解ける)
$$O = \left\lfloor \frac{n + 2p - d(k-1) - 1}{s} \right\rfloor + 1$$
- \(n\):入力サイズ、\(k\):カーネルサイズ、\(s\):ストライド、\(p\):パディング、\(d\):ダイレーション
- \(d=1\)(通常の畳み込み)のときは、おなじみの \(O = \lfloor (n + 2p - k)/s \rfloor + 1\) に一致します
- \(d(k-1)+1\) は実効カーネルサイズ——ダイレーションでカーネルが「間をあけて」広がった見かけの大きさです
- プーリング層も同じ式で計算できます(kをプールサイズとして)
受容野(Receptive Field)とは
チェーン電卓の右列に出る受容野は、「その層の出力1マスが、元の入力画像の何×何画素を見ているか」です。 層を重ねるほど・プーリングを挟むほど受容野は広がり、 「深いCNNほど画像の広い範囲の情報を捉えられる」ことが数字で確認できます。 3×3の畳み込みを2回重ねると受容野は5×5——「小さいカーネルを重ねると、大きいカーネル1回と同じ視野をより少ないパラメータで得られる」 というVGGの設計思想も、この電卓で確かめられます。
E資格 練習問題
28×28の入力画像に、カーネルサイズ3、ストライド2、パディング1の畳み込みを適用したとき、出力の空間サイズはどれか(ダイレーションは1とする)。
- 13×13
- 14×14
- 15×15
- 28×28
解答と解説を見る
正解:B. 14×14
\(O = \lfloor (28 + 2 \times 1 - 3)/2 \rfloor + 1 = \lfloor 27/2 \rfloor + 1 = 13 + 1 = 14\)。
割り切れないときは床関数(切り捨て)になる点が引っかけどころです。
上の電卓に n=28 は入りませんが(アニメ用に小さくしています)、チェーン電卓に入力すれば同じ計算を確認できます。
CNNの理論(畳み込みの仕組み・im2col・プーリング)は CNNの解説ページで、 PyTorchでの実装読解は E資格コーディング対策コース・レッスン7で深められます。
\ 公式LINE・登録無料 /
友だち追加で4大特典をプレゼント中🎁
E資格ミニ模試(全15問)/覚えておくべき数式チェック49本
医療現場の生成AI安全活用ガイド/医療AI用語事典100