Windows 10 & Visual Studio 2015 配置 Caffe

来源:互联网 发布:怎么加入淘宝类目群 编辑:程序博客网 时间:2024/04/25 08:42

笔记本是双显卡,读研的时候成功的在Ubuntu下配置好了一次Caffe,并且完成了深度学习的实验,前不久因为一个小的问题,导致NVIDIA驱动出了问题,以后再也没有在Ubuntu下成功配置好Caffe,不浪费时间在双显卡配置上了,转移到Windows下,正好也方便整理笔记。

首先是我的安装过程中需要注意的问题,其实大部分问题都是阅读完整个文档都可以解决,但是通常不喜欢阅读英文文档,或者一眼带过,很容易丢掉一些细节,介绍完我的安装步骤和问题,我顺手翻译了一下官方的文档。

我的安装步骤

1 Clone仓库,并修改当前路径到caffe目录,切换到Windows分支:

C:\Projects> git clone https://github.com/BVLC/caffe.gitC:\Projects> cd caffeC:\Projects\caffe> git checkout windows
  • 1
  • 2
  • 3
  1. 第一次尝试构建
C:\Projects\caffe> scripts\build_win.cmd
  • 1

CMake出错,我安装了两个CMake,一个是2.8,一个是3.7,前者是编译Qt用的,并且还在使用,不想删掉,在Win10的环境变量中支持排序,将CMake3.7排在前面,就解决了CMake版本的问题,其实这里完全可以删掉2.8,但是我想留着以后编译Qt4.X的时候使用。 
3 继续编译,Ninja找不到,我本机没有安装Ninja,但是在build_win.cmd批处理文件中默认是使用Ninja,把编译选项修改就可以了if NOT DEFINED WITH_NINJA set WITH_NINJA=0 
4 继续编译,下载依赖项失败,手动打开Python下载依赖项的脚本,会看到下面的代码:

WIN_DEPENDENCIES_URLS = {    ('v120', '2.7'):("https://github.com/willyd/caffe-builder/releases/download/v1.0.1/libraries_v120_x64_py27_1.0.1.tar.bz2",                  "3f45fe3f27b27a7809f9de1bd85e56888b01dbe2"),    ('v140', '2.7'):("https://github.com/willyd/caffe-builder/releases/download/v1.0.1/libraries_v140_x64_py27_1.0.1.tar.bz2",                  "427faf33745cf8cd70c7d043c85db7dda7243122"),    ('v140', '3.5'):("https://github.com/willyd/caffe-builder/releases/download/v1.0.1/libraries_v140_x64_py35_1.0.1.tar.bz2",                  "1f55dac54aeab7ae3a1cda145ca272dea606bdf9"),}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

对应不同的编译器版本和Python版本,选择一个合适的,我这里是140和3.5,手动下载依赖项,并拷贝到scripts\build目录下,解压到当前文件夹,就会出现一个libraries的目录,这就是所有的依赖项(还有OpenCV都在里面),继续编译,如果编译器和Python的版本都是对的,那么就会编译成功,大约需要16分钟。

下面是翻译的文档,参考Caffe-Windows项目:

Windows Caffe声明

Caffe的Windows版本是一个实验性的、社区版,是由Guillaume Dumont (@willyd)这个人主持开发的,目前正在开发过程中。 
这是Caffe仓库的一个分支,分支名是Windows,这个分支就是提供一个在Windows上的Caffe框架。

预编译的二进制文件

在appveyor 上的持续化集成CI环境编译构建生成的二进制文件也可以下载,根据不同的配置有如下几个版本。

  • Visual Studio 2015, CPU only, Python 3.5: Caffe Release

  • Visual Studio 2015, CUDA 8.0, Python 3.5: Caffe Release

  • Visual Studio 2015, CPU only, Python 2.7: Caffe Release, Caffe Debug

  • Visual Studio 2015,CUDA 8.0, Python 2.7: Caffe Release

  • Visual Studio 2013, CPU only, Python 2.7: Caffe Release, Caffe Debug

这些链接是关联的CI环境生成的文件,应该会发生变化,需要下载的请关注Caffe的Github

Windows 配置Caffe

需求

  • Visual studio 2013或者2015
  • CMake3.4或者更高版本(用于支持Visual Studio 和 Ninja)

依赖选项

  • Python用于支持pycaffe,选择Anaconda Python 2.7 or 3.5 x64 (or Miniconda),直接安装Anaconda,过程简单
  • MATLAB用于支持Matcaffe
  • CUDA 7.5或者8.0,8.0的话需要使用Visual Studio 2015
  • cnDNN v5

保证CMake和Python都已经添加到环境变量了,如果有多个CMake版本的话,保证CMake3.4或者更高版本的变量值排在低版本的前面,系统会找到第一个符合的版本,若是低版本的没有使用,可以去除低版本的环境变量,现在Windows10 支持调整环境变量顺序。

配置并且编译Caffe

最快的方式在Windows上上手Caffe,只需要在Windows的命令行中执行下面的命令(假设C:\Projects是我们创建的目录,用来编译Caffe):

:: 从GitHub上clone 仓库C:\Projects> git clone https://github.com/BVLC/caffe.git:: 跳转到目录中C:\Projects> cd caffe:: 切换到Windows分支(远程分支,在本地创建并关联到远程分支),C:\Projects\caffe> git checkout windows:: Edit any of the options inside build_win.cmd to suit your needsC:\Projects\caffe> scripts\build_win.cmd
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

上面的代码Windows可以存储到支持的脚本文件,冒号表示注释,扩展名是.cmd,也可以直接在命令行中输入。

其中build_win.cmd也是一个脚本文件,这个脚本用来下载依赖项,创建Visual Studio工程文件(或者Ninja构建文件),并且构建发布的配置,默认情况下,所有需要的DLL都必须拷贝到用到他们的二进制文件旁边(如果可能的话,可以创建硬链接),如果期望禁用这个选项,需要修改这个脚本文件中关于CMake的配置选项,将-DCOPY_PREREQUISITES=0。预编译的二进制库文件,也提供了一个prependpath.bat批处理文件,这个批处理文件可以临时的修改环境变量,让需要的DLL都可以找到。

下面是一些比较复杂的在构建Caffe过程中一些步骤的描述:

安装Caffe的依赖项

默认情况下,CMake会根据编译器版本和Python版本下载和解压预编译好的依赖项,会在build文件夹下创建一个叫作libraries 的目录,这个目录中包含了所有的需要的依赖项。你也可以这样做,根据在caffe-builder中的README自己手动的编译这些依赖项。

使用 cuDNN

使用cuDNN最简单的方式是将cuDNN解压后的cuda目录中的内容拷贝到CUDA工具包的安装目录下,比如,如果是安装的CUDA8.0,然后下载cudnn-8.0-windows10-x64-v5.1.zip,那么应该将cuda目录中的文件拷贝到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0对应的目录下。另外,也可以定义一个CUDNN_ROOT的缓存变量用来只想解压后的cuDNN目录,比如,解压目录是C:/Projects/caffe/cudnn-8.0-windows10-x64-v5.1/cuda,那么,对应的build_win.cmd脚本文件中的CMake的配置就会变成下面样子(其实就是添加一个编译选项),

cmake -G"!CMAKE_GENERATOR!" ^      -DBLAS=Open ^      -DCMAKE_BUILD_TYPE:STRING=%CMAKE_CONFIG% ^      -DBUILD_SHARED_LIBS:BOOL=%CMAKE_BUILD_SHARED_LIBS% ^      -DBUILD_python:BOOL=%BUILD_PYTHON% ^      -DBUILD_python_layer:BOOL=%BUILD_PYTHON_LAYER% ^      -DBUILD_matlab:BOOL=%BUILD_MATLAB% ^      -DCPU_ONLY:BOOL=%CPU_ONLY% ^      -DCUDNN_ROOT=C:/Projects/caffe/cudnn-8.0-windows10-x64-v5.1/cuda ^      -C "%cd%\libraries\caffe-builder-config.cmake" ^      "%~dp0\.."
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

另外一种方式是打开CMake的GUI工具,设置变量,然后点击Generate按钮

仅对CPU构建

如果没有安装CUDA,那么Caffe默认是仅对CPU构建,但是如果已经安装了CUDA,但是还是想只对CPU构建,那么可以修改CMake的编译选项-DCPU_ONLY=1

使用Python接口

推荐使用Anaconda 或者Miniconda这两个Python发布版本(非常简单),为了能成功的编译除Python接口,需要安装下面的包:

conda install --yes numpy scipy matplotlib scikit-image pip six
  • 1

你也将会需要使用protobuf Python包,这个包是与预编译的依赖项兼容的,这个包的安装命令是:

conda install --yes --channel willyd protobuf==3.1.0
  • 1

如果已经安装了额Python,那么将会默认编译Python接口和Python层,如果你想禁用Python层和Python构建版本,那么需要分别修改CMake的编译选项:-DBUILD_python_layer=0-DBUILD_python=0。 
使用Python接口的时候,需要添加C:\Projects\caffe\python到环境变量,并把C:\Projects\caffe\python\caffe拷贝到site_packages目录下。

使用MATLAB接口

根据前面的步骤,然后使用-DBUILD_matlab=ON的编译选项。 
改变当前路径到C:\Projects\caffe\matlab,然后运行下面的命令,运行测试:

caffe.run_tests()
  • 1

如果所有的测试都过了,可以测试是否所有的分类的demo都工作。首先,从目录C:\Projects\caffe中运行python scripts\download_model_binary.py models\bvlc_reference_caffenet从model zoo中下载预先训练好的caffemodel,然后改变当前路径到C:\Projects\caffe\matlab\demo,然后运行classification_demo

使用Ninja产生器

如果想更快的构建,可以选择使用Ninja产生器替换Visual Studio,为了能这样做,在构建脚本文件中修改选项set WITH_NINJA=1,通过conda命令,从GitHub上下载并且安装Ninja:

conda config --add channels conda-forgeconda install ninja --yes
  • 1
  • 2

当使用Ninja的时候,不会产生Visual Studio解决方案文件,Ninja是与make一个体系的,一个选择是使用Visual Studio Code并且使用CMake 扩展和C++扩展。

构建一个共享库

CMake可以被用来构建一个共享库,不仅仅是默认的静态库,为了做到这一点,需要Follow前面的步骤,并且使用-DBUILD_SHARED_LIBS=ON编译选项。需要注意的是,一些测试(具体一些是solver相关的测试)会挂掉,原因是测试的执行文件和Caffe的库不共享在protobuf库中的静态对象。

已知的问题

  • GPUTimer 相关的测试总是挂掉,这个貌似是以为Unix与Windows的不同
  • 构建共享库会挂掉测试
  • 只有使用Ninja产生器,共享库构建才工作
原创粉丝点击