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上成功安装并调试~

 

 

posted @ 2017-04-19 16:19  cak314  阅读(1011)  评论(0编辑  收藏  举报