#05 人工知能入門 CNN画像認識

CNNの全体構造——畳み込みを積み重ねる

CNN全体のブループリント

これまで「畳み込み」「プーリング」「活性化関数」を個別に学びました。それらを組み合わせたCNN全体の構造を見ていきましょう。

基本的なパターンは非常にシンプルです:

[Conv → ReLU → Pooling] を繰り返す

    全結合層(FC層)

       出力(分類結果)

基本ブロック: Conv → ReLU → Pooling

この3つはセットで使われます。

特徴マップ

[Convolution] ← フィルターで特徴を検出

[ReLU]        ← 負の値を0にする(非線形性を追加)

[MaxPooling]  ← サイズを半分に圧縮

次のブロックへ

なぜこの順番かというと:

  • Conv で「ここにエッジがある」という信号を作る
  • ReLU で「反応していない(弱い)場所」を0にする
  • Pooling で「位置ずれに強くしつつ」サイズを縮小する

LeNet風のシンプルな構成例

LeNetは1998年にLeCun氏が提案した、CNN元祖とも言えるネットワークです。手書き数字認識(MNIST)のために作られました。

入力: 32×32×1(モノクロ画像)

Conv1: カーネル5×5、フィルター6個、パディングなし
  出力: 28×28×6

ReLU1

AvgPool1: 2×2、ストライド2
  出力: 14×14×6

Conv2: カーネル5×5、フィルター16個、パディングなし
  出力: 10×10×16

ReLU2

AvgPool2: 2×2、ストライド2
  出力: 5×5×16

Flatten(平坦化): 5×5×16 = 400次元のベクトルに

FC1: 400 → 120
ReLU3
FC2: 120 → 84
ReLU4
FC3: 84 → 10(0〜9の10クラス)
Softmax

サイズ変化の計算

Conv後のサイズ計算式:

出力サイズ = (入力サイズ + 2×パディング - カーネルサイズ) / ストライド + 1

LeNetの各層でサイズを確認:

入力: 32×32

Conv1(カーネル5、パディング0、ストライド1):
  (32 + 0 - 5) / 1 + 1 = 28

Pool1(カーネル2、ストライド2):
  28 / 2 = 14

Conv2(カーネル5、パディング0、ストライド1):
  (14 + 0 - 5) / 1 + 1 = 10

Pool2(カーネル2、ストライド2):
  10 / 2 = 5

Flatten(平坦化)

畳み込み部分が終わると、3次元の特徴マップ(高さ×幅×チャンネル)を1次元のベクトルに変換します。

5×5×16 の特徴マップ
  ↓ Flatten
400次元のベクトル [x1, x2, x3, ..., x400]

この後、通常の全結合層(DNN基礎で学んだもの)につながります。全結合層が「特徴を組み合わせて最終判断を行う」部分です。


パラメータ数の比較

LeNetのパラメータ数を計算してみましょう:

パラメータ数計算式
Conv11565×5×1×6 + 6
Conv22,4165×5×6×16 + 16
FC148,120400×120 + 120
FC210,164120×84 + 84
FC385084×10 + 10
合計約6万

たった6万のパラメータで手書き数字を99%以上の精度で認識できます。全結合だけのネットワークと比べると、桁違いに効率的です。


現代のCNNとの違い

LeNetは小さな画像向けです。現代のCNN(例: ResNet-50)は:

入力: 224×224×3(大きいカラー画像)
Conv→BN→ReLU→Pooling → [Residual Block × 16] → GAP → FC
パラメータ数: 約2,500万

構造は複雑になりましたが、基本は同じです。「ConvとReLUとPoolingを積み重ね、最後に全結合で分類する」という骨格は変わっていません。


まとめ

  • CNNの基本は「Conv → ReLU → Pooling」のブロックを繰り返すこと
  • 最後にFlatten + 全結合層 + Softmaxで分類結果を出す
  • サイズ計算式: (入力 + 2×パディング - カーネル) / ストライド + 1
  • LeNetは6万パラメータで手書き数字を高精度で認識できる効率的なモデル
  • 現代のCNNも基本構造は同じで、深さ・幅・工夫が加わっている

次回は、様々なCNNアーキテクチャで共通して使われる「特徴抽出エンジン」——バックボーンの概念を学びます。