前言
使用caffe也有一小段时间了,但是对于caffe的python接口总是一知半解,最近终于能静下心来,仔细阅读了caffe官方例程,并写下此博客。博文主要对caffe自带的分类例程00-classification.ipynb做了详细的注释,相信能加强这方面的理解。
准备工作
加载必要的库
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
加载网络以及输入预处理
设置cpu模式以及从硬盘加载网络
caffe.set_mode_cpu() # 设置caffe为cpu模式,也可设成gpu模式
model_def = caffe_root + 'models/bvlc_reference_caffenet/deploy.prototxt'
model_weights = caffe_root + 'models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel'
net = caffe.Net(model_def, # 定义模型结构
model_weights, # 包含模型训练权重
caffe.TEST) # 使用测试模式(训练中不能执行dropout)
图像预处理
# 加载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的均值像素值