Raspberry pi で MNIST
この前トレーニングした MNIST で手書き数字を分類してみたが全然ダメ
なんでじゃー
手書き数字は以下
0.jpg | 1.jpg | 2.jpg | 3.jpg | 4.jpg | 5.jpg | 6.jpg | 7.jpg | 8.jpg | 9.jpg |
---|---|---|---|---|---|---|---|---|---|
やったことを記載しておく
meanファイルを作成
$ cd ~/caffe $ ./build/tools/compute_image_mean examples/mnist/mnist_train_lmdb examples/mnist/mean.binaryproto
mean.binaryproto から mean.npy を作成
https://github.com/BVLC/caffe/issues/290 を参考に下記のスクリプトを作成して mean.binaryproto を mean.npy に変換する
- ~/caffe/examples/mnist/mean_bp2npy.py
import caffe import numpy as np import sys if len(sys.argv) != 3: print "Usage: python convert_protomean.py proto.mean out.npy" sys.exit() blob = caffe.proto.caffe_pb2.BlobProto() data = open( sys.argv[1] , 'rb' ).read() blob.ParseFromString(data) arr = np.array( caffe.io.blobproto_to_array(blob) ) out = arr[0] np.save( sys.argv[2] , out )
スクリプトを実行
$ cd ~/caffe/examples/mnist $ python mean_bp2npy.py mean.binaryproto mean.npy
mean.npy ができたので、推論してみる
~/caffe/python/classify.py を使っても良いのだろうが、python の勉強のために下記スクリプトを作成
- ~/caffe/examples/mnist/mnist_iter.py
#!/usr/bin/python import sys, os prototxt = sys.argv[1] model = sys.argv[2] mean = sys.argv[3] imgs = ['0.jpg', '1.jpg', '2.jpg', '3.jpg', '4.jpg', '5.jpg', '6.jpg', '7.jpg', '8.jpg', '9.jpg'] if os.path.exists(prototxt) == False or os.path.exists(model) == False or os.path.exists(mean) == False : print("File does not exist") sys.exit() import cv2 import caffe import numpy as np datas = [] net = caffe.Classifier(prototxt, model, mean=np.load(mean), image_dims=(28,28)) for img in imgs : datas.append(caffe.io.load_image(img, color=False)) outdt = net.predict(datas) for i in range(0, len(imgs)) : sortdt = sorted(range(len(outdt[i])), key=lambda x:outdt[i][x], reverse=True) print '--------- [%s] ---------' % (imgs[i]) for j in sortdt[0:3] : score = outdt[i][j] if score != 0 : print '%d.jpg - %f percent' % (j ,score*100) print ''
スクリプトの実行
$ cd ~/caffe/examples/mnist $ python mnist_iter.py lenet.prototxt lenet_iter_10000.caffemodel mean.npy
全然分類できていない
スクリプトが悪いのか、画像が悪いのか、やり方が悪いのか。。
--------- [0.jpg] --------- 5.jpg - 100.000000 percent --------- [1.jpg] --------- 5.jpg - 100.000000 percent --------- [2.jpg] --------- 5.jpg - 100.000000 percent --------- [3.jpg] --------- 5.jpg - 100.000000 percent --------- [4.jpg] --------- 5.jpg - 100.000000 percent --------- [5.jpg] --------- 5.jpg - 100.000000 percent --------- [6.jpg] --------- 5.jpg - 100.000000 percent --------- [7.jpg] --------- 5.jpg - 100.000000 percent --------- [8.jpg] --------- 5.jpg - 100.000000 percent --------- [9.jpg] --------- 5.jpg - 100.000000 percent
学習回数も頑張って1万回しても結果変わらないし、mean を消しても結果がぼんやりするだけで全然ダメだった
トレーニング時の accuracy ってなんじゃい