Kaggle Tutorial

CV I — CNN 基礎

畳み込みとプーリングの考え方、画像分類 CNN の基本構造を学びます。

画像をどう扱うか#

画像は高さ×幅×チャンネル(RGB なら 3)のテンソルです。全結合で扱うとパラメータが膨大になるため、 **畳み込みニューラルネット(CNN)**で局所パターンを効率よく学習します。

畳み込みとプーリング#

  • 畳み込み(Conv):小さなフィルタを画像上で滑らせ、エッジ・模様などの局所特徴を抽出する
  • プーリング(Pooling):領域を縮約して位置ずれに頑健にし、計算量を減らす

層を重ねるほど、低次(エッジ)→ 高次(形・物体)の特徴を段階的に捉えます。

import torch.nn as nn

cnn = nn.Sequential(
    nn.Conv2d(3, 32, kernel_size=3, padding=1), nn.ReLU(),
    nn.MaxPool2d(2),
    nn.Conv2d(32, 64, kernel_size=3, padding=1), nn.ReLU(),
    nn.AdaptiveAvgPool2d(1),       # 各チャンネルを 1 値に集約
    nn.Flatten(),
    nn.Linear(64, n_classes),
)

入力の正規化と拡張#

  • 画像は ImageNet の平均/標準偏差などで正規化してから入力する
  • 学習データはデータ拡張(反転・回転・切り抜き等)で水増しし過学習を抑える

メモ

ゼロから CNN を学習することは少なく、実戦では次レッスンの転移学習(事前学習済みモデルの ファインチューニング)が主流です。本レッスンは仕組みの理解が目的です。

理解度チェック#

QuizCNN の畳み込み層が主に担う役割は?

次のステップ#

次は実戦の主流、転移学習・ファインチューニングと TTA を学びます。