Caffe学习笔记 第一部分 - Windows*下BVLC Caffe的安装与配置

作者:Gu, Jianjun

Tensorflow和Caffe是机器学习初学者常用的2种深度学习框架。相对于Tensorflow有简单的python pip一键安装包,Caffe的安装更考验开发者的计算机编译水平,需要自己下载源码编译。尽管caffe的配置教程网上很多,但是网上caffe的各个分支版本也很多,所以初学者在编译时总是会碰到各种奇怪的问题。本文会针对初学者常用的Windows* + Intel CPU的平台上安装配置Caffe做一个较为完整的总结。

Caffe的各个版本简介

官方版本:伯克利BVLC(Berkeley Vision And Learning Center) 版

https://github.com/BVLC/caffe
这个是Caffe的主版本,由伯克利大学维护。其他所有的Caffe版本都是由这个版本分支出去的。这个版本Caffe可以编译出Linux和Windows*版本,支持Nvidia的CUDA加速,但是对CPU的优化不好,而且有关安装和配置的文档很少。从这个版本编译Caffe,需要很强的自我学习和解决问题能力。

微软的Windows*版本

https://github.com/Microsoft/caffe
微软自己维护的一个版本。这个版本简化了Caffe在Windows*下的步骤,自带了一个VS的Solution项目。这个版本同样支持基于CPU和CUDA的算法实现。

Intel Caffe优化版

https://github.com/intel/caffe
Intel维护的版本,这个版本优化了Intel CPU的实现算法,同时提供对Intel Xeon CPU多核和多节点的支持。这个版本里有些算法库对Windows*支持不太好,所以这个分支编译出的Caffe主要还是运行在Linux的服务器平台上做训练工作。

Intel clCaffe 核显OpenCL优化版

https://github.com/01org/caffe
Intel维护的另一个版本,相对于官网BVLC Caffe上的OpenCL分支,优化了基于Intel 核显GPU的OpenCL加速算法。这个版本同时支持Windows* 和Linux平台,适合在有Intel核显的CPU上做一些推理(Inference)场景的工作。

BVLC caffe的编译

安装编译所需要的软件

配置Windows*的环境变量

为了避免等会CMAKE生成编译脚本的时候找不到一些依赖关系,有的没的路径都加一些,包括Cmake, Git, Ananconda以及Python的路径。

Checkout 官网Caffe的代码

运行以下代码,用git从官网caffe上下载Windows*分支。

git clone https://github.com/BVLC/caffe.git
cd caffe
git checkout windows

修改caffe源码代码里的一些编译参数

  • 修改scripts\build_win.cmd
    因为我们没有定义APPVEYOR,所以直接拉到else(大约69行)以后。
    先从APPVEYOR部分把这部分内容拷贝过来
if !PYTHON_VERSION! EQU 2 (
    set CONDA_ROOT=C:\Miniconda-x64
)
:: Set python 3.5 with conda as the default python
if !PYTHON_VERSION! EQU 3 (
    set CONDA_ROOT=C:\Miniconda35-x64
)
set PATH=!CONDA_ROOT!;!CONDA_ROOT!\Scripts;!CONDA_ROOT!\Library\bin;!PATH!

然后根据Windows*环境设置下图中红色方框的部分

1. 编译器是VS2015,设置MSVC_VERSION=14

2. 不需要NINJA来编译,设置WITH_NINJA=0

3. 没有NVDIA GPU,设置CPU_ONLY=1

4. Python版本为3.X,设置PYTHON_VERSION=3

5. 需要pyCaffe支持,设置BUILD_PYTHON=1

  • 如果Python版本不是2.7或3.5,修改
    cmake\WindowsDownloadPrebuiltDependencies.cmake
    Caffe在编译时会自动从网上下载一个依赖库caffe-builder,这个cmake文件负责根据你系统里的VS版本和python版本自动下载预编译好的caffe-builder包。目前网上只有预编译好的VS2013/2015配python2.7/3.5的caffe-builder,如果是python3.6,编译时会报找不到VS2015配python3.6的caffe-builder包。解决方法有2个办法,要么用python3.5的包,要么自己编译caffe-builder。

    对于复用Python3.5的包,可以按照下图中所示,复制DEPENDENCIES_URL_1900_35和DEPENDENCIES_SHA_1900_35 2行,同时修改35为36。

如果希望使用自己编译VS2015加python3.6的caffe-builder,除了要加入上段说到的2行修改外,还需要注释掉下图中WindowsDownloadPrebuiltDependencies.cmake的下图所示的绿色部分,这部分代码是负责从网上下载依赖包并且解压缩到本地目录的。同时要把caffe-builder编译出的libraries目录拷贝到C:\Users\[user name]\.caffe\dependencies这个目录下。(具体caffe-builder的编译,将在本文第3节详细介绍)

开始编译

在caffe的目录下输入scripts\build_win.cmd

开始编译,一切顺利的话,大约10分钟后就编译好了

验证一下编译的结果

接下来运行一下caffe项目自带的examples里的00-classification的代码来验证一下caffe是否能够正常运行

打开anaconda的命令行,进入caffe的examples目录,运行jupyter notebook

在打开的notebook中打开caffe自带的例子 00-calssification.ipynb

这是用一个训练好的Caffe模型来预测动物图片的例子,图片默认是使用Caffe项目里examples\image\cat.jpg。

一路Shift+Enter运行下去,看到第8步predicted输出

predicted class is: 281

第9步输出

output label: n02123045 tabby, tabby cat

预测结果是猫,说明caffe已经正确编译而且能运行了。 

大功告成,开始你的Caffe学习之旅吧

Caffe依赖库Caffe Builder的编译

这一章主要介绍怎么编译Caffe-Builder项目

安装编译所需要的软件

编译软件的需求同2.1部分

配置Windows*的环境变量

环境变量的配置同2.2部分

下载Caffe-Builder源码

Caffe-Builder的开源项目位于 https://github.com/willyd/caffe-builder
目前最新的release为1.1版,可以从这里下载最新的release 1.1.0版的源码
https://github.com/willyd/caffe-builder/releases

修改caffe-builder源码代码里的一些编译参数

修改主要基于2个方面:
首先在Windows*下Ninja编译系统不容易配置好,所以这里选择了Visual Studio 2015作为编译器。修改build_v140_x64.cmd,将红色部分的’Ninja’改为’Visual Studio 14 2015 Win64’

其次是这个Release 1.1.0发布有点时间了,caffe-builder很多依赖的开源项目都搬家或者版本更新了,需要做相应的修改。

1) 修改packages\protobuf\CmakeLists.txt
将图中所示部分protobuf包的Hash值从原来的
14a532a7538551d5def317bfca41dace
修改为
39d6a4fa549c0cce164aa3064b1492dc

2) 修改packages\hdf5\CmakeLists.txt
将图中所示部分的URL从https://www.hdfgroup.org/ftp/HDF5/releases/hdf5-1.8.16/src/CMkae-hdf5-1.8.16.zip 修改为 https://www.hdfgroup.org/ftp/HDF5/releases/hdf5-1.8/hdf5-1.8.16/src/CMkae-hdf5-1.8.16.zip

编译

进到caffe-builder-1.1.0目录下,运行build_v140_x64.cmd开始编译

屏幕输出

最终编译生产的caffe依赖库文件放在build\libraries目录下,你可以将这个libraries目录拷贝到caffe所需要的目录下。

小结

本篇文章主要介绍了官方BVLC Caffe在Windows*下的编译设置过程。BVLC Caffe提供CPU和Nvidia GPU版本的实现,但是在实际学习工作中,初级开发者的电脑平台通常不会装备昂贵的Nvidia显卡,而CPU版本的Caffe因为执行效率不高,只能用来做一些小型的”玩具”实验项目。

下一篇文章,会介绍一种基于Intel集成GPU核显加速的clCaffe框架。通过 clCaffe框架,开发者可以在中小型项目开发中在硬件成本和产品性能之间找到一个很好的平衡点。

有关编译器优化的更完整信息,请参阅优化通知