1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

猿でもわかるAIプログラミングシリーズ 🐵💻 転移学習って何?画像認識AIで試してみよう

Posted at

転移学習って何?画像認識AIで試してみよう!

1. はじめに:一からAIを学習させるのは非現実的?

みなさん、こんにちは。AIに興味があって「画像認識AIを作ってみたい!」と思ったことはありませんか?

でも実際に始めようとすると、こんな壁にぶつかります:

  • 何万枚もの画像データが必要...
  • 数時間〜数日の学習時間...
  • GPU環境がないと厳しい...

特にビジネス現場では「そんな時間もリソースもないよ!」というケースが大半です。

そこで登場するのが今回のテーマ「転移学習(Transfer Learning)」。すでに学習済みのAIモデルを使って、自分の目的に合わせたAIを手軽に作る技術です。

この仕組みを活用すれば、少ないデータ・短い時間・少ない計算資源で高精度なAIを作ることが可能になります!

本記事では、実際にPythonとKeras(TensorFlow)を使って、転移学習で画像認識AIを構築する手順を解説します。


2. 転移学習とは?ざっくり理解しよう

転移学習とは、簡単に言えば:

すでに別の目的で学習されたAIの「知識(重み)」を流用して、新しいタスクに活かす手法

です。

たとえば、ImageNetという巨大な画像データセットで学習された「ResNet」や「MobileNet」といったモデルは、すでに「エッジ」「形」「色合い」などの視覚特徴を学習しています。

これらの「目の良さ」をそのまま活かしつつ、自分の特定タスク(例:犬の種類識別、商品画像分類など)に合わせて一部だけ再学習する、というのが転移学習の基本的な考え方です。

図にするとこんな感じです:

[事前学習済みモデル] ⇒ [ヘッド部分(分類層)を差し替える] ⇒ [自分のデータで微調整]

3. 実装してみよう!犬猫画像を使った分類モデル

ここでは、典型的な「犬 vs 猫」を分類するAIを、転移学習で構築してみます。

🔧 使用環境・ライブラリ

📦 ステップ1:ライブラリの読み込み

import tensorflow as tf
from tensorflow.keras.applications import MobileNetV2
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras import layers, models

📸 ステップ2:事前学習済みモデルをロード

base_model = MobileNetV2(weights='imagenet', include_top=False, input_shape=(160, 160, 3))
base_model.trainable = False  # 転移学習の基本:まずは特徴抽出層は凍結

🧱 ステップ3:自分用の分類層(ヘッド)を追加

model = models.Sequential([
    base_model,
    layers.GlobalAveragePooling2D(),
    layers.Dense(1, activation='sigmoid')  # 犬or猫の2クラス分類
])

🚀 ステップ4:学習と評価

model.compile(optimizer='adam',
              loss='binary_crossentropy',
              metrics=['accuracy'])

# ImageDataGeneratorでデータ水増し(少ないデータをカバー)
train_datagen = ImageDataGenerator(rescale=1./255,
                                   rotation_range=20,
                                   zoom_range=0.2,
                                   horizontal_flip=True,
                                   validation_split=0.2)

train_generator = train_datagen.flow_from_directory(
    'path/to/data',
    target_size=(160, 160),
    batch_size=32,
    class_mode='binary',
    subset='training')

val_generator = train_datagen.flow_from_directory(
    'path/to/data',
    target_size=(160, 160),
    batch_size=32,
    class_mode='binary',
    subset='validation')

history = model.fit(train_generator, validation_data=val_generator, epochs=5)

わずか数分で学習完了し、90%以上の精度が出せることもあります!


4. 実務でのコツとハマりがちな落とし穴

✅ 実務でのTips

  • base_model.trainable = Trueにして、あとからファインチューニングも可能(さらに精度UP)
  • データが偏ってる場合はclass_weightの指定が効果的
  • 少量のデータでは**水増し(augmentation)**が超重要!

⚠️ よくある失敗

  • 入力サイズを間違える(MobileNetV2は160x160以上)
  • 学習率が大きすぎて発散(fine-tuning時は特に注意)
  • validationとtrainingが混ざっていて過学習気味

5. 応用例:独自ドメイン画像への応用

実務では、以下のようなケースに転移学習が有効です:

  • 工場の異常検知:正常/異常画像の分類
  • 医療画像:正常/病変部の識別
  • 小売業:商品画像分類、自動タグ付け

いずれも「大量データが難しい」ケースにフィットします。

さらに、YOLOやEfficientNetなどを使って、物体検出や多クラス分類にも拡張可能です。


6. まとめ:転移学習のメリットと展望

転移学習は、AI開発の民主化を加速する技術です。

項目 従来のAI開発 転移学習活用
データ量 数万〜百万枚 数百〜数千枚
学習時間 数時間〜数日 数分〜数時間
実装難度 低〜中

将来的には、よりドメイン特化型の事前学習モデル(例:医療・製造向け)が登場し、転移学習の精度もさらに向上すると予想されます。


💬 最後に

転移学習は「手軽なのに効果抜群」なAI技術です。
本記事を読んだ方は、ぜひ手元の画像データで試してみてください!

「試してみたよ!」「こんな応用したよ!」というコメントも大歓迎です 🙌


ご希望であれば、Qiita投稿用にMarkdown形式で整形することも可能です。修正や追記したい点があればお知らせください!

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?