私の質問はcaffeテストの結果です。 Pythonスクリプトの結果は、Caffeテストの結果と等しくありません。私はアレックスネットを使い、テストの精度は0,9033です。Pythonのテスト結果は、Caffeのテスト結果と同じではありません
カフェ試験精度:0.9033
Pythonの精度: 0.8785
私がテストするために40000枚の画像を使用しました。誤分類画像の数は3868です。しかし、私のpython結果の画像を誤分類する数は4859です。問題は何ですか?
ありがとうございます。ここで
は私のカフェテストコマンドです:その後
…/build/tools/caffe test --model …/my_deploy.prototxt --weights …/alex_24_11__iter_200000.caffemodel -gpu 0 -iterations 800
、私が発見し、私のテストデータでPythonスクリプトを試してみたが、私は同じ結果を得ることはありません。 私は前回の別のデータセットでこのスクリプトを使用しましたが、私はCaffeテストで同じ精度を得ましたが、電車中でもテスト中でも平均ファイルを使用しませんでした。しかし、私は列車とテストの両方の平均ファイルを使用しました。平均ファイルに問題があるかもしれませんが、私はチュートリアルで見つけたものすべてを使用しました。
- 私はlmdbを作成しました。
- 私はcompute_image_meanを使ってlmdbから平均ファイルを作成しました。 lmdbの イメージのサイズは256x256です。
- 私はalexnetで227x227の画像を使用しました。
Pythonスクリプト:私のdeploy.prototxt私deploy.prototxtの
layer {
name: "input"
type: "Input"
top: "data"
input_param { shape: { dim: 1 dim: 3 dim: 227 dim: 227 } }
}
最終層の
caffe.set_mode_gpu()
model_def = '…/my_deploy.prototxt'
model_weights = '… /alex_24_11__iter_200000.caffemodel'
net = caffe.Net(model_def, model_weights, caffe.TEST)
blob = caffe.proto.caffe_pb2.BlobProto()
data = open('.../image_mean.binaryproto' , 'rb').read()
blob.ParseFromString(data)
arr = np.array(caffe.io.blobproto_to_array(blob))
out = arr[0]
np.save('.../imageMean.npy' , out)
mu = np.load('…/imageMean.npy')
mu = mu.mean(1).mean(1)
transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape})
transformer.set_transpose('data', (2,0,1))
transformer.set_mean('data', mu)
transformer.set_raw_scale('data', 255)
transformer.set_channel_swap('data', (2,1,0))
net.blobs['data'].reshape(1, 3, 227, 227)
f = open('…/val.txt', 'r')
f2 = open('…/result.txt', 'a')
for x in range(0,40000):
a=f.readline()
a=a.split(' ')
image = caffe.io.load_image('… /'+a[0])
transformed_image = transformer.preprocess('data', image)
net.blobs['data'].data[...] = transformed_image
output = net.forward()
output_prob = output['prob'][0]
f2.write(str(a[0]))
f2.write(str(' '))
f2.write(str(output_prob.argmax()))
f2.write('\n')
まず層
layer {
name: "prob"
type: "Softmax"
bottom: "fc8-16"
top: "prob"
}
他のレイヤはtrain_val.prototxtと同じです。