win7+vs2015/13+caffe+matlab+python(CPU only)配置

首先声明本教程可以适用于vs2015 和vs2013 .以vs2015为例。

安装必备软件

可选软件:

下面我们介绍整个安装流程:


  1. 安装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,编辑修改如下处:
1
2

同时修改conda的位置:
3


4.运行build_win.cmd。
cmd进入到caffe-windows\scripts目录下,运行build_win.cmd。
4
该命令会在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项目
5
用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 labels

DIR="$( cd "$(dirname "$0")" ; pwd -P )"
cd "$DIR"

echo "Downloading..."

wget -c http://dl.caffe.berkeleyvision.org/caffe_ilsvrc12.tar.gz

echo "Unzipping..."

tar -xf caffe_ilsvrc12.tar.gz && rm -f caffe_ilsvrc12.tar.gz

echo "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)
        break
    end
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 nets

ans = 

  1x7TestResult 数组(具有属性):

    Name
    Passed
    Failed
    Incomplete
    Duration
    Details

总计:
   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 caffe

import 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_caffenet

caffe.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) images
                              227, 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.sh

labels = 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: 64
    backend: 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: 100
    backend: 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上成功安装并调试~

参考文献

  1. caffe官网:https://github.com/BVLC/caffe/tree/windows
  2. caffe在Windows+VS2015+CPU ONLY下的编译
  3. Windows下VS2015编译caffe(CPU ONLY)
  4. 在Windows10上使用Visual Studio 2015 构建Caffe
  5. caffe/models/bvlc_reference_caffenet/
  6. (重要) 安装Windows10 和环境下的caffe(新版)
  7. (重要)Caffe学习系列(20):用训练好的caffemodel来进行分类
  8. (重要)VS2015+caffe+matlab+python+CPU
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页