モノクロタイム

I'm from the future!

【Caffe】meanファイルをbinaryproto形式からnpy形式に変換する

こんにちは,れいじです.

かなり今更感があるのですが,今でも結構悩んでいる人がいるっぽいのでブログに残してみます.

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に変換する

ここを参考にしました.

github.com

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勉強しなきゃ.