画像分類と転移学習 — 少ないデータで賢く学ぶ
画像に「これは何か」のラベルを付ける画像分類は、コンピュータビジョンの最も基本のタスクです。特徴を取り出して分類するパイプラインを動かし、実務の二大テクニック — 学習済み特徴を使い回す転移学習と、1枚を何枚にも増やすデータ拡張 — の効果を目で確かめます。
1. 画素からラベルへ — 分類パイプライン
生の画素をそのまま比較する分類は、照明や位置が少しずれるだけで破綻します(画像から特徴へで見た通りです)。そこで分類は必ず2段構えになります。
- 特徴抽出:画像を、位置ズレやノイズに頑健な数値ベクトルに変換する
- 分類器:特徴空間の中でクラスの境界を引き、確率を出力する
CNN ではこの特徴抽出そのものをデータから学習しますが(畳み込みニューラルネットで既習)、ここでは中身が見える古典的な特徴でパイプライン全体を体感しましょう。下のデモは、ノイズと変形の入った図形(○/△/□)を生成し、3つの特徴(塗りつぶし率・円形度・輪郭方向の均一さ)を測って、学習済みのクラス見本に最も近いクラスを選びます。
分類器の出力はスコアの列(ロジット)を softmax で確率に変換したものです。
2. 特徴は使い回せる — 転移学習
CNNの章で見たように、学習された特徴には階層があります。前半の層はエッジ・色・テクスチャといったどんな画像タスクにも共通する汎用部品で、後半の層ほどタスク固有になります。ここから自然なアイデアが生まれます。
ImageNet(100万枚規模)で事前学習したモデルの前半を「出来上がった特徴抽出器」としてそのまま借り、自分のタスク(数百枚しかない)では最後の分類層だけを学習すればいいのでは? — これが転移学習です。
| 戦略 | 更新する層 | データ量の目安 | 向いている場面 |
|---|---|---|---|
| 特徴抽出(凍結) | 最後の分類層のみ | 数十〜数百枚/クラス | データが少ない・元タスクと似た画像 |
| 部分ファインチューニング | 後半の層+分類層 | 数百〜数千枚 | 画像の見た目がやや違う(医用画像など) |
| 全層ファインチューニング | 全層(小さな学習率で) | 数千枚〜 | データ十分・タスクが大きく異なる |
効果はデータが少ないほど劇的です。下のレースで、訓練データ数を変えながら「ゼロから学習」と「転移学習」の学習曲線を競走させてみてください。
3. 1枚を何枚にも — データ拡張
もう1つの「少データ対策」がデータ拡張(data augmentation)です。ラベルが変わらない変換 — 回転・反転・切り抜き・明るさ変化など — を訓練時にランダムに適用し、1枚の画像から実質的に何十通りもの訓練サンプルを作ります。モデルに「向きや明るさが変わっても同じものは同じ」という不変性をデータで教えているとも言えます。
ただし変換の選び方はタスク次第です。手書き数字の「6」を180°回転すると「9」になりラベルが壊れます。文字認識で左右反転も同罪。「この変換をしてもラベルは本当に不変か?」を必ず自問してください。
4. 現実のデータの落とし穴 — クラス不均衡
実務のデータはきれいに1/3ずつではありません。不良品検査なら99%が「正常」、医療画像なら陽性はごく一部。ここで「精度」だけを見ていると重大な事故が起きます。
5. まとめ
- 分類 = 特徴抽出 + 分類器。出力は softmax による確率。性能は特徴の質でほぼ決まる。
- 転移学習:大規模データで学んだ汎用特徴を借りて、自分のタスクでは最後の層だけ(または後半だけ小さな学習率で)学習。少データで圧倒的に有利。
- データ拡張:ラベル不変の変換で訓練データを増やし、過学習を抑えて不変性を教える。
- クラス不均衡には精度以外の指標と再重み付けで立ち向かう。