特徴マップ とくちょうまっぷ
特徴マップFeature MapCNN畳み込みチャンネル中間表現
特徴マップについて教えて
簡単に言うとこんな感じ!
CNNが畳み込み処理をするたびに出力される「ある特徴の位置を示すマップ」が特徴マップだよ。「縦エッジ検出フィルタ」を通すと、縦エッジのある場所だけが光る地図ができるイメージ!フィルタを64個使えば64枚の特徴マップができるんだ。
特徴マップとは
特徴マップ(Feature Map) は、CNN(畳み込みニューラルネットワーク)の各畳み込み層が出力する中間表現です。入力画像にフィルタ(カーネル)を適用した結果であり、「そのフィルタが検出する特徴が、画像のどの位置に強く現れているか」を示す2次元のマップです。
例えば「縦線検出フィルタ」を使うと、画像の中で縦線がある位置の値が大きくなる特徴マップが得られます。64個のフィルタを使えば64枚の特徴マップが生成され、各フィルタが異なる特徴(エッジの方向・曲線・色のパターンなど)を担当します。
CNNが深くなるほど、浅い層では「エッジ・テクスチャ」などの低レベル特徴、深い層では「目・車輪・文字」などの高レベル特徴を表す特徴マップが得られます。この階層的な特徴表現がCNNの強さの源泉です。
特徴マップの次元
畳み込み層の出力テンソルの形は (バッチ数, チャンネル数, 高さ, 幅) で表されます:
import torch
import torch.nn as nn
# 224×224のRGB画像に対して3×3フィルタ64枚を適用
conv = nn.Conv2d(in_channels=3, out_channels=64, kernel_size=3, padding=1)
x = torch.randn(1, 3, 224, 224) # (バッチ=1, チャンネル=3, 高さ, 幅)
output = conv(x)
print(output.shape) # → torch.Size([1, 64, 224, 224])
# 特徴マップ: 64チャンネル × 224×224ピクセル
| 要素 | 意味 |
|---|---|
| チャンネル数 | フィルタの枚数 = 特徴マップの枚数 |
| 高さ × 幅 | 各特徴マップの空間解像度 |
| 各セルの値 | そのフィルタが検出する特徴の強さ |
歴史と背景
- 1989年:LeNetで初めて「特徴マップ」という概念が体系的に使われる
- 2012年:ZeilerらがCNNの特徴マップを可視化し、低層〜高層で異なる特徴を学習することを実証
- 2014年以降:VGG・GoogLeNetで特徴マップの多数積み重ねが有効と確認
- 現在:特徴マップの可視化はモデルのデバッグ・説明可能AIに活用
層の深さと特徴マップの違い
| 層の深さ | 特徴マップの内容 | 空間解像度 | チャンネル数 |
|---|---|---|---|
| 浅い層(1〜2層目) | エッジ、色、方向 | 高い(元画像に近い) | 少ない(32〜64) |
| 中間層 | テクスチャ、部品(目・車輪など) | 中程度 | 中程度(128〜256) |
| 深い層 | 高レベル概念(顔・車・猫) | 低い(小さい) | 多い(512以上) |
関連用語
- 畳み込み層 — 特徴マップを生成する層
- フィルタ / カーネル(CNN) — 特徴マップを作るためのフィルタ
- プーリング層 — 特徴マップを縮小する層
- CNN(畳み込みニューラルネットワーク) — 特徴マップを積み重ねたネットワーク全体