caffe在Windows+VS2015+CPU ONLY下的编译
最近初接触caffe,刚刚实现了windows 7下VS2015的caffe安装,编译测试成功。
microsoft github的caffe-master支持VS 2013,试着用网上的教程捣鼓了半天在VS2015上看能不能编译成功,结果出现一大堆问题,最后只好放弃。
按照官方github上的说法,Requirements有写Visual Studio 2013 or 2015,应该是能在VS2015上实现的。
而之前见过的caffe+windows的安装教程都是基于VS2013的,本文主要是实现caffe在VS2015的编译。
- 准备工作
首先介绍一下window7下我的配置环境:
VS2015+CMake3.8.0
Miniconda Python 2.7(x64)已安装,可以安装MATLAB加上matcaffe接口。
CPU ONLY,无GPU,CUDA没有安装,cuDNN没有安装。
注意:CMake和Python加到系统变量里去。
- 编译caffe
1. 下载caffe-windows
原文中介绍,在cmd下只通过几句话就可以编译成功:
C:\Projects> git clone https://github.com/BVLC/caffe.git C:\Projects> cd caffe C:\Projects\caffe> git checkout windows :: Edit any of the options inside build_win.cmd to suit your needs C:\Projects\caffe> scripts\build_win.cmd
这个build_win.cmd
会自动下载所需的依赖项并生成Visual Studio的sln文件。
实际上发现国内的网下载GitHub上的东西简直就是渣渣,因此可以先下载zip文件(https://github.com/BVLC/caffe/archive/windows.zip),解压进入script文件夹,可以发现build_win.cmd。
该文件中下面部分需要修改,把后缀改成txt进行编辑:
:: Change to 1 to use Ninja generator (builds much faster) if NOT DEFINED WITH_NINJA set WITH_NINJA=0 //用vs2015的把这里为0 :: Change to 1 to build caffe without CUDA support if NOT DEFINED CPU_ONLY set CPU_ONLY=1 //CPU ONLY的把这里为1 ... :: Change these options for your needs. if NOT DEFINED BUILD_PYTHON set BUILD_PYTHON=1 if NOT DEFINED BUILD_PYTHON_LAYER set BUILD_PYTHON_LAYER=1 if NOT DEFINED BUILD_MATLAB set BUILD_MATLAB=0 //需要MATLAB接口的把这里设置为1
修改完毕把.txt再改成.cmd后缀即可。
2. 下载依赖包
执行上述cmd文件,它又会开始帮你下载依赖项,依然很慢......
于是我们可以再一次先下载好所需的依赖项,然后解压到目标文件夹中。
下载地址:https://github.com/willyd/caffe-builder/releases
按照安装的版本选择所需的依赖文件,比如我是VS2015,就选择v140,Python是2.7版本的,就选择py27..
最后下载的文件是libraries_v140_x64_py27_1.0.1.tar.bz2。
(这些文件各种网盘上也有不少,稍微搜索一下,不一定要通过github下)
解压这个文件,发现是一个libraries文件夹。将压缩文件和libraries文件夹分别放入自动下载文件中默认的下载路径,比如我的是压缩文件放在用户文件夹中的\.caffe\dependencies\download,解压文件夹放在\.caffe\dependencies\libraries_v140_x64_py27_1.0.1.tar.bz2。
将libraies文件夹加入环境变量之中。
这里遇到了一个bug,每次执行build_win.cmd的时候总会用空的文件覆盖我直接放进去的下载好的文件,导致运行错误,没有依赖包存在。
最后修改了caffe-windows\caffe的WindowsDownloadPrebuiltDependencies.cmake,将其中下载依赖包的语句全部删掉,最后成功。
删除部分如下:
if(_download_file)
message(STATUS "Downloading prebuilt dependencies to ${_download_path}")
file(DOWNLOAD "${DEPENDENCIES_URL}"
"${_download_path}"
EXPECTED_HASH SHA1=${DEPENDENCIES_SHA}
SHOW_PROGRESS
)
if(EXISTS ${CAFFE_DEPENDENCIES_DIR}/libraries)
file(REMOVE_RECURSE ${CAFFE_DEPENDENCIES_DIR}/libraries)
endif()
endif()
if(EXISTS ${_download_path} AND NOT EXISTS ${CAFFE_DEPENDENCIES_DIR}/libraries)
message(STATUS "Extracting dependencies")
execute_process(COMMAND ${CMAKE_COMMAND} -E tar xjf ${_download_path}
WORKING_DIRECTORY ${CAFFE_DEPENDENCIES_DIR}
)
endif()
其中WindowsDownloadPrebuiltDependencies.cmake的下载的依赖包版本默认为1.1.0我也把这些相关的改成了1.0.1,因为v1.0.1的依赖包在网盘上一下就找到了-_-||...
3. 生成caffe.sln文件
这里生成sln文件默认可以用build_win.cmd运行生成,也可以用cmake生成。
我是用cmake生成的,caffe-windows目录下新建build文件夹,生成.sln文件放入其中。
CMakeLists.txt中也有部分参数需要修改,比如caffe_option中CPU-ONLY需要改成1等等,这里不太记得了。
用CMake生成时遇到了一个错误,Could NOT find Atlas....
查找原因,发现makefile中的BLAS默认值为altas。修改成open即可。
也可以将CMake里的BLAS值下拉改为Open,就可以成功生成了。
几分钟之后,cmake就会在build的目录下生成一个在VS2015下的caffe.sln工程文件。
4. 编译caffe.sln
用vs2015将caffe.sln打开,并在release x64或者Debug x64生成ALL_BUILD文件,没有报错说明配置应该成功了。
- 测试caffe.exe
这里参考了http://www.cnblogs.com/guanyu-zuike/p/5948670.html
下载MNIST数据库,解压缩后将mnist-test-leveldb与mnist-train-leveldb文件夹放到\examples\mnist下
修改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.exe在D:\caffe\build\tools\Release下):
D:\caffe\build\tools\Release\caffe.exe train --solver=前面的绝对路径/mnist/lenet_solver.prototxt
Pause
即可看到运行界面啦~
至此,caffe在VS2015上成功安装并调试~