コンテンツにスキップ

6.3.1 CNN ロードマップ:画像を特徴マップへ変える

CNN は局所的な視覚パターンを学びます。画像を1行に平坦化するのではなく、小さな領域をスキャンして特徴マップを作ります。

CNN 章関係図

CNN 受容野成長マップ

概念最初の意味
channel色または学習された特徴次元
kernel小さなスライドフィルタ
feature mapフィルタが画像を走査した後の出力
pooling / stride空間サイズを小さくする
transfer learning学習済みの視覚 backbone を再利用する

cnn_first_loop.py を作り、torch をインストールしてから実行します。

import torch
image = torch.randn(1, 3, 32, 32)
conv = torch.nn.Conv2d(in_channels=3, out_channels=8, kernel_size=3, padding=1)
features = conv(image)
print("input_shape:", tuple(image.shape))
print("feature_shape:", tuple(features.shape))

出力:

input_shape: (1, 3, 32, 32)
feature_shape: (1, 8, 32, 32)

形は [batch, channels, height, width] と読みます。畳み込みは 3 入力チャネルを 8 個の学習特徴チャネルに変えました。

順番読む練習すること
16.3.2 畳み込み基礎kernel、stride、padding、channel
26.3.3 CNN 構造畳み込みブロック、pooling、分類ヘッド
36.3.4 古典的アーキテクチャLeNet、AlexNet、VGG、ResNet の直感
46.3.5 転移学習backbone 凍結、fine-tuning
56.3.6 画像分類実践データセット、学習、予測例

CNN shape メモを 1 つ残します。

入力形状
[batch, channels, height, width]
畳み込み出力
out_channels が新しい特徴マップになる
空間変化
stride/padding/pooling により高さと幅が変わる
分類器の橋渡し
conv の特徴は最終的に class logits になる
転移学習の選択
まず freeze し、validation が改善する場合のみ微調整 する

入力画像形状と特徴マップ形状の間で何が変わったか、そして小規模データセットで学習済み CNN backbone が役立つ理由を説明できれば合格です。

確認の考え方と解説
  1. 合格レベルの答えでは、tensor、model layer、loss、backward()、optimizer update を1つの学習ループとしてつなげます。
  2. 証拠には、動く小さな実験、tensor shape の確認、説明できる loss または validation curve を含めます。
  3. shape mismatch、loss が下がらない、過学習、data leakage、Attention/Transformer の data flow を説明できない、といった失敗例を1つ言えればよいです。