web-dev-qa-db-ja.com

GoogLeNetモデルの微調整

GoogLeNetモデルを最初からトレーニングしました。しかし、それは私に有望な結果を与えませんでした。
代わりに、データセットでGoogLeNetモデルの微調整を行いたいと思います。誰かが私が従うべき手順を知っていますか?

14
Ashutosh Singla

画像の分類をしようとしていると仮定します。これらは、モデルを微調整するための手順です。

1.分類レイヤー

元の 分類レイヤー"loss3/classifier" は、1000クラスの予測を出力します(mum_outputは1000に設定されています)。適切なnum_outputを含む新しいレイヤーに置き換える必要があります。分類レイヤーの置き換え:

  1. レイヤーの名前を変更します(caffemodelファイルから元のウェイトを読み取るときに、このレイヤーのウェイトと競合しないようにします)。
  2. num_outputを、予測しようとしている出力クラスの適切な数に変更します。
  3. すべての分類レイヤーを変更する必要があることに注意してください。通常は1つだけですが、GoogLeNetにはたまたま3つあります "loss1/classifier""loss2/classifier" および "loss3/classifier" =。

2.データ

微調整する新しいラベルで新しいトレーニングデータセットを作成する必要があります。 lmdbデータセットの作成方法については、たとえば this post を参照してください。

3.どれだけ細かい微調整が必​​要ですか?

モデルを微調整するときは、すべてのモデルの重みをトレーニングするか、一部の重み(通常は下位/下位レイヤーのフィルター)を修正して、最上位のレイヤーの重みのみをトレーニングすることを選択できます。この選択はあなた次第であり、それは通常、利用可能なトレーニングデータの量に依存します(より多くの例を使用するほど、微調整する余裕のあるウェイトが増えます)。
各層(トレーニング可能なパラメーターを保持する)にはparam { lr_mult: XX }があります。この係数は、これらの重みがSGD更新の影響をどの程度受けやすいかを決定します。 param { lr_mult: 0 }を設定すると、このレイヤーの重みが固定され、トレーニングプロセス中に変更されなくなります。
それに応じてtrain_val.prototxtを編集します。

4.カフェを走らせる

caffe trainを実行しますが、初期ウェイトとしてcaffemodelウェイトを指定します。

~$ $CAFFE_ROOT/build/tools/caffe train -solver /path/to/solver.ptototxt -weights /path/to/orig_googlenet_weights.caffemodel 
28
Shai

微調整は、過去の手動機能と比較して有望な精度を達成するための非常に便利なトリックです。 @ Shai は、Caffeを使用してGooglenetを微調整するための優れたチュートリアルを既に投稿しているので、一般的なケースの微調整に関するいくつかの推奨事項とトリックを提供したいと思います。

ほとんどの場合、新しいデータセット(例 Oxford 102 flowerデータセット または Cat&Dog )には次の4つの一般的な状況 CS231n があるというタスク分類問題に直面します。 :

  1. 新しいデータセットは小さく、元のデータセットと似ています。
  2. 新しいデータセットは小さいですが、元のデータセットとは異なります(ほとんどの場合)
  3. 新しいデータセットは大きく、元のデータセットと似ています。
  4. 新しいデータセットは大きいですが、元のデータセットとは異なります。

実際には、ほとんどの場合、ネットワークを最初からトレーニングするのに十分なデータはありませんが、事前トレーニング済みのモデルには十分な場合があります。上記のどのケースでも、CNNをトレーニングするのに十分なデータがあるということだけが重要です。

はいの場合、CNNを最初からトレーニングできます。ただし、実際には、事前トレーニング済みモデルから重みを初期化することは依然として有益です。

いいえの場合、データが元のデータセットと大きく異なるかどうかを確認する必要がありますか?非常によく似ている場合は、完全に接続されたニューラルネットワークまたは SVMで微調整 を微調整するだけです。ただし、元のデータセットと大きく異なる場合は、 一般化を改善するために畳み込みニューラルネットワークを微調整する が必要になる場合があります。

5
RyanLiu