欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Windows 10 & Visual Studio 2015 配置 Caffe

程序员文章站 2022-06-17 08:53:09
...

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

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

我的安装步骤

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

C:\Projects> git clone https://github.com/BVLC/caffe.git
C:\Projects> cd caffe
C:\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环境编译构建生成的二进制文件也可以下载,根据不同的配置有如下几个版本。

这些链接是关联的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 needs
C:\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-forge
conda 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产生器,共享库构建才工作