caffe的python接口下,数据层的定义,均值文件的转化

#一.caffe的python接口下,数据层的定义,均值文件的转化
- 数据格式的设置(以测试caffeNet为例)

import caffe
import sys
sys.path.append('.')
sys.path.append('/home/***/caffe') #根据自己的caffe路径修改,下面两行也一样
sys.path.append('/home/***/caffe/python')
sys.path.append('/home/***/caffe/python/caffe')
import numpy as np
model_file = './models/caffenet_train_iter_40000.caffemodel' #权重文件
mean_file = './models/caffeNet_mean.npy' #均值文件位.npy格式 
deploy_file = './models/deploy.prototxt' #网络文件
caffe.set_mode_gpu() #设置为gpu模式,如果需要cpu运行,改为caffe.set_mode_cpu()
net = caffe.Net(deploy_file, model_file, caffe.TEST)  #初始化网络

# 对输入数据进行变换
# caffe.io.transformer是一个类,实体化的时候构造函数__init__(self, inputs)给一个初值
transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape})
transformer.set_mean('data', np.load(mean_file).mean(1).mean(1))  #加载均值文件
transformer.set_transpose('data', (2, 0, 1))  #由于python存储图片的格式位H*W*Channels,需要转化位 Channel*W,H
transformer.set_raw_scale('data', 255)        #由于python保存图像数据是0-1,所以要转化位0-255
transformer.set_channel_swap('data', (2, 1, 0)) #将BGR转化位RGB
net.blobs['data'].reshape(1, 3, 227, 227)       #设置输入数据的格式

img = caffe.io.load_image(imgPath) #读取图片,imgPath是图片路径
net.blobs['data'].data[...] = transformer.preprocess('data', img) #加载数据
net.forward() #前向传播
predicts = net.blos['prob'][0] #读取caffeNet最后一层的数据
  • 转化均值文件
    • 由于C++模式下均值文件为binaryproto格式,Python要求npy格式,转化代码
import caffe
import sys
sys.path.append('.')
sys.path.append('/home/***/caffe') #根据自己的caffe路径修改,下面两行也一样
sys.path.append('/home/***/caffe/python')
sys.path.append('/home/***/caffe/python/caffe')
import numpy as np
MEAN_PROTO_PATH = './../mean.binaryproto' #已存在均值文件路径
MEAN_NPY_PATH = './../caffeNet_mean.npy'  #生成均值文件路径

blob = caffe.proto.caffe_pb2.BlobProto() # 创建protobuf blob
data = open(MEAN_PROTO_PATH, 'rb' ).read()  #读取均值文件
blob.ParseFromString(data)                  #解析文件内容到blob

array = np.array(caffe.io.blobproto_to_array(blob)) #将blob中的均值转换成numpy格式,array的shape (mean_number,channel, hight, width)
mean_npy = array[0]         #一个array中可以有多组均值存在,需要通过下标选择其中一组均值
np.save(MEAN_NPY_PATH ,mean_npy) #保存
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值