あなたは 「機械学習 / 深層学習 / 画像」 の交点にいる用語ページを見ています。 画像認識は パターン認識 の特殊例で、 入力が 2 次元(または 3 次元)の画素配列であることが本質的特徴です。
| 上位概念 | パターン認識 / 機械学習 |
|---|---|
| 同列概念 | 顔認識 / ジェスチャー認識 |
| 下位応用 | 画像分類 / 物体検出 / セグメンテーション / OCR / 衛星画像解析 |
| 前提知識 | ニューラルネットワーク / 深層学習 / PCA |
統計学的に画像認識は「画素ベクトル $x\in\mathbb{R}^{HW C}$ から離散ラベル $y$ を予測する高次元分類問題」です。 一般の分類問題と比べて 次元数が大きい・空間相関がある・回転や照明に頑健性が必要 な点で特殊です。
画像とは大きな数値表です。 28×28 のグレースケール画像なら 784 個の数字、 224×224×3 のカラー画像なら 150,528 個の数字が並んだ「特徴ベクトル」。 画像認識アルゴリズムは、 この超高次元ベクトルから「ネコ」「車」「歩行者」など意味のあるラベルを引き出します。
CNN の 畳み込み層 はスライディングウィンドウで局所パターン(エッジ・コーナー・テクスチャ)を抽出し、 プーリング層 で空間を圧縮、 全結合層 で最終分類を行います。 Vision Transformer (ViT) では画像を 16×16 のパッチに分割しシーケンスとして扱い、 自己注意で関係を学習します。
統計データを「画像」として扱う面白い例として、 SSDSE-B-2026 の 47 都道府県×100 指標行列を 47×100 のグレースケール画像と見ると、 PCA は 画像圧縮、 クラスタリングは 画像セグメンテーション、 異常検出は 欠陥検出 と同じ枠組で語れます。
| タスク | 画像の世界 | SSDSE 都道府県データへの対応 |
|---|---|---|
| 分類 | 猫/犬の判別 | 三大都市圏/地方圏の判別 |
| 物体検出 | 画像内の人物の位置 | 人口急減地域の検出 |
| セグメンテーション | 道路/空/建物の領域分割 | 気候区分の自動分割 |
| 類似検索 | 画像 → 似た画像 | 県 → 統計的に似た県の検索 |
| 異常検知 | 製造ライン上の欠陥 | 異常な人口動態の県 |
画像認識は、 画像 $\mathbf{x} \in \mathbb{R}^{H\times W \times C}$ を入力としラベル $y$ を予測する関数:
$$f_\theta: \mathbb{R}^{H\times W\times C} \to \mathcal{Y}, \quad \hat{y} = f_\theta(\mathbf{x})$$
分類タスクの場合、 出力はソフトマックス:
$$p(y=k \mid \mathbf{x}) = \frac{\exp(z_k)}{\sum_{j=1}^{K} \exp(z_j)}$$
畳み込み演算は離散版相関:
$$(\mathbf{x} \ast \mathbf{w})_{i,j} = \sum_{u=0}^{k-1}\sum_{v=0}^{k-1} \mathbf{x}_{i+u,\,j+v} \mathbf{w}_{u,v} + b$$
学習は経験リスク最小化:
$$\hat{\theta} = \arg\min_\theta \frac{1}{N}\sum_{n=1}^{N} \mathcal{L}(f_\theta(\mathbf{x}_n), y_n) + \lambda R(\theta)$$
クロスエントロピー損失:
$$\mathcal{L}_\text{CE} = -\sum_{k=1}^{K} \mathbb{1}[y=k] \log p(y=k \mid \mathbf{x})$$
物体検出の IoU(評価指標):
$$\mathrm{IoU} = \frac{|A \cap B|}{|A \cup B|}$$
| 記号 | 意味 | 具体例 |
|---|---|---|
| $\mathbf{x}$ | 入力画像 | 224×224×3 のテンソル |
| $y$ | ラベル | クラス番号 ∈ {0,1,…,K-1} |
| $f_\theta$ | パラメータ $\theta$ をもつモデル | CNN, ViT |
| $z_k$ | クラス $k$ のロジット | 最終層の前出力 |
| $\mathbf{w}$ | 畳み込みカーネル | 3×3 や 5×5 の重み |
| $\lambda R(\theta)$ | 正則化項 | L2, Dropout, Weight Decay |
ソフトマックスは「ロジットを確率に変換する関数」。 ロジットが大きい順に確率が高くなり、 合計 1 になります。 クロスエントロピー損失は 正しいクラスの予測確率の負対数 なので、 0 に近いほど学習が進んだことを示します。
畳み込み演算は実質「テンプレートマッチング」。 カーネル $\mathbf{w}$ が画像内のどこかに似たパターンがあれば応答が大きくなります。 これを多重に積むことで、 単純なエッジから複雑な物体パーツへ階層的に表現が立ち上がるのが CNN の本質です。
SSDSE-B-2026 の 47 都道府県×100 指標を 47×100 の単色画像 と見立てて、 画像認識の基礎操作を 1 つずつ実行してみましょう。
| 県\指標 | 総人口 | 出生数 | 大学学生数 | 年平均気温 | 消費支出 |
|---|---|---|---|---|---|
| 東京都 | 1.00 | 0.95 | 1.00 | 0.62 | 0.95 |
| 大阪府 | 0.62 | 0.55 | 0.45 | 0.66 | 0.88 |
| 北海道 | 0.36 | 0.27 | 0.20 | 0.10 | 0.70 |
| 広島県 | 0.19 | 0.16 | 0.18 | 0.58 | 0.78 |
| 沖縄県 | 0.10 | 0.15 | 0.08 | 1.00 | 0.62 |
PCA を「ミニ画像」に当てると、 第 1 主成分は「都市規模」、 第 2 主成分は「気候」を捉えます(東京都=高都市・温暖、 沖縄=低都市・暑、 北海道=中都市・寒)。 これは画像分類で「明るさ成分」「色相成分」を抽出する処理と数学的には同型です。 都道府県を 1 つの画像、 100 指標を 画素 として近傍検索すると「東京の最近傍は神奈川・愛知」「沖縄の最近傍は宮崎・鹿児島」など意味ある結果が得られます。
| クエリ県 | 1 位 | 2 位 | 3 位 |
|---|---|---|---|
| 東京都 | 神奈川県 | 大阪府 | 愛知県 |
| 広島県 | 岡山県 | 福岡県 | 兵庫県 |
| 北海道 | 青森県 | 秋田県 | 岩手県 |
| 沖縄県 | 宮崎県 | 鹿児島県 | 高知県 |
SSDSE-B-2026 を「画像」として読み込み、 画像認識の核となる「特徴抽出 → 分類 → 評価」のパイプラインを実装します。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# SSDSE-B-2026 を 47 都道府県×100 指標の「ミニ画像」として読み込み
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', skiprows=1, encoding='cp932')
df_latest = df.sort_values('年度').groupby('都道府県').last().reset_index()
# 数値列だけを取り出す
X = df_latest.select_dtypes(include=[np.number]).drop(columns=['年度'])
prefs = df_latest['都道府県'].values
print('「画像」サイズ:', X.shape) # (47, 約100)
# 画像と見て表示 (heatmap)
plt.figure(figsize=(10,8))
Xn = (X - X.min())/(X.max() - X.min())
plt.imshow(Xn.values, aspect='auto', cmap='viridis')
plt.yticks(range(len(prefs)), prefs, fontsize=8)
plt.xlabel('指標 (画素)')
plt.title('SSDSE-B-2026 都道府県画像')
plt.colorbar(label='正規化値')
plt.tight_layout(); plt.savefig('ssdse_image.png', dpi=150)# 特徴抽出 (PCA) — 画像認識の「埋め込み」に相当
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
Xs = scaler.fit_transform(X.fillna(X.median()))
pca = PCA(n_components=10)
Z = pca.fit_transform(Xs)
print('累積寄与率:', np.cumsum(pca.explained_variance_ratio_))
# 2 次元プロット
plt.figure(figsize=(8,7))
plt.scatter(Z[:,0], Z[:,1], s=60, c='steelblue')
for i, p in enumerate(prefs):
plt.annotate(p, (Z[i,0], Z[i,1]), fontsize=8)
plt.title('PCA 2 次元埋め込み — 都道府県の「画像分類」')
plt.xlabel('PC1'); plt.ylabel('PC2')
plt.tight_layout(); plt.savefig('ssdse_pca.png', dpi=150)# 分類: 三大都市圏 vs 地方の二値分類
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import cross_val_score
metro = ['東京都','神奈川県','埼玉県','千葉県','大阪府','京都府','兵庫県','奈良県','愛知県','岐阜県','三重県']
y_true = np.array([1 if p in metro else 0 for p in prefs])
clf = LogisticRegression(max_iter=1000)
scores = cross_val_score(clf, Xs, y_true, cv=5, scoring='accuracy')
print('CV accuracy:', scores.mean(), '±', scores.std())
clf.fit(Xs, y_true)
print('TOP3 重要特徴(画素):', X.columns[np.argsort(np.abs(clf.coef_[0]))[-3:]])# k-NN による「画像検索」: 県 → 統計的に似た県の検索
from sklearn.neighbors import NearestNeighbors
nn = NearestNeighbors(n_neighbors=4, metric='cosine').fit(Xs)
dist, idx = nn.kneighbors(Xs)
for i, p in enumerate(prefs[:5]):
print(f"{p}: 近傍 {[prefs[j] for j in idx[i][1:]]}")# CNN を使う場合 (PyTorch) — 47×100 画像を 1ch グレーとして学習
import torch
import torch.nn as nn
import torch.nn.functional as F
class TinyCNN(nn.Module):
def __init__(self, n_classes=2):
super().__init__()
self.conv1 = nn.Conv2d(1, 16, 3, padding=1)
self.conv2 = nn.Conv2d(16, 32, 3, padding=1)
self.pool = nn.AdaptiveAvgPool2d(1)
self.fc = nn.Linear(32, n_classes)
def forward(self, x):
x = F.relu(self.conv1(x))
x = F.relu(self.conv2(x))
x = self.pool(x).flatten(1)
return self.fc(x)
# 47 県を行とした 1 枚の画像から、 行(県)ごとに分類するには
# 入力を (47, 1, 1, 100) のように整形して使う(応用例として)
X_tensor = torch.tensor(Xs[:, None, None, :], dtype=torch.float32)
y_tensor = torch.tensor(y_true, dtype=torch.long)
model = TinyCNN(); opt = torch.optim.Adam(model.parameters(), lr=1e-3)
for epoch in range(50):
opt.zero_grad()
out = model(X_tensor)
loss = F.cross_entropy(out, y_tensor)
loss.backward(); opt.step()
print('最終損失:', loss.item())| タスク | 出力 | 代表モデル | 評価指標 |
|---|---|---|---|
| 分類 | クラスラベル | ResNet, ViT, EfficientNet | Accuracy, Top-5 |
| 検出 | バウンディングボックス+ラベル | YOLO, Faster R-CNN, DETR | mAP@IoU |
| セグメンテーション | 画素ごとのラベル | U-Net, DeepLab, SAM | mIoU, Dice |
| 姿勢推定 | 関節座標 | OpenPose, MediaPipe | PCK, OKS |
| 埋め込み | 特徴ベクトル | CLIP, DINO, SimCLR | Linear probe, Retrieval |
| 生成 | 画像 | Stable Diffusion, DALL-E | FID, CLIPScore |
| 損失 | タスク | 特徴 |
|---|---|---|
| Cross Entropy | 分類 | ソフトマックス出力に |
| Focal Loss | 不均衡分類・検出 | 難サンプル重視 |
| Smooth L1 | バウンディングボックス | 外れに頑健 |
| Dice Loss | セグメンテーション | IoU 直接最適化 |
| Triplet Loss | 埋め込み学習 | アンカー/正例/負例 |
| Contrastive (InfoNCE) | 自己教師あり | CLIP, SimCLR |
| データセット | 画像数 | クラス数 | タスク |
|---|---|---|---|
| MNIST | 70k | 10 | 手書き数字分類 |
| CIFAR-10/100 | 60k | 10/100 | 物体分類 |
| ImageNet | 1.28M | 1000 | 大規模分類 |
| COCO | 330k | 80 | 検出・セグメンテーション |
| ADE20K | 25k | 150 | セマンティックセグ |
| LAION-5B | 5B | — | マルチモーダル |
| 指標 | 用途 | 特徴 |
|---|---|---|
| Accuracy | 分類 | クラス不均衡で誤誘導 |
| F1, Macro-F1 | 分類 | 不均衡データに頑健 |
| Top-5 Acc | 大規模分類 | ImageNet 標準 |
| mAP@IoU | 検出 | 領域の正確さも評価 |
| mIoU, Dice | セグメンテーション | 画素単位重なり |
| FID | 生成画像評価 | 特徴分布の距離 |
CNN は 局所性と 並進不変性を組み込んでいるため、 同じパターンが画像内のどこにあっても同じ重みで応答できます。 MLP は画素位置ごとに別の重みを持つので学習コストが膨大。
大規模事前学習(JFT-300M, LAION-5B)と組み合わせれば ViT は CNN を上回ります。 一方で小規模データセットでは inductive bias を持つ CNN(ConvNeXt 等)が依然強い。
直接の応用は限定的ですが、 表をヒートマップ画像に変換 して CNN で分類する SuperTML や TabNet(Transformer ベース)など、 表データを「画像的に」扱う研究はあります。 都道府県データを地図上にプロットして CNN で都市/地方判定する、 などは可能。
転移学習を使えば 1 クラス 100 枚程度から実用的精度が出ます。 ゼロからの学習は 1 クラス数千枚以上が目安。 自己教師あり前訓練→fine-tuning が現在の主流。
Grad-CAM, Integrated Gradients, SHAP for Image, Attention Rollout などの可視化手法で、 入力画像のどの領域が予測に寄与しているかを画素単位で表示できます。
実務の画像認識ではスクラッチ学習ではなく ImageNet 等で事前学習されたバックボーン を流用するのが基本です。 最終層だけ差し替えて fine-tune する linear probing から、 中間層も含めて再学習する full fine-tuning まで段階があります。
| レベル | 操作 | 必要データ量 | 向き |
|---|---|---|---|
| 特徴抽出 | 事前学習モデルを固定し最終層だけ再学習 | ~100/クラス | 小規模・類似ドメイン |
| Fine-tuning | 全層の重みを少しずつ更新 | ~1k/クラス | 中規模・遠ドメイン |
| Scratch | ランダム初期化から学習 | ~10k+/クラス | 大規模・特殊ドメイン |
前処理パイプラインは リサイズ → 正規化 → 拡張 → バッチ化 の流れ。 ImageNet 統計(平均 [0.485, 0.456, 0.406]、 分散 [0.229, 0.224, 0.225])で正規化することで事前学習モデルとの整合性が取れます。
画像認識は パターン認識 の応用、 機械学習 の下位、 深層学習 の最も成功した適用領域です。 用語の地図全体 も参照してください。
| 階層 | 具体例 |
|---|---|
| 分野 | コンピュータビジョン |
| 技術系統 | CNN / ViT / Diffusion |
| 代表タスク | 分類 / 検出 / セグメンテーション |
| 応用 | 自動運転 / 医療画像 / 衛星 / 工場検査 |