2

私はカフェに少し慣れていないので、奇妙な動作をしています。bvlc_reference_caffenet の微調整を使用して、OCR タスクを実行しようとしています。

私は彼らの事前訓練されたネットを取り、最後の FC 層を私が持っている出力クラスの数に変更し、再訓練しました。数千回の反復の後、損失率は ~.001 になり、ネットワーク テストでは 90% を超える精度が得られました。とはいえ、自分でネットワークをデータで実行しようとすると、7 ~ 8% を超えないひどい結果が得られます。

ネットを実行するために使用しているコードは次のとおりです。

[imports]

net = caffe.Classifier('bvlc_reference_caffenet/deploy.prototxt', 'bvlc_reference_caffenet/caffenet_train_iter_28000.caffemodel',  
                       image_dims=(227, 227, 1))

input_image = caffe.io.load_image('/Training_Processed/6/0.png')    
prediction = net.predict([input_image])  # predict takes any number of images, and formats them for the Caffe net automatically    
cls = prediction[0].argmax()

このパフォーマンスが非常に悪い理由について何か考えはありますか?

ありがとう!

PS: 役に立つかもしれないし、役に立たないかもしれないいくつかの追加情報。以下に示すように分類する場合、分類子は実際に特定のクラスを優先しているようです。101 クラスの問題がありますが、最大 15 の異なるクラスしか割り当てられないようです

PPS: また、オーバーフィットしていないこともかなり確信しています。途中でスナップショットを使用してこれをテストしてきましたが、それらはすべて同じ悪い結果を示しています。

4

1 に答える 1

5

投稿したモデルをテストするためのコードには、いくつかのコンポーネントが欠けているようです:

  1. 画像の平均を差し引いていないようです。
  2. チャネルを RGB から BGR にスワップしていません。
  3. 入力を [0..255] の範囲にスケーリングしませんでした。

caffe.Classifierあなたの同様のインスタンスを見ると、次のようになります。

net = caffe.Classifier('bvlc_reference_caffenet/deploy.prototxt',
                       'bvlc_reference_caffenet/caffenet_train_iter_28000.caffemodel', 
                       mean = NP.load( 'ilsvrc_2012_mean.npy' ),
                       input_scale=1.0, raw_scale=255,
                       channel_swap=(2,1,0),
                       image_dims=(227, 227, 1))

テストとトレーニングで同じ入力変換を行うことが重要です。

于 2015-04-21T15:06:11.770 に答える