2016-10-10 7 views
0

私は画像分類にCaffe(http://caffe.berkeleyvision.org/)を使用しています。私はWindows上でそれを使用しており、すべてがうまくコンパイルされているようだ。Caffe - MNSIT - 1つの画像でネットワークを使用するにはどうすればいいですか?

私はMNISTのチュートリアル(http://caffe.berkeleyvision.org/gathered/examples/mnist.html)に従って学習を始めました。私はデータをダウンロードし、\ caffe.exe train --solver = ... examples \ mnist \ lenet_solver.prototxtを実行しました。これは10.000回実行され、精度は98.5であり、lenet_iter_10000.solverstateとlenet_iter_10000.caffemodelの2つのファイルが生成されました。

私自身のイメージを分類しようとするのは面白いかもしれませんが、それは簡単でしょうか?

私は、https://software.intel.com/en-us/articles/training-and-deploying-deep-learning-networks-with-caffe-optimized-for-intel-architecture#Examplesのようなリソースを見つけることができます。しかし、チュートリアル/記事がCNNに実際に1つのインスタンスを入れるようになるたびに、次のポイントにスキップし、新しいモデルをダウンロードするよう指示します。いくつかのリソースはclassifier.bin/.exeを使用するように指示しますが、このファイルはmnistに対してimagenet_mean.binaryprotoなどを使用します。私はこのファイルをどこで見つけて生成するのか分かりません。

私はCaffeを使ってCNNを訓練したとき、1枚の画像を入力して、すでに持っているファイルを使って出力を得る方法を教えてください。

更新:ヘルプに基づいて、ネットワークに画像を認識させましたが、ネットワークの精度が99.0%であっても認識が正しくありません。画像を認識するために、次のPythonコードを使用しました。

NET_FILE = 'deploy.prototxt' 
MODEL_FILE = 'lenet_iter_10000.caffemodel' 
net = caffe.Net(NET_FILE, MODEL_FILE, caffe.TEST) 

im = Image.open("img4.jpg") 
in_ = np.array(im, dtype=np.float32) 
net.blobs['data'].data[...] = in_ 
out = net.forward() # Run the network for the given input image 
print out; 

MNISTの例で画像を正しくフォーマットするかどうかはわかりません。画像は、基本的な4×28×28のグレースケール画像です。画像にさらに多くの変形を加える必要がありますか?

ネットワーク(展開)このようになります(開始および終了):

input: "data" 
input_shape { 
    dim: 1 # batchsize 
    dim: 1 # number of colour channels - rgb 
    dim: 28 # width 
    dim: 28 # height 
} 

.... 

layer { 
    name: "loss" 
    type: "Softmax" 
    bottom: "ip2" 
    top: "loss" 
} 

答えて

0

私が正しく質問を理解していれば、あなたは訓練されたモデルを持っているし、あなた自身の入力画像を使用してモデルをテストしたいです。これを行うには多くの方法があります。

私がよく使う方法の1つは、私が持っているものと同じようなPythonスクリプトを実行することです。here

ちょうどあなたがまた、あなたのモデルのファイル名に次の行を編集ラインにsys.path.append('../../../python')

を編集して、フォルダにmake pycaffeとポイントを使用して、カフェでのpythonを構築する必要があることに留意してください。

NET_FILE = 'deploy.prototxt' 
MODEL_FILE = 'fcn8s-heavy-pascal.caffemodel' 

次の行を編集します。スコアの代わりに、ネットワークの最後のレイヤーを使用して出力を取得する必要があります。

out = net.blobs['score'].data 
+0

ありがとうございます。私はPythonを有効にして、それは働いているようだ。私は明日のあなたのアプローチをテストします:) – MortenGR

+0

更新を見て、あなたはそれが動作していない理由がありますか? – MortenGR

0

元のnetwork.prototxtファイルからdeploy.prototxtファイルを作成する必要があります。あなたのイメージの正しい値を[チャンネル]、[幅]、および[高さ]を置き換える

input: "data" 
input_shape { 
    dim: 1 
    dim: [channles] 
    dim: [width] 
    dim: [height] 
} 

:データ層はこのようにしています。

また、「ラベル」を下に入力するレイヤーは削除する必要があります(通常は損失レイヤーのみになります)。

次に、このdeploy.prototxtファイルを使用して、MATLABまたはPYTHONを使用して入力をテストできます。

+0

アップデートをご覧ください。なぜ動作しないのですか? – MortenGR

+0

caffe.io.load_imageで画像を読み取ります。私はそれを読み込むときにイメージを転置すると信じています。または、ネットワークに挿入する前に画像をトランスポーズしてみてください。 – AHA

関連する問題