首先声明本教程可以适用于vs2015 和vs2013 .以vs2015为例。
安装必备软件
- vs 2015 /vs2013
- matlab 2016a(64bit)
- 推荐使用Anaconda 2.7 或者Miniconda 2.7这两个Python发布版本
- cmake 3.8.0 以上
- caffe-window: https://github.com/BVLC/caffe/tree/windows
可选软件:
- everything :搜索本地文件
- Rapid Environment Editor:快速编辑环境变量
下面我们介绍整个安装流程:
- 安装python 必要的包
我们这里安装的是anaconda,可以使用conda 来安装,但是实际上安装很慢,为此可以设置国内的源。具体方法如下:Anaconda修改国内镜像源
然后可以安装如下包:
> conda install --yes numpy scipy matplotlib scikit-image pip six> conda install --yes --channel willyd protobuf==3.1.0
2.确认vs,matlab,python,cmake都加入环境变量。
3.编辑build_win
打开caffe-windows/scripts/build_win.cmd,编辑修改如下处:
同时修改conda的位置:
4.运行build_win.cmd。
cmd进入到caffe-windows\scripts目录下,运行build_win.cmd。
该命令会在caffe-windows\scripts\目录下创建一个build文件夹,并且会将额外的库libraries_v140_x64_py27_1.1.0.tar.bz2下载到该文件夹,由于通过命令行下载很慢,我们可以中断命令的执行,手动下载该库文件到build目录下,然后再重新运行上面的指令。
直接从 https://github.com/willyd/caffe-builder/releases 下载,然后将下载好的依赖包, 就放在.caffe\ dependencies\download\ 下。
C:\Users\wcy\.caffe\dependencies\download\libraries_v140_x64_py35_1.1.0.tar.bz2
5.在环境变量path中添加如下值
C:\Users\wcy\.caffe\dependencies\libraries_v140_x64_py27_1.1.0\libraries\bin
C:\Users\wcy\.caffe\dependencies\libraries_v140_x64_py27_1.1.0\libraries\lib
C:\Users\wcy\.caffe\dependencies\libraries_v140_x64_py27_1.1.0\libraries\x64\vc14\bin
也可以为了方便将上述解压后的libraries拷贝到*\caffe-windows\scripts\build目录下。同时相应地修改环境变量path中的值。
添加完后,记得一定要重启电脑。如果忘记添加环境变量或者未重启的话,在matlab测试caffe时,会提示:
caffe_.mexw64 无效的mex文件。
6.编译caffe,matlab,pycaffe项目
用VS2015打开build文件夹下的Caffe.sln,会在VS的资源管理器目录看到: caffe,matlab,pycaffe 三个项目,其默认是编译release版本,我们依次进行编译,可以通过选中项目,分别设为启动项目,选择release版本或者debug版本进行编译,一般只对caffe进行版本的选择,python、matlab只选择release即可。
通过选中项目,右键属性的方式,看到三个项目的配置,以及编译生成的文件保存的路径:
*:\caffe-windows\scripts\build\lib\Release\caffe.lib
*:\caffe-windows\matlab+caffe\private\Release\caffe_.mexw64
*:\caffe-windows\scripts\build\lib\Release\_caffe.pyd
当然也可以在下面编译的过程中观察输出结果。
接下来,我们进行测试。
首先需要下载对应的model。 这里参考文章《Caffe学习系列(20):用训练好的caffemodel来进行分类》
1). 可以直接在浏览器里输入地址下载,也可以运行脚本文件下载。下载地址为:http://dl.caffe.berkeleyvision.org/bvlc_reference_caffenet.caffemodel
文件名称为:bvlc_reference_caffenet.caffemodel,文件大小为230M左右,为了代码的统一,将这个caffemodel文件下载到caffe根目录下的 models/bvlc_reference_caffenet/ 文件夹下面。也可以运行脚本文件进行
python ./scripts/download_model_binary.py models/bvlc_reference_caffenet
2). 均值文件。
有了caffemodel文件,就需要对应的均值文件,在测试阶段,需要把测试数据减去均值。这个文件我们用脚本来下载,在caffe根目录下执行:
./data/ilsvrc12/get_ilsvrc_aux.sh
但是由于该命令是linux下的,所以不能运行。但是我们可以打开该文件,其实就是下载里面的文件,并解压即可。
get_ilsvrc_aux.sh内容:
#!/usr/bin/env sh
#
# N.B. This does not download the ilsvrcC12 data set, as it is gargantuan.
# This script downloads the imagenet example auxiliary files including:
# - the ilsvrc12 image mean, binaryproto
# - synset ids and words
# - Python pickle-format data of ImageNet graph structure and relative infogain
# - the training splits with labelsDIR="$( cd "$(dirname "$0")" ; pwd -P )"
cd "$DIR"echo "Downloading..."wget -c http://dl.caffe.berkeleyvision.org/caffe_ilsvrc12.tar.gzecho "Unzipping..."tar -xf caffe_ilsvrc12.tar.gz && rm -f caffe_ilsvrc12.tar.gzecho "Done."
点击http://dl.caffe.berkeleyvision.org/caffe_ilsvrc12.tar.gz下载后,解压后,均值文件放在 data/ilsvrc12/ 文件夹里。
3). synset_words.txt文件
在调用脚本文件下载均值的时候,这个文件也一并下载好了。里面放的是1000个类的名称。
7.测试matlab
在上面的保存生成路径中,我们可以看到,caffe_.mexw64在*:\caffe-windows\matlab+caffe\private\Release目录下,我们将其拷贝到:上一层目录下,即private目录下。然后打开matlab,将matlab工作路径设置为:
*:\caffe-windows\matlab\demo ,然后新建一个test_caffe.m, 即如下的matlab测试代码,将上面下载下来的model的名称文件synset_words.txt文件拷贝到当前路径下(与test_caffe.m同路径),直接运行test_caffe.m即可。(+caffe是matlab类,对接口进行了封装).
matlab测试code:
% test_caffe.m
close all;clear all;
im = imread('../../examples/images/cat.jpg');%读取图片
figure;imshow(im);%显示图片
[scores, maxlabel] = classification_demo(im, 0);%获取得分第二个参数0为CPU,1为GPU
maxlabel %查看最大标签是谁
figure;plot(scores);%画出得分情况
axis([0, 999, -0.1, 0.5]);%坐标轴范围
grid on %有网格fid = fopen('synset_words.txt', 'r');
i=0;
while ~feof(fid)i=i+1;lin = fgetl(fid);lin = strtrim(lin);if(i==maxlabel)fprintf('the label of %d is %s\n',i,lin)breakend
end
结果:
另一种测试方法:
打开Matlab 切换到 *\caffe\caffe-windows\matlab 路径下,
输入以下命令: caffe.run_tests()
得到如下结果:
>> caffe.run_tests()
Cleared 0 solvers and 0 stand-alone nets
正在运行 caffe.test.test_net
.....
已完成 caffe.test.test_net
__________正在运行 caffe.test.test_solver
.
已完成 caffe.test.test_solver
__________正在运行 caffe.test.test_io
.
已完成 caffe.test.test_io
__________Cleared 0 solvers and 0 stand-alone netsans = 1x7TestResult 数组(具有属性):NamePassedFailedIncompleteDurationDetails总计:7 Passed, 0 Failed, 0 Incomplete.0.79735 秒测试时间。
表明matlab接口安装成功。
8.测试python
将 *:\caffe-windows\python 下的caffe文件夹,拷贝到:python的site-packages 文件夹下,我们这里是:
D:\software\anaconda\Lib\site-packages
其实我们会看到,编译生成的_caffe.pyd 也会在*:\caffe-windows\python\caffe 目录下生成一份。
注意下面的代码中caffe_root 要修改成自己的路径。
python测试code:
# coding=utf-8
'''
Created on 2017年3月9日
'''
#安装Python环境、numpy、matplotlib
import numpy as np
import matplotlib.pyplot as plt#设置默认显示参数
plt.rcParams['figure.figsize'] = (10, 10) # 图像显示大小
plt.rcParams['image.interpolation'] = 'nearest' # 最近邻差值: 像素为正方形
plt.rcParams['image.cmap'] = 'gray' # 使用灰度输出而不是彩色输出import sys
caffe_root = 'E:/caffe-windows/' #该文件要从路径{caffe_root}/examples下运行,否则要调整这一行。
sys.path.insert(0, caffe_root + 'python')import caffeimport os
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_caffenetcaffe.set_mode_cpu()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图像均值 (随着Caffe一起发布的)
mu = np.load(caffe_root + 'python/caffe/imagenet/ilsvrc_2012_mean.npy')
mu = mu.mean(1).mean(1) #对所有像素值取平均以此获取BGR的均值像素值
print 'mean-subtracted values:', zip('BGR', mu)# 对输入数据进行变换
transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape})transformer.set_transpose('data', (2,0,1)) #将图像的通道数设置为outermost的维数
transformer.set_mean('data', mu) #对于每个通道,都减去BGR的均值像素值
transformer.set_raw_scale('data', 255) #将像素值从[0,255]变换到[0,1]之间
transformer.set_channel_swap('data', (2,1,0)) #交换通道,从RGB变换到BGR# 设置输入图像大小
net.blobs['data'].reshape(50, # batch 大小3, # 3-channel (BGR) images227, 227) # 图像大小为:227x227
image = caffe.io.load_image(caffe_root + 'examples/images/cat.jpg')
transformed_image = transformer.preprocess('data', image)
plt.imshow(image)
plt.show()# 将图像数据拷贝到为net分配的内存中
net.blobs['data'].data[...] = transformed_image### 执行分类
output = net.forward()
output_prob = output['prob'][0] #batch中第一张图像的概率值
print 'predicted class is:', output_prob.argmax()
# 加载ImageNet标签
labels_file = caffe_root + 'data/ilsvrc12/synset_words.txt'
# if not os.path.exists(labels_file):
# !../data/ilsvrc12/get_ilsvrc_aux.shlabels = np.loadtxt(labels_file, str, delimiter='\t')print 'output label:', labels[output_prob.argmax()]
结果:
CaffeNet found.
mean-subtracted values: [(‘B’, 104.0069879317889), (‘G’, 116.66876761696767), (‘R’, 122.6789143406786)]

predicted class is: 281
output label: n02123045 tabby, tabby cat
9.测试c++版本
首先 :生成exe应用程序
和编译caffe同样的步骤,直接按照如下图,选择设置为启动项目,进行生成。
我们需要生成caffe.exe compute_image_mean.exe convert_imageset.exe。
1). 下载好MINIST数据:http://pan.baidu.com/s/1o7YrhKe,下载完之后解压,将mnist-test-leveldb与mnist-train-leveldb文件夹放到examples\mnist\文件夹下。
2).修改lenet_train_test.prototxt文件,四处地方:
//需要修改四处地方,如下注释标注
name: "LeNet"
layer {name: "mnist"type: "Data"top: "data"top: "label"include {phase: TRAIN}transform_param {scale: 0.00390625}data_param {source: "....省略/examples/mnist/mnist-train-leveldb" //写上你的绝对路径batch_size: 64backend: LEVELDB //格式改成LEVELDB}
}
layer {name: "mnist"type: "Data"top: "data"top: "label"include {phase: TEST}transform_param {scale: 0.00390625}data_param {source: "....省略/examples/mnist/mnist-test-leveldb"//写上你的绝对路径batch_size: 100backend: LEVELDB //格式改成LEVELDB}
}
修改lenet_solver.prototxt文件,三个地方:
net: "....省略/examples/mnist/lenet_train_test.prototxt" //绝对路径snapshot_prefix: "....省略/examples/mnist/lenet" //绝对路径solver_mode: CPU //CPU模式,
右键caffe打开属性,在调试-命令参数里设置输入:
train --solver=前面的绝对路径/mnist/lenet_solver.prototxt
成功运行!
也可以编写批处理文件run.bat内容如下:
*\caffe\build\tools\Release\caffe.exe train --solver=前面的绝对路径/mnist/lenet_solver.prototxt Pause
即可看到运行界面啦~
至此,caffe在VS2015上成功安装并调试~
参考文献
- caffe官网:https://github.com/BVLC/caffe/tree/windows
- caffe在Windows+VS2015+CPU ONLY下的编译
- Windows下VS2015编译caffe(CPU ONLY)
- 在Windows10上使用Visual Studio 2015 构建Caffe
- caffe/models/bvlc_reference_caffenet/
- (重要) 安装Windows10 和环境下的caffe(新版)
- (重要)Caffe学习系列(20):用训练好的caffemodel来进行分类
- (重要)VS2015+caffe+matlab+python+CPU