注意:caffe官方GitHub的caffe-window分支的编译
现在caffe的官方GitHub提供windows版本,因其由官方更新,更新相对及时而且可信赖度高。除了官方的window版,还可以使用Microsoft GitHub上的windows版caffe。
官网caffe地址:https://github.com/BVLC/caffe/tree/windows
Microsoft版caffe地址:https://github.com/Microsoft/caffe
1. 预备阶段
预备阶段需要安装一些软件,但是所需要的版本需要根据caffe的需求而决定.
下面截图来自 https://github.com/BVLC/caffe/tree/windows 的说明文档,可以看到支持VS2013和VS2015,需要安装CMake3.4以后版本,同时选择安装python(只支持2.7和3.5)和matlab,cuda支持7.5或8.0(如果是VS2015只支持8.0)。如果需要cudnn则根据cuda版本而定。
- 安装VS2013或者VS2015
- 安装cuda并添加环境变量
- 下载cudnn并拷贝纸cuda安装路径下
- 安装CMake
- 安装python,安装anaconda或者miniconda
- 安装matlab
2. 修改配置文件并编译
2.1 配置
caffe-windows的配置文件是.\scripts\build_win.cmd
,可以以文本形式打开进行修改。
可能需要修改的地方有
:: 14 for VS201, 12 for VS2013
if NOT DEFINED MSVC_VERSION set MSVC_VERSION=14
:: 用VS编译的话,设为0
if NOT DEFINED WITH_NINJA set WITH_NINJA=0
:: CPU模式还是GPU模式
if NOT DEFINED CPU_ONLY set CPU_ONLY=0
:: python的版本
if NOT DEFINED PYTHON_VERSION set PYTHON_VERSION=2
:: 生成python接口则置为1
if NOT DEFINED BUILD_PYTHON set BUILD_PYTHON=1
:: 允许python layer则置为1
if NOT DEFINED BUILD_PYTHON_LAYER set BUILD_PYTHON_LAYER=1
:: 生成matlab接口则置为1
if NOT DEFINED BUILD_MATLAB set BUILD_MATLAB=1
:: 为了加快编译速度,不运行test代码
if NOT DEFINED RUN_TESTS set RUN_TESTS=0
2.2 安装python依赖库
如果需要编译python接口的话,需要先在cmd中执行下面指令安装一些python依赖包。
conda install --yes cmake ninja numpy scipy protobuf==3.1.0 six scikit-image pyyaml pydotplus graphviz
2.3 编译
以管理员身份打开cmd窗口。
打开文件夹到caffe-windows路径下。
运行
scripts\build_win.cmd
等待编译完成。
3. 测试matlab接口
如果编译了matlab借口,则会在.\matlab\+caffe\private\Release
中生成caffe_.mexw64
文件。
将编译新建的.\build\matlab\Release
文件夹下的caffe_exp
和caffe_.lib
文件拷贝至.\matlab\+caffe\matlab\Release\private
当中。
打开matlab,添加.\matlab
路径当中,运行
caffe.run_test();
如果为报错则编译成功。
3. 测试python接口
python接口有两种使用方式,一种是将.\python
中的文件全拷贝到anaconda安装路径的.\lib\site-package\caffe
文件夹中,可以在python源文件中直接
import caffe
比较推荐另一种方式,因为可以允许使用更多版本的caffe而不至于混乱
# 添加所要使用的caffe的路径到系统路径
caffe_root = 'F:\caffe-windows\python'
import sys
sys.path.insert(0, caffe_root)
#
import caffe
无论采用哪种方式,在执行完import caffe
之后可以看看caffe包的路径是否和自己编译的caffe的路劲一致,如果成功执行且路径一致,则说明python接口编译成功。