您的位置:首页 > Web前端

Caffe均值文件binaryproto转npy

2017-11-13 10:46 369 查看
原文:
http://blog.csdn.net/langb2014/article/details/52995968 http://blog.csdn.net/may0324/article/details/52316967
之前做过点项目,整理一下小细节。

mean.binaryproto转mean.npy

首先是生成binaryproto的sh文件

[cpp]
view plain
copy

#!/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."  

然后调用python脚本转换为npy数据

[python]
view plain
copy

#!/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]
view plain
copy

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()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  binaryproto转npy caffe