caffe windows 安装

24 篇文章 0 订阅

下边是转载一篇博客 

隔了大半年,因为论文的需要,又重新开始研究caffe。感谢niuzhiheng’s GitHub大神的贡献,caffe已经可以在Windows下使用了。参考了很多大神的博客,成功的在自己的笔记本配置好了Windows版本的caffe。现将自己的配置过程和配置中遇到的问题记录下来,希望能对大家有所帮助。

1.配置环境

我在自己的笔记本配置的caffe,配置的环境为:Windows 7 64位 + cuda6.5 + Opencv2.49 + VS2013。假设在配置caffe之前,你已经准备好这些。

本文中将给出一些编译好的依赖库,如果你也是用的Windows 7 64位+VS2013,可以直接使用。

2.准备依赖库

在Windows下配置caffe,一个很主要的问题就是依赖库的编译。不像在Ubuntu下那么方便,在Windows下,依赖库都需要使用vs2013进行编译才能使用。下面我将介绍caffe需要的依赖库(如果你也是win7 64位+VS2013,可以直接使用我提供的依赖库)。

2.1 boost

boost可以下载源码进行编译,也可以直接下载安装文件。我使用的是后者,方便、快捷。

我使用的是:boost_1.56_0-msvc-12.0-64.exe

下载地址:http://sourceforge.net/projects/boost/files/boost-binaries/1.56.0/

注意下载适合你的配置环境的boost版本即可。

下载完毕,双击运行安装文件即可。

2.2 Glog+Gflag+Protobuf+LevelDB+HDF5+LMDB+Openblas

这一部分的很多都是谷歌的开源库,不容易下载(你懂的)。所以我使用的是Neil Z. SHAO‘s Blog

提供的编译好的。由于大神给的地址是谷歌网盘,不容易下载。我将它转至百度盘。

下载地址:http://pan.baidu.com/s/1mg1iJrE

下载完,解压得到3rdparty文件夹。在下一段将会用到。

3.建立caffe工程

准备好了caffe需要的依赖库和环境之后,下面就可以建立caffe的vs项目,进行编译了。

3.1 下载caffe源码

可以从caffe的github主页下载源码。

下载地址:Caffe’s GitHub

解压文件,假设caffe源码所在目录为CAFFE_ROOT。

3.2 准备项目需要的依赖库和系统环境变量

经过上一阶段的准备,caffe项目所需的依赖库都已经准备好。

1.首先设置系统环境变量(以我的为例):

CUDA_PATH_V6_5 安装好cuda6.5之后,会自动添加环境变量CUDA_PATH_V6_5

OPENCV_2_49 D:/Tools/opencv2.49/build/

BOOST_1_56 D:/Tools/boost_1_56_0

2.将3rdparty文件夹放到CAFFE_ROOT

3.3 用vs建立caffe项目

1.用VS2013在CAFFE_ROOT下建立 win32 console application,选择空项目。

将项目的平台由32位改为64位

2.修改项目属性

项目——属性——C/C++——常规——附加包含目录

添加:

../include;

../src

../3rdparty/include;

../3rdparty;

../3rdparty/include;

../3rdparty/include/openblas;

../3rdparty/include/hdf5;

../3rdparty/include/lmdb;

../3rdparty/include/leveldb;

../3rdparty/include/gflag;

../3rdparty/include/glog;

../3rdparty/include/google/protobuf;

项目——属相——VC++目录——包含目录

添加:

$(CUDA_PATH_V6_5)\include;

$(OPENCV_2_49)\include;

$(OPENCV_2_49)\include\opencv;

$(OPENCV_2_49)\include\opencv2;

$(BOOST_1_56)

项目——属性——链接器——常规——附加库目录

添加:

$(CUDA_PATH_V6_5)\lib\$(PlatformName);

$(OPENCV_2_49)\x64\vc12\lib;

$(BOOST_1_56)\lib64-msvc-12.0;

..\3rdparty\lib;

项目——属性——链接器——输入——附加依赖项

debug添加:

opencv_ml249d.lib
opencv_calib3d249d.lib
opencv_contrib249d.lib
opencv_core249d.lib
opencv_features2d249d.lib
opencv_flann249d.lib
opencv_gpu249d.lib
opencv_highgui249d.lib
opencv_imgproc249d.lib
opencv_legacy249d.lib
opencv_objdetect249d.lib
opencv_ts249d.lib
opencv_video249d.lib
opencv_nonfree249d.lib
opencv_ocl249d.lib
opencv_photo249d.lib
opencv_stitching249d.lib
opencv_superres249d.lib
opencv_videostab249d.lib
cudart.lib
cuda.lib
nppi.lib
cufft.lib
cublas.lib
curand.lib
gflagsd.lib
libglog.lib
libopenblas.dll.a
libprotobufd.lib
libprotoc.lib
leveldbd.lib
lmdbd.lib
libhdf5_D.lib
libhdf5_hl_D.lib
Shlwapi.lib
gflags.lib
libprotobuf.lib
leveldb.lib
lmdb.lib
libhdf5.lib
libhdf5_hl.lib

release添加:

opencv_ml249.lib
opencv_calib3d249.lib
opencv_contrib249.lib
opencv_core249.lib
opencv_features2d249.lib
opencv_flann249.lib
opencv_gpu249.lib
opencv_highgui249.lib
opencv_imgproc249.lib
opencv_legacy249.lib
opencv_objdetect249.lib
opencv_ts249.lib
opencv_video249.lib
opencv_nonfree249.lib
opencv_ocl249.lib
opencv_photo249.lib
opencv_stitching249.lib
opencv_superres249.lib
opencv_videostab249.lib
cudart.lib
cuda.lib
nppi.lib
cufft.lib
cublas.lib
curand.lib
gflags.lib
libglog.lib
libopenblas.dll.a
libprotobuf.lib
libprotoc.lib
leveldb.lib
lmdb.lib
libhdf5.lib
libhdf5_hl.lib
Shlwapi.lib

3.4 编译caffe

配置好caffe项目的属性之后,下面就可以一步一步的编译caffe了。

3.4.1 编译./src中的文件

首先,将../src文件夹中的*.cpp文件添加到工程中。

技术分享

依次编译每一个*.cpp文件。

1.编译blob.cpp

直接编译时会报错,缺少文件”caffe\proto\caffe.pb.h”

这个时候需要将proto.exe放到../3rdparty/bin文件夹

将GernaratePB.bat放在../scripts文件夹

 

下载地址:http://pan.baidu.com/s/1pJ7Onph

运行bat脚本文件即可生成caffe.pb.h

然后就可以成功编译。

2.编译common.cpp

直接编译这个文件,会出现关于getidfopen_s的错误。可通过如下步骤修改:

在代码前面添加:#include <process.h>

修改项目属性:项目——属性——C/C++——预处理器——预处理器定义

添加:_CRT_SECURE_NO_WARNINGS

在代码中getid的位置进行如下修改:

#ifdef _MSC_VER

pid = getid();

#else

pid = _getid();

#endf

修改完毕之后,可以成功编译。

3.编译net.cpp

直接编译这个文件,会出现关于mkstep、close、mkdtemp的错误。需要进行如下修改:

在io.hpp头文件中添加:#include “mkstep.h”

在io.hpp头文件中,在close()的位置进行如下修改:

#ifdef _MSC_VER

close(fd);

#else

_close(fd);

#endif

在mkdtemp的位置进行如下修改:

#ifndef _MSC_VER

char* mkdtemp_result = mkdtemp(temp_dirname_cstr);

#else

errno_t mkdtemp_result = _mktemp_s(temp_dirname_cstr, sizeof(temp_dirname_cstr));

#endif

修改完毕,可以成功编译。

4.编译solver.cpp

直接编译会出现关于snprintf的错误,需要进行如下修改:

#ifdef _MSC_VER

#define snprinf sprintf_s

#endif

修改完毕,可以成功编译。

5.其他剩余的cpp文件也依次编译

3.4.2 编译./src/layers中的文件

将./src/layers中的所有的cpp和cu文件都添加到项目中。

技术分享

右键点击cu文件,修改属性。

技术分享

 

在bnll_layer.cu文件,进行如下修改:

float kBNLL_THRESHOLD = 50 ——> #define kBNLL_THRESHOLD 50.0

依次编译所有的文件。

3.4.3 编译./src/util中的文件

将./src/util中所有的文件添加到项目

技术分享

1.在io.cpp中

修改ReadProtoFromBinaryFile函数

O_RDONLY  ——> O_RDONLY | O_BINARY

在代码中进行如下修改:

#ifdef _MSC_VER

#define open _open

#endif

将close()改为_close()

2.在math_functions.cpp中

做如下修改:

#define __builtin_popcount __popcnt

#define __builtin_popcountl __popcnt

3.在db.cpp

作如下修改:

#ifdef _MSC_VER

#include <direct.h>

#endif

修改CHECK_EQ

#ifdef _MSC_VER

CHECK_EQ(_mkdir(source.c_str()),0)<<”mkdir”<<source<<”failed”;

#else

CHECK_EQ(mkdir(source.c_str(),0744),0)<<”mkidr”<<source<<”failed”;

#endif

4.依次编译其他文件

3.4.4 编译./src/proto中的文件

参照上一步,将proto中的文件都添加到项目。

修改属性:

项目——属性——C/C++——预处理器——预处理器定义

添加:_SCL_SECURE_NO_WARNINGS

编译所有文件。

3.4.5 编译./tools中的文件

文件夹下有多个cpp文件,通过它们的名字就可以知道相应的功能。添加不同的cpp文件到项目中,然后生成项目,就可以得到不同功能的exe文件。

将caffe.cpp添加到工程,生成项目,得到caffe.exe文件,可用于训练模型

将computer_image_mean.cpp添加到工程,生成项目,得到的exe文件可用于将训练样本转换为caffe使用的leveldb/lmdb数据集。

依次类推。

自此,caffe在Windows下的编译已经完毕,接下来就可以使用它来训练自己的模型了。



下边这个安装方法,caffe 代码先用cmake产生,这里面可以选择是否选择用GPU,把 cpu_only 勾上即可

1.      从https://github.com/BVLC/caffe/通过git clone下载caffe源码,master分支,版本号为09868ac:$ git  clone https://github.com/BVLC/caffe.git ;

2.      先使用cmake-gui构建生成vs2013工程,发现有很多错误,提示缺少各种依赖库,根据错误提示,分别编译各种依赖库,下面通过vs2013安装、编译各种依赖库;

3.      安装、配置NVIDIA CUDA 7.0(网上说使用GPU和不使用,速度上caffe至少要差10倍左右,如果想不使用GPU,在cmake-gui中勾选CPU_ONLY即可):可以参考http://blog.csdn.net/fengbingchun/article/details/44963681

4.      安装、配置Boost:Boost库是一个可移植、提供源代码的C++库,它是为C++语言标准库提供扩展的一些C++程序库的总称:

(1)、从http://sourceforge.net/projects/boost/files/boost/1.58.0/下载Boost稳定版本1.58.0,如果不想自己编译Boost源码,则从http://sourceforge.net/projects/boost/files/boost-binaries/1.58.0/直接下载对应的二进制文件即可,我这里下载的是boost_1_58_0-msvc-12.0-64.exe ;

(2)、双击进行安装,将其安装到D:\ProgramFiles\local\boost_1_58_0目录下;

(3)、将D:\ProgramFiles\local\boost_1_58_0\lib64-msvc-12.0添加到系统环境变量Path中;

(4)、添加系统变量,变量名:BOOST_1_58_0,变量值:D:\ProgramFiles\local\boost_1_58_0,重启电脑;

5.      从https://github.com/gflags/gflags下载GFlags,解压缩,编译GFlags,google gflags是google使用的一个开源库,用于解析命令行标记:

(1)、打开cmake-gui,source code路径:E:/GitCode/Caffe/src/thirdparty/GFlags/gflags-master和build thebinaries路径:E:/GitCode/Caffe/src/thirdparty/GFlags/vs2013 ;

(2)、点击Configure,选择Visual Studio 12 2013 Win64;

(3)、CMAKE_INSTALL_PREFIX设置为::/GitCode/Caffe/src/thirdparty/GFlags/install;

(4)、点击Generate,生成vs2013gflags.sln工程;

(5)、打开gflags.sln工程,分别在x64Debug和x64 Release下,点击ALL_BUILD,重新生成;点击INSTALL,生成;手动拷贝生成的库和头文件放在/install/include和/install/lib目录下;

6.      从https://github.com/google/glog下载GLog,解压缩,编译GLog,google glog是一个记录日志信息的c++库:

(1)、用vs2013打开google-glog.sln工程,需要升级到vs2013版本;

(2)、原始工程只有win32配置,需要手动添加Debug 和Release x64配置;

(3)、分别在Debug和Release下,选中解决方案google-glog,重新生成解决方案,会在/glog-master/x64目录下生成Debug和Release两个子目录,将其里面相应的库拷贝到/GLog/install相应目录下;

(4)、将源码中的.h文件拷贝到相应的/GLog/install/目录下;

7.      从https://github.com/bureau14/leveldb下载LevelDB,解压缩,编译LevelDB,它是一个google实现的非常高效的kv数据库:

(1)、打开cmake-gui,source code路径:E:/GitCode/Caffe/src/thirdparty/LevelDB/leveldb-master和build thebinaries路径:E:/GitCode/Caffe/src/thirdparty/LevelDB/vs2013 ;

(2)、点击Configure,选择Visual Studio 12 2013 Win64;

(3)、点击Advanced,将Boost_INCLUDE_DIR设置为D:/ProgramFiles/local/boost_1_58_0/,将CMAKE_INSTALL_PREFIX设置为E:/GitCode/Caffe/src/thirdparty/LevelDB/install,再次点击Configure;

(4)、点击Generate,生成vs2013 leveldb.sln工程;

(5)、打开leveldb.sln工程,分别在x64 Debug和x64 Release下,点击ALL_BUILD,重新生成;点击INSTALL,生成;手动拷贝生成的库和头文件放在/install/include和/install/lib目录下;

8.      从https://github.com/LMDB/lmdb下载LMDB,解压缩,编译LMDB,Lightning Memory-Mapped Database:

(1)、打开vs2013,新建一个名称为lmdb的空项目;

(2)、将lmdb中的相应.c文件和.h文件加入到此项目中;

(3)、打开属性页,分别在Debug和Release下将其配置类型改为:静态库(.lib);

(4)、配置x64选项;

(5)、从http://4201a5.l67.yunpan.cn/lk/ccWF2Zge3tyfb密码是6147,下载3rdparty-2015.7.18.zip,将里面的unistd.h、getopt.h、getopt.c三个文件复制到lmdb源码并加入工程中;

(6)、修改属性,将C/C++下SDL检查设为否(/sdl-),并且将_CRT_SECURE_NO_WARNINGS、_CRT_SECURE_NO_DEPRECATE、_CRT_NONSTDC_NO_DEPRECATE三个宏添加到预处理定义中;

(7)、分别在Debug和Release下编译,生成lmdb.lib库,将其库和相应的头文件,拷贝到/install/include和install/lib相应目录下;

9.      从https://github.com/google/protobuf下载ProtoBuf,解压缩,编译ProtoBuf,它是一种轻便高效的结构化数据存储格式:

(1)、打开Cmake-gui,source code路径:E:/GitCode/Caffe/src/thirdparty/ProtoBuf/protobuf-master/cmake和build thebinaries路径:E:/GitCode/Caffe/src/thirdparty/ProtoBuf/vs2013;

(2)、点击Configure,选择Visual Studio 12 2013 Win64;

(3)、去掉BUILD_TESTING的勾选,将CMAKE_INSTALL_PREFIX设置为E:/GitCode/Caffe/src/thirdparty/ProtoBuf/install,再次点击Configure;

(4)、点击Generate,生成vs2013 protobuf.sln工程;

(5)、打开protobuf.sln工程,分别在x64 Debug和x64 Release下,点击ALL_BUILD,重新生成;点击INSTALL,生成;手动拷贝生成的库和头文件放在/install/include和/install/lib目录下,将protoc.exe放在/install/bin目录下;

10.  从https://www.hdfgroup.org/HDF5/release/obtainsrc.html下载HDF5,解压缩,编译HDF5,它是一个层次型的数据存储格式:

(1)、打开cmake-gui,source code路径:E:/GitCode/Caffe/src/thirdparty/HDF5/hdf5-1.8.15-patch1和build thebinaries路径:E:/GitCode/Caffe/src/thirdparty/HDF5/vs2013;

(2)、点击Configure,选择Visual Studio 12 2013 Win64;

(3)、再次点击Configure,点击Generate,生成HDF5.sln工程;

(4)、打开HDF5.sln工程,分别在x64 Debug和x64 Release下,点击ALL_BUILD,重新生成;手动拷贝生成的库和头文件放在/install/include和/install/lib目录下;

11.  从https://github.com/google/snappy下载snappy,解压缩,从https://github.com/kmanley/snappy-msvc下载snappy-msvc,解压缩,它是一个用C++实现的用来压缩和解压缩的库:

(1)、打开snappy-msvc-master目录下的snappy.sln工程,升级到vs2013;

(2)、添加x64解决方案平台;

(3)、从http://www.maspick.co.il/ddd/chromium/src/third_party/snappy/win32/snappy-stubs-public.h下载snappy-stubs-pulic.h文件,将其拷贝到/snappy-master目录下;

(4)、解决工程的error C2589:打开snappy属性页,分别在Debug和Release下,预处理定义中添加NOMINMAX;

(5)、在Debug和Release下,分别点击snappy工程,重新生成,会生成snappy.lib静态库;

(6)、将生成的静态库和头文件拷贝到/install/include和/install/lib目录下;

12.  编译不带CUDA支持的OpenCV2.4.9 x64动态库:可以参考http://blog.csdn.net/fengbingchun/article/details/8778121

13.  从http://sourceforge.net/projects/openblas/files/v0.2.14/下载OpenBLAS-v0.2.12-Win64-int64.zip,解压缩,它是一个优化的Blas库,将里面的libopenblas.dll.a改成libopenblas.lib;

14.  使用CMake(cmake-gui)生成Caffe.sln工程:暂时没有成功,先作个记录,后面有时间再调试吧

(1)、打开vs2013,新建一个空项目caffe-vs2013,分别在Debug和Release下,配置解决方案平台为x64,将配置属性中的配置类型改为动态库(.dll);

(2)、利用ProtoBuf中的protoc.exe,通过/caffe/caffe/src/caffe/proto/caffe.proto文件生成caffe.pb.h和caffe.pb.cc:打开命令提示符,将protoc.exe拷贝到/proto目录下,执行:protoc.execaffe.proto --cpp_out=./ ;

(3)、在/caffe/caffe/include/caffe目录下新建一个proto子目录,将caffe.pb.h和caffe.pb.cc两个文件拷贝到此目录下;

(4)、打开cmake-gui,source code路径:E:/GitCode/Caffe/src/caffe/caffe和build the binaries路径:E:/GitCode/Caffe/src/caffe/vs2013;

(5)、点击Configure,选择Visual Studio 12 2013 Win64;

(6)、设置Boost_INCLUDE_DIR为D:/ProgramFiles/local/;

(7)、设置GFlags选项见下图:


(8)、设置GLog选项见下图:


(9)、设置ProtoBuf选项见下图:


(10)、设置HDF5选项见下图:


(11)、设置LMDB选项见下图:


(12)、设置LevelDB选项见下图:


(13)、设置Snappy选项见下图:


(14)、设置OpenCV_DIR为D:/soft/OpenCV2.4.9/opencv/sources;

(15)、设置OpenBLAS选项见下图:


(16)、再次点击Configure,点击Generate,生成Caffe.sln工程。

15.  上面直接用CMake没有成功,下面手动添加生成Caffe.sln工程:

(1)、用vs2013新建一个控制台空工程caffe-vs2013,解决方案平台由Win32设置成x64;

(2)、设置CUDA支持:项目(P) -> 生成自定义(B)… -> 勾选CUDA 7.0(.targets, .props),点击确定,默认先使用不支持GPU进行编译,在工程中添加CPU_ONLY宏;

(3)、添加/caffe/src/caffe目录下的文件逐个进行编译,先编译/src/caffe当前目录下的10个.cpp文件,如下图:


(4)、caffe所有的依赖文件全部放在thirdparty目录下,将相应的头文件以及库文件加入到工程中,见下图:


(5)、对以上11个.cpp文件逐个进行编译,根据错误提示进行逐一解决;

(6)、将/caffe/src/caffe/layers目录下的.cpp文件加入到工程中,进行编译;

(7)、将/caffe/src/caffe/util目录下的.cpp文件加入到工程中,进行编译;

(8)、将/caffe/src/caffe/proto目录下的.cpp文件加入到工程中,进行编译,此.cc文件由上面的14.2步骤生成;

16.  编译caffe-vs2013工程,生成caffe-vs2013动态库。

 

参考文献:

1.      https://initialneil.wordpress.com/

2.      http://wenku.baidu.com/link?url=ik_0Yf6ZixtG10cXXoaDRkTVrDNf9o3mmAI8-c48AhKunsOHX0JNSG_e4yVMiH9TVcZuxggQqqMC5HhAZ46KSaAs4kmCSRfD3taWpbksDv7

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值