原文:
http://blog.csdn.net/langb2014/article/details/52995968
http://blog.csdn.net/may0324/article/details/52316967
之前做过点项目,整理一下小细节。
mean.binaryproto转mean.npy
首先是生成binaryproto的sh文件
- #!/usr/bin/env sh
- # Compute the mean image from the imagenet training lmdb
- # N.B. this is available in data/ilsvrc12
- EXAMPLE=.
- DATA=/data/model_train/trainSet
- TOOLS=/data/cuda+digits3.0+cudnnv5+opencv/caffe-master/build/tools
- $TOOLS/compute_image_mean $EXAMPLE/train_lmdb \
- $EXAMPLE/train_lmdb/trainset_mean.binaryproto
- $TOOLS/compute_image_mean $EXAMPLE/test_lmdb \
- $EXAMPLE/test_lmdb/testset_mean.binaryproto
- echo "Done."
- #!/usr/bin/env python
- #coding=gbk
- import numpy as np
- import os
- import sys
- import argparse
- import glob
- import time,datetime
- import scipy.io as scio
- caffe_root = '/data/cuda+digits3.0+cudnnv5+opencv/caffe-master/' #caffe-master
- import sys
- pycaffe_dir=sys.path.insert(0, caffe_root + 'python')
- import caffe
- caffe.set_mode_gpu();
- if len(sys.argv)!=3:
- print "Usage: python convert_mean.py mean.binaryproto mean.npy"
- sys.exit()
- blob = caffe.proto.caffe_pb2.BlobProto()
- bin_mean = open( sys.argv[1] , 'rb' ).read()
- blob.ParseFromString(bin_mean)
- arr = np.array( caffe.io.blobproto_to_array(blob) )
- npy_mean = arr[0]
- np.save( sys.argv[2] , npy_mean )
在终端使用方法
- python convert_mean.py mean.binaryproto mean.npy
其他方法
binaryproto -> npy
import numpy as np
import caffe
import sys
blob = caffe.proto.caffe_pb2.BlobProto()
data = open( 'mean.binaryproto' , 'rb' ).read()
blob.ParseFromString(data)
arr = np.array( caffe.io.blobproto_to_array(blob) )
out = arr[0]
np.save( 'mean.npy' , out )
npy -> binaryproto
data_mean is 1*H*W
import numpy as np
import caffe
import sys
blob = caffe.proto.caffe_pb2.BlobProto()
with open('mean.npy','rb') as f:
data_mean = numpy.load(f)
blob.channels=1
blob.height = data_mean.shape[0]
blob.width = data_mean.shape[1]
blob.data.extend(data_mean.astype(float).flat)
binaryproto_file = open('mean.binaryproto', 'wb' )
binaryproto_file.write(blob.SerializeToString())
binaryproto_file.close()