学習済みモデルの保存と読み込み

Caffeにおける「学習済みモデルの保存と読み込み」について詳しく説明します。この機能は、学習を途中で中断して再開したり、学習済みの重みをテストや転移学習に利用する際に重要です。


1. 学習済みモデルの保存

Caffeでは、solver.prototxt に以下のような設定を記述することで、定期的にスナップショット(学習中のネットワークの状態)を保存することができます。

設定項目

plaintext
snapshot: 1000 snapshot_prefix: "models/my_model"
  • snapshot: 何イテレーションごとにスナップショットを保存するか(例:1000イテレーションごと)。

  • snapshot_prefix: 保存するファイルのプレフィックス。実際には以下のようなファイルが保存されます。

保存されるファイル例

plaintext
models/my_model_iter_1000.caffemodel // 重みファイル models/my_model_iter_1000.solverstate // ソルバーの状態(学習再開用)

2. モデルの読み込み

(1) テストやファインチューニングのための読み込み

train_val.prototxtdeploy.prototxt を用いた推論やファインチューニングの際、caffe.Net クラスを使って .caffemodel ファイルを読み込みます。

Python例(PyCaffe)

python
import caffe net = caffe.Net('deploy.prototxt', 'models/my_model_iter_1000.caffemodel', caffe.TEST)

C++例

cpp
caffe::Net<float> net("deploy.prototxt", caffe::TEST); net.CopyTrainedLayersFrom("models/my_model_iter_1000.caffemodel");

(2) 学習の再開(resume training)

学習の途中から再開するには、.solverstate ファイルを指定します。

コマンドライン

bash
caffe train --solver=solver.prototxt --snapshot=models/my_model_iter_1000.solverstate

この方法では、オプティマイザの状態(例えば、SGDのモーメンタム値など)も復元されるため、完全な学習の再開が可能です。


3. deploy用のモデル

推論専用で使用する際は、deploy.prototxt(学習に不要なレイヤーを除いた定義ファイル)と、学習済み .caffemodel を組み合わせます。

特記事項

  • deploy.prototxt では data レイヤーを省略し、input フィールドで入力サイズを指定するのが一般的です。

  • 推論時には caffe.TEST モードを使用してください。


まとめ

目的 使用ファイル 使用方法
学習の保存 .caffemodel, .solverstate snapshot機能
学習済みモデル読込 .caffemodel CopyTrainedLayersFrom
再学習(resume) .solverstate –snapshot オプションで指定
推論 .caffemodel + deploy.prototxt caffe.TEST でネットワーク初期化

必要に応じてこれらのファイルを適切に保存・管理することが、効率的なモデル開発と実運用につながります。

生成日:2025/05/23