はじめに
こんにちは、DL(ディープラーニング)を勉強している大学1年生です。
2025年の4月からプログラミングを本格的に勉強し始め、GCI(東大松尾研が提供するデータサイエンス入門講座)を修了し、現在DL基礎講座を受講しています。
今回は、DL基礎講座の最終課題に向けた学習のアウトプットとして、ResNet50を用いた画像分類に挑戦します。
この記事は、自分自身のポートフォリオとして ResNet50の実装と、その精度改善施策 を行うプロセスを記録し、共有することを目的としています。
※この記事は実装と改善のプロセスに焦点を当てており、ResNetの理論的な詳細には深く立ち入りません。理論的背景については、適切な参考文献をご参照ください。
💻 情報検索
DL基礎講座の教材だけではResNet50の具体的な実装例が少なかったため、インターネットで参考資料を探しました。
-
PyTorch公式ドキュメント:
- 非常に高品質ですが、
torchvision.modelsライブラリの一部として提供されており、ResNet50の構造をゼロから理解して構築するには(今回の目的に対して)規模が大きすぎると感じ、今回は見送りました。
- 非常に高品質ですが、
- https://pystyle.info/pytorch-resnet/
-
https://qiita.com/tchih11/items/377cbf9162e78a639958
- 上記2つの記事は参考になりましたが、ResNetの重要な要素である「ボトルネック構造」がクラスとして定義されておらず、カスタマイズや拡張がしにくいと感じました。また、データ読み込みや学習、評価を構築する必要性があった。
-
https://colab.research.google.com/github/machine-perception-robotics-group/GoogleColabNotebooks/blob/master/notebooks/13_cifar_resnet.ipynb#scrollTo=wJU2RPpSvlQT
- このColabノートブックは、前述の懸念点(ボトルネック構造のクラス定義)をクリアしており、さらに学習やデータ読み込みのコードも一通り含まれていました。
- 結論: このノートブックをベースとして採用し、改善を加えていくことにします。
🛠️ ベースライン構築
採用したColabノートブックを分析したところ、いくつかの改善の余地があると考えました。
- 前処理が手薄: データ正規化(Normalization)や白色化(Whitening)などを追加する余地がある。
- 再現性の欠如: 乱数シードが固定されておらず、実行するたびに結果が変わってしまう可能性がある。
-
高速化の余地: DataLoaderの
num_workers調整など、学習速度を改善できる可能性がある。 - 評価基準の検討: 現在はAccuracy(正解率)のみであり、さらに総正解数 $\div$ 総バッチ数という一般的でない値を用いている。タスクによってはPrecision、Recall、F1スコアなど、他の指標も考慮すべきか検討が必要。
- 正則化の不足: 過学習を防ぐための正則化(Dropout、Weight Decayなど)が導入されていません。
- 転移学習の可能性: ImageNetなどで事前学習された重みを用いた転移学習(ファインチューニング)を行うことで、精度の向上が期待できます。
参考:元リンク(Colab)で提案されていた課題
今回ベースライン構築の参考にしたColabノートブックにも、精度改善のための課題が以下のように記載されていました。これらも参考にしながら改善を進めます。
- 学習の設定を変更し,認識精度の変化を確認しましょう.
- ヒント:プログラムの中で変更できる設定は次のようなものが存在します.
- ミニバッチサイズ
- 学習回数(Epoch数)
- 学習率
- 最適化手法
torch.optim.Adagrad()やtorch.optim.Adam()などが考えられます.- PyTorchで使用できる最適化手法はこちらのページにまとめられています.
ベースライン構築の方針
まずは「ベースラインモデル」を構築します。
その際、元のColabノートブックから以下の2点を優先的に改善します。
- 2. 乱数シードの固定化(実験の再現性を確保するため)
- 4. 評価基準の適切性の検討(モデルを正しく評価するため)
このベースラインモデルを基準とし、その後、他の改善策(1, 3, 5, 6)に順次取り組んでいきます。baselineでは元ファイルにあった回転などの前処理をなくしています。
実際の構築
長くなるので、git-hubにコードを公開しておきます。
おわりに
次回以降は改善モデルを作っていきたいと思います。
いままでエクセルに手入力で実験ログをとっていたので、W&Gの使い方についても調べて活用していこうと思います