こんにちは,れいじです.
かなり今更感があるのですが,今でも結構悩んでいる人がいるっぽいのでブログに残してみます.
Caffeは開発が早いのでどんどんコードがアップデートされていますが,使っている環境を変えるリスクが大きいので中々新しいコードをpullしてくるのが怖いです.とりあえず私が使っているバージョンではcompute_meanで.binaryprotoを吐き出します.最新バージョンではどうなってるのかちょっとよくわかりませんが…
mean.binaryprotoファイルを作る
caffe/build/tools$ ./compute_image_mean train_lmdb mean.binaryproto
build/toolsフォルダの中にあるcompute_image_meanを使用することでmean.binaryprotoを作る事が出来ます.しかしこのままではプログラム中で使うことが出来ないのでnpyに変換してあげる必要があります.
binaryprotoからnpyに変換する
ここを参考にしました.
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 )
binaryprotoをnpyに変換してくれる便利な機能があるみたいです.
これでclassify.pyで使用できるnpyファイルが出来上がりました.あとはclassify.pyの中身を書き換えて,自分で作ったmeanファイルを使うようにします.
うーん半日弱悩んでしまった…真面目にPython勉強しなきゃ.