Caffe-Python接口常用API参考

1、io.py源码解读

主要是定义了一个transformer,preprocess和deprocess操作,完成caffe和python之间数据的格式转换等,
注意caffe: BGR,0-255,C*H*W,而python是RGB, 0-1,H*W*C的数据格式,所以一般python读取的图片数据要转换成适合caffe用的数据。

 

python接口可以重点看[2][3]

net.params对应网络中的参数(卷积核参数,全连接层参数等),有两个字典值,net.params[0]是权值(weights),net.params[1]是偏移量(biases),权值参数的维度表示是(output_channels, input_channels, filter_height, filter_width),偏移量参数的维度表示(output_channels,)

net.blobs对应网络每一层数据,对于每一层,都是四个维度:(batch_size, channel_dim, height, width)

加载必要的库:


import numpy as np # 加载numpy
import matplotlib.pyplot as plt # 加载matplotlib
%matplotlib inline # 此处是为了能在notebook中直接显示图像

# rcParams是一个包含各种参数的字典结构,含有多个key-value,可修改其中部分值
plt.rcParams['figure.figsize'] = (10, 10) # 图像显示大小,单位是英寸 
plt.rcParams['image.interpolation'] = 'nearest'  # 最近邻差值,像素为正方形
plt.rcParams['image.cmap'] = 'gray'  # 使用灰度输出而不是彩色输出

 加载caffe

import sys
caffe_root = '../'  # caffe根目录,此处为相对路径,如果失灵,可换成绝对路径

# sys.path是一个列表,insert()函数插入一行,也可以使用sys.path.append('模块地址')
sys.path.insert(0, caffe_root + 'python') # 加载caffe的python模块
import caffe # 加载caffe
import os

# 如果该路径下存在caffemodel文件,则打印信息,否则从官网下载
if os.path.isfile(caffe_root + 'models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel'):
    print 'CaffeNet found.'
else:
    print 'Downloading pre-trained CaffeNet model...'
    !../scripts/download_model_binary.py ../models/bvlc_reference_caffenet

 图像预处理


# 加载ImageNet训练集的图像均值,预处理需要减去均值
# ilsvrc_2012_mean.npy文件是numpy格式,其数据维度是(3L, 256L, 256L)
mu = np.load(caffe_root + 'python/caffe/imagenet/ilsvrc_2012_mean.npy') # 加载均值文件
mu = mu.mean(1).mean(1)  
# 对所有像素值取平均以此获取BGR的均值像素值 1代表按行取均值,在这里不是很理解这是如何算法BGR的均值的
print 'mean-subtracted values:', zip('BGR', mu) 
# 取平均后得到BGR均值分别是[104.00698793,116.66876762,122.67891434]

# 对输入数据进行变换
# caffe.io.transformer是一个类,实体化的时候构造函数__init__(self, inputs)给一个初值
# 其中net.blobs本身是一个字典,每一个key对应每一层的名字,#net.blobs['data'].data.shape计算结果为(10, 3, 227, 227)
transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape})

# 以下都是caffe.io.transformer类的函数方法
#caffe.io.transformer的类定义放在io.py文件中,也可用help函数查看说明
# python读取的图片文件格式为H×W×K(高度,宽度,通道数),需转化为K×H×W(通道数,高度,宽度)
transformer.set_transpose('data', (2,0,1))    

transformer.set_mean('data', mu)              # 每个通道减去均值

# python中将图片存储为[0-1]
# 如果模型输入用的是0~255的原始格式,则需要做以下转换,将像素值从[0,1]变换为[0,255]
# 如果模型输入用的是0~1的格式,则不需要用到下一句
transformer.set_raw_scale('data', 255)

# caffe中图片是BGR格式,而原始格式是RGB,所以要转化
transformer.set_channel_swap('data', (2,1,0))

 

参考:

  1. pycaffe学习之(一):io.py源码解读
  2. Caffe学习笔记(1)--Python接口
  3. http://nbviewer.jupyter.org/github/BVLC/caffe/blob/master/examples/net_surgery.ipynb
  4. https://github.com/BVLC/caffe/blob/master/examples/net_surgery.ipynb
  5. Caffe-Python接口常用API参考
  6. caffe中python接口的使用

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值