はじめに
E資格を取得したあと、「次に何をやろう?」と悩んでいた自分の次のステップとして、「画像分類アプリ」を作成しました。
このアプリ開発を通じて、E資格で学んだ知識を実際に使いながらアウトプットし、さらに以下のスキルも身につけることができました。
- ✅ バッチ学習の実装
- ✅ 学習済みモデルのファインチューニング
- ✅ SGD(確率的勾配降下法)による最適化
- ✅ Webアプリの基本的なUI構築(Streamlit)
- ✅ バックエンドAPI(FastAPI)との連携
「E資格は取ったけれど、そのあと何をすればいいかわからない…」
私と同じように悩んでいる方の参考になればと思い今回記事を作成しました。
開発環境と使用ライブラリ
- Windows11
- Python 3.12.7
- 使用した主なライブラリ
- streamlit
- FastAPI
- mlflow
- torch
モデル構成と学習
PyTorch の事前学習済みモデル「ResNet18」をベースに、カスタムデータセット対応の10クラス分類ができるようにファインチューニングを行いました。
下記を参照しファインチューニングのコードを作成しました。
https://medium.com/@imabhi1216/fine-tuning-a-pre-trained-resnet-18-model-for-image-classification-on-custom-dataset-with-pytorch-02df12e83c2c
Webアプリの概要
このアプリでは、以下の10種類の動物画像を分類します。
クラス ラベル名
0 犬(dog)
1 馬(horse)
2 象(elephant)
3 蝶(butterfly)
4 鶏(chicken)
5 猫(cat)
6 牛(cattle)
7 羊(sheep)
8 蜘蛛(spider)
9 リス(squirrel)
使用方法
1. モデル学習(初回のみ)
ResNet18 をベースとして、最終層に層を追加してファインチューニングを行い、10クラス分類モデルを作成
モデルの学習履歴は mlflow ui で確認ができます。
2. サーバ起動
mlflow ui --port 5000
uvicorn main:app --reload --host 127.0.0.1 --port 8000
3. UI起動
streamlit run ui.py
4. UI上で画像を選択する
5. アップロードした画像が10クラスのうちどれに分類されるかを表示する
改善点
現在は、分類対象外の画像(例:風景、車など)も、必ず10クラスのいずれかに分類されてしまいます。
「その他(other)」クラスを追加する。
おわりに
E資格で学習した内容を実際に手を動かすことで、AI開発のイメージをつけることができました。
次回は自然言語をテーマにして記事を作成したいと考えています。
以下本記事のコード
https://github.com/Jatm1019/ai_application_classes