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

ヘッド——特徴をタスクの答えに変換する

ヘッドとは何か

前回バックボーンが「特徴を抽出するエンジン」だと学びました。では、その特徴をどう「答え」に変換するのか。それがヘッド(Head)の役割です。

[バックボーン] → [特徴マップ] → [ヘッド] → [答え]
                  ↑共通          ↑タスクによって変わる

ヘッドはタスクによって異なります。「猫か犬か」を答えるなら分類ヘッド、画像の中の物体を囲む枠を出すなら検出ヘッド、各ピクセルがどの物体かを答えるならセグメンテーションヘッドです。


分類ヘッド(Classification Head)

分類ヘッドは最もシンプルです。「この画像は何クラスか」を確率で答えます。

バックボーンの出力(特徴マップ)

[Global Average Pooling]  ← 7×7×512 → 512次元ベクトルに圧縮

[全結合層(FC)]           ← 512 → クラス数(例: 1000)

[Softmax]                 ← 確率分布に変換(合計=1)

出力: [犬: 0.85, 猫: 0.10, 鳥: 0.05, ...]

シンプルさが強み: パラメータが少なく、転移学習でヘッドだけ付け替えやすい。


検出ヘッド(Detection Head)

物体検出では「どこに何があるか」を答えます。2つの情報が必要です:

  1. バウンディングボックス: 物体を囲む矩形の位置とサイズ (x, y, w, h)
  2. クラス確率: その矩形内の物体が何かの確率
バックボーンの出力

[検出ヘッド]

複数の出力(アンカーボックスごと):
  ├── x座標のオフセット(数値回帰)
  ├── y座標のオフセット(数値回帰)
  ├── 幅のスケール(数値回帰)
  ├── 高さのスケール(数値回帰)
  ├── 物体らしさのスコア(0〜1)
  └── クラス確率 [犬: 0.8, 猫: 0.1, ...]

アンカーボックス(Anchor Box): 事前に定義したサイズ・縦横比の候補枠です。「大きい横長」「小さい正方形」など複数を用意し、どの候補枠に一番近いかを回帰します。


セグメンテーションヘッド(Segmentation Head)

セマンティックセグメンテーション(意味的分割)では「各ピクセルがどのクラスに属するか」を答えます。

入力: 224×224×3

[バックボーン(Encoder)]  ← 情報を圧縮しながら特徴抽出
  → 7×7×512

[セグメンテーションヘッド(Decoder)]  ← 情報を拡大して解像度を戻す
  → 224×224×クラス数

出力: 各ピクセルのクラス確率マップ
  (例: ピクセル(100,150) → 「人間: 0.95, 背景: 0.04, 車: 0.01」)

エンコーダで圧縮した情報をデコーダで元のサイズに戻す「U字型」の構造がよく使われます(U-Net)。


エンコーダ・デコーダ構造

セグメンテーションの構造を図解すると:

224×224   →  112×112  →  56×56  →  28×28  →  14×14
  [Conv]      [Conv]      [Conv]      [Conv]    ← Encoder



  224×224  ←  112×112 ←  56×56  ←  28×28  ←  14×14
  [出力]      [UpConv]   [UpConv]  [UpConv]  ← Decoder

(UpConv: アップサンプリング + 畳み込みでサイズを拡大する)

U-Netではエンコーダの特徴マップをデコーダに「スキップコネクション」で直接つなぎ、詳細情報の喪失を防ぎます。


3つのヘッドの比較

ヘッドの種類出力形式代表的な使用例
分類ヘッドクラス確率ベクトル(1次元)画像分類、疾患診断
検出ヘッドバウンディングボックス+クラス確率物体検出、顔検出
セグメンテーションヘッドピクセルごとのクラスマップ(2次元)自動運転(車線検出)、医療画像

バックボーンとヘッドの分業

この分業構造の最大のメリットは再利用性です。

バックボーン(ImageNetで学習済み)
    ├── + 分類ヘッド → 犬猫分類器
    ├── + 検出ヘッド → 歩行者検出器
    └── + セグメンテーションヘッド → 医療画像解析

同じバックボーンを使い回せるため、それぞれのタスクでゼロから学習する必要がありません。


まとめ

  • ヘッドはバックボーンの出力(特徴マップ)をタスクの答えに変換する部分
  • 分類ヘッド: GAP + 全結合 + Softmaxで「何のクラスか」を確率で出す
  • 検出ヘッド: バウンディングボックスの位置とクラスを同時に出す
  • セグメンテーションヘッド: エンコーダ・デコーダ構造で各ピクセルのクラスを出す
  • バックボーンとヘッドを分けることでモデルの再利用・付け替えが容易になる

次回は、学習済みのバックボーンを賢く使い回す——転移学習について学びます。