首先聲明本教程可以適用于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