CNN(画像分類、転移学習)

機械学習フレームワークTensorFlowにおけるCNN(畳み込みニューラルネットワーク)を用いた画像分類および転移学習について、以下に詳しく説明します。


1. CNN(畳み込みニューラルネットワーク)の概要

CNN(Convolutional Neural Network)は、画像認識に特化したニューラルネットワークの一種で、主に以下の層で構成されます:

  • 畳み込み層(Conv2D):画像から局所特徴(エッジやテクスチャ)を抽出。

  • 活性化関数(ReLUなど):非線形性を導入。

  • プーリング層(MaxPooling2D):空間的なサイズを縮小し、計算効率と特徴の抽象度を高める。

  • 全結合層(Dense):高次特徴を分類タスクに使用。


2. TensorFlowでのCNN画像分類モデル構築の流れ

ステップ1:データの準備

python
import tensorflow as tf from tensorflow.keras.datasets import cifar10 from tensorflow.keras.utils import to_categorical (x_train, y_train), (x_test, y_test) = cifar10.load_data() x_train, x_test = x_train / 255.0, x_test / 255.0 y_train, y_test = to_categorical(y_train), to_categorical(y_test)

ステップ2:モデルの構築

python
from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense model = Sequential([ Conv2D(32, (3,3), activation='relu', input_shape=(32, 32, 3)), MaxPooling2D((2,2)), Conv2D(64, (3,3), activation='relu'), MaxPooling2D((2,2)), Flatten(), Dense(64, activation='relu'), Dense(10, activation='softmax') ])

ステップ3:コンパイルと学習

python
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy']) model.fit(x_train, y_train, epochs=10, validation_split=0.2)

ステップ4:評価と予測

python
model.evaluate(x_test, y_test) predictions = model.predict(x_test)

3. 転移学習(Transfer Learning)

転移学習は、既に大規模データで学習済みのモデル(例:MobileNet, ResNet)をベースにして、新しいタスクに適用する手法です。特徴抽出部分をそのまま活かし、出力層だけを新しい分類タスク用に再学習させます。

実装例:MobileNetV2の転移学習

python
from tensorflow.keras.applications import MobileNetV2 from tensorflow.keras.models import Model from tensorflow.keras.layers import GlobalAveragePooling2D, Dense # 事前学習済みモデルを読み込み(出力層なし) base_model = MobileNetV2(weights='imagenet', include_top=False, input_shape=(224, 224, 3)) base_model.trainable = False # 凍結(fine-tuningしない) # 新しい分類層を追加 x = base_model.output x = GlobalAveragePooling2D()(x) x = Dense(64, activation='relu')(x) predictions = Dense(10, activation='softmax')(x) model = Model(inputs=base_model.input, outputs=predictions) model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])

学習と評価

python
# 必要に応じてデータのリサイズと前処理が必要 # model.fit(x_train_resized, y_train, ...) # model.evaluate(x_test_resized, y_test)

4. 転移学習の応用と利点

  • 少量データでも高精度が可能

  • 学習時間が大幅に短縮される

  • 汎用的な特徴抽出器として高性能


5. まとめ

項目 CNN 転移学習
利点 特徴を自動抽出 学習済みモデルの知識を活用
欠点 多くの学習データが必要 適切なモデル選定が必要
主な用途 自前の画像分類モデル構築 少数クラス分類、実験プロトタイピング

TensorFlowを使ったCNNと転移学習は、画像分類タスクの精度向上と開発効率化に非常に有効なアプローチです。特に、少量のラベル付きデータで高性能モデルを構築したい場合に、転移学習は重要な戦略となります。

生成日:2025/05/22