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

転移学習——学習済みモデルを賢く使い回す

ゼロから学習すると大変

新しい画像分類タスクを作るとき、何万枚もの画像を集めてゼロからCNNを学習するのは大変です。

  • データ収集に時間とコスト
  • 数日〜数週間の学習時間
  • 高性能なGPUが必要

そこで便利なのが転移学習(Transfer Learning) です。


転移学習とは

転移学習とは「あるタスクで学習した知識を、別のタスクに転用する」手法です。

ImageNet(120万枚の一般画像)で学習した
ResNet-50の重み

この重みには「エッジ・テクスチャ・形状・物体パターン」の
知識がすでに詰まっている

自分のタスク(例: 猫の品種分類)に転用する

人間でも「自動車の運転を覚えた人がトラックに乗るとき」に基礎知識を転用しますよね。それと同じ発想です。


ImageNetの重みが価値ある理由

ImageNet(ILSVRC)は約120万枚、1,000カテゴリの巨大なデータセットです。このデータで学習すると:

浅い層の重みが学ぶもの:
  → エッジ、色の境界、テクスチャ

中間層の重みが学ぶもの:
  → 模様、形状、物体のパーツ

深い層の重みが学ぶもの:
  → 物体全体のパターン(犬、車、人間など)

これらの「視覚的な知識」は、猫品種分類でも工場の欠陥検出でも医療画像診断でも、基礎として役立ちます


2つのアプローチ

転移学習には主に2つの方法があります。

フィーチャー抽出(Feature Extraction)

バックボーンは一切変更せず、ヘッドだけを新しく学習します。

[バックボーン(凍結:重みを更新しない)]

[新しいヘッド(ここだけ学習する)]

凍結(freeze): 重みを固定して更新しないこと。

  • メリット: 少ないデータでも過学習しにくい、学習が速い
  • デメリット: バックボーンの知識に限界がある(ドメインが大きく違う場合)

ファインチューニング(Fine-tuning)

バックボーンも含めて学習しますが、学習率を小さく設定して細かく調整します。

[バックボーン(学習率を小さく:慎重に更新)]

[ヘッド(学習率を大きく:しっかり学習)]
  • メリット: データに特化した微調整ができる、精度が上がりやすい
  • デメリット: データが少ないと過学習のリスクがある

実践的な手順

ステップ1: バックボーンを凍結してヘッドだけ学習

import torch
import torchvision.models as models

# 学習済みResNet-50を読み込む
model = models.resnet50(pretrained=True)

# バックボーンを凍結(重みを更新しない)
for param in model.parameters():
    param.requires_grad = False

# 最後の全結合層(ヘッド)だけを新しいクラス数に変更
num_classes = 10  # 自分のタスクのクラス数
model.fc = torch.nn.Linear(2048, num_classes)
# model.fc だけ requires_grad=True になる

# この状態で学習 → ヘッドだけが更新される

ステップ2: ある程度収束したらファインチューニング

# バックボーンの凍結を解除して、細かく調整
for param in model.parameters():
    param.requires_grad = True

# 学習率を小さく設定(ファインチューニング)
optimizer = torch.optim.Adam([
    {'params': model.fc.parameters(), 'lr': 1e-3},      # ヘッドは普通の学習率
    {'params': model.layer4.parameters(), 'lr': 1e-4},  # 深い層は小さい学習率
    {'params': model.layer3.parameters(), 'lr': 1e-5},  # さらに浅い層はさらに小さく
])

データ量と手法の選び方

自分のデータ量ドメインの差おすすめ手法
少ない近い(一般画像)フィーチャー抽出のみ
少ない遠い(医療・衛星画像など)フィーチャー抽出 + 慎重なファインチューニング
多い近いファインチューニング
多い遠いファインチューニング(全層)

転移学習の効果

転移学習なしの場合 vs 転移学習ありの場合を比較すると:

転移学習なし:
  5,000枚で学習 → 精度 72%

転移学習あり(フィーチャー抽出):
  5,000枚で学習 → 精度 89%

転移学習あり(ファインチューニング):
  5,000枚で学習 → 精度 93%

(数値はイメージ例です)

少ないデータで高精度を達成できるのが転移学習の魅力です。


まとめ

  • 転移学習はImageNetなどで学習済みの重みを別タスクに転用する手法
  • 学習済みバックボーンにはエッジ・パターン・物体の知識が蓄積されている
  • フィーチャー抽出: バックボーンを凍結してヘッドだけ学習。少データに強い
  • ファインチューニング: バックボーンも含めて小さい学習率で調整。精度向上
  • まずフィーチャー抽出で学習し、その後ファインチューニングという2段階が定石

次回は、CNNの歴史的な進化をたどり、各モデルの「革新点」を一気に見ていきます。