ひき肉AI - 実験結果
モデルの解説
本プロジェクトでは、画像分類タスクにおいて「牛肉(beef)」、「鶏肉(chicken)」、「豚肉(pork)」の3つのクラスを識別するためのモデルを構築しました。以下にモデルの詳細と使用した技術について説明します。
1. データ準備と前処理
-
データセット:
合計1,113枚の画像を使用し、891枚をトレーニングデータ、222枚をバリデーションデータとして分割しました。各クラスは均等に分布しており、3クラスに対してバランスの取れたデータセットとなっています。
-
画像検証:
validate_images
関数を用いて、データセット内の全ての画像ファイルが有効であることを確認しました。これにより、破損した画像ファイルによる学習の妨げを防ぎました。
-
データ拡張と正規化:
ImageDataGenerator
を使用し、以下の前処理を実施しました。
- リサイズ: すべての画像を224x224ピクセルに統一。
- 正規化: ピクセル値を0から1の範囲にスケーリング。
-
データ拡張:
回転、水平反転、ズームなどの変換を適用し、モデルの汎化性能を向上させるための多様なデータを生成。
2. モデルアーキテクチャ
-
転移学習の活用: 事前学習済みの
MobileNetV2
モデルをベースとして使用しました。MobileNetV2
は軽量でありながら高性能な特徴抽出能力を持ち、特にモバイルデバイス向けに最適化されています。
-
モデル構成:
-
ベースモデル:
MobileNetV2
のトップ層(分類層)は除外し、画像の特徴を抽出する部分のみを使用。include_top=False
に設定。
-
グローバル平均プーリング層:
空間次元を平均化し、ベースモデルからの出力を1次元ベクトルに変換。
-
全結合層:
3つのクラスに対応する出力層として、ソフトマックス活性化関数を持つDenseレイヤーを追加。
-
モデルの固定:
ベースモデルの重みは固定(
trainable=False
)し、転移学習の効果を活用しつつ、トレーニング時間を短縮。
3. コンパイルとトレーニング
- オプティマイザ:
Adam
を使用し、効率的な最適化を実現。
- 損失関数: クラス数が3つであるため、
categorical_crossentropy
を選択。
- 評価指標: 精度(accuracy)を主要な指標として設定。
- エポック数: 過学習を防ぐために、6エポックでトレーニングを実施。
-
コールバック: 初期のトレーニングでは
EarlyStopping
を導入していましたが、エポック数を6に固定する形でトレーニングを行いました。
結果
トレーニングおよびバリデーションの結果は以下の通りです。
エポック |
トレーニング精度 |
トレーニング損失 |
バリデーション精度 |
バリデーション損失 |
1 |
67.45% |
0.7453 |
98.20% |
0.1996 |
2 |
98.21% |
0.1508 |
100.00% |
0.0835 |
3 |
99.68% |
0.0952 |
98.65% |
0.0806 |
4 |
99.84% |
0.0539 |
99.55% |
0.0544 |
5 |
99.85% |
0.0465 |
100.00% |
0.0392 |
6 |
99.57% |
0.0386 |
98.20% |
0.0550 |
評価
モデルの性能評価
-
高精度:
-
トレーニングおよびバリデーションの精度が共に高く、モデルが3つのクラスを正確に分類できていることが明らかです。特に、バリデーション精度が常に98%以上を維持しており、モデルの汎化性能が優れていることを示しています。
-
損失関数の動向:
-
損失値がエポックを重ねるごとに減少していることから、モデルが誤差を効果的に最小化していることが分かります。特に、バリデーション損失も一貫して減少しており、過学習の兆候が見られにくい状況です。
過学習のリスク
-
エポック数の調整:
-
6エポック目でバリデーション損失が若干増加(0.0392から0.0550)していますが、大幅な増加ではなく、全体としては安定しています。エポック数を適切に設定することで、過学習のリスクを抑えつつ高い性能を維持しています。
-
モデルの単純化:
-
ベースモデルの重みを固定し、転移学習を活用することで、モデルの複雑さを抑えつつ高精度を達成しています。これにより、過学習のリスクが低減されています。
データの品質とバランス
-
クラスバランス:
-
各クラスのデータ数が均等であるため、モデルが特定のクラスに偏ることなく学習できています。これにより、全てのクラスに対して均一な性能を発揮しています。
-
データ拡張:
-
回転、水平反転、ズームなどのデータ拡張を行うことで、モデルが多様なデータに対してロバストに対応できるようになり、汎化性能の向上に寄与しています。
今後の改善点
-
さらなるエポックの検討:
-
現在の設定では6エポックでトレーニングを終了していますが、
EarlyStopping
を導入することで、最適なエポック数を自動的に検出し、過学習をさらに防ぐことが可能です。
-
モデルの微調整(ファインチューニング):
-
ベースモデルの一部の層を訓練可能に設定し、より高度な特徴を学習させることで、モデルの性能をさらに向上させる可能性があります。
-
追加の評価指標:
-
精度以外にも、混同行列やROC曲線、F1スコアなどを用いて、モデルの性能を多角的に評価することが推奨されます。
-
データセットの拡充:
-
より多くのデータを収集し、特に各クラス間でのバリエーションを増やすことで、モデルの汎化能力をさらに高めることが可能です。
まとめ
本プロジェクトでは、転移学習を活用した
MobileNetV2
ベースの画像分類モデルを構築し、3クラス(牛肉、鶏肉、豚肉)の高精度な分類を達成しました。データ拡張や適切なエポック数の設定により、過学習を抑えつつ優れた汎化性能を実現しています。今後はさらなるモデルの最適化やデータセットの拡充を通じて、より堅牢で信頼性の高い分類モデルの開発を目指します。