Windows 7 64位下caffe配置cuda7.5 VS2013
2016-01-01 19:46
459 查看
由于很多人在关于caffe的配置上存在一些问题,现将我的配置过程整理如下,希望对大家有帮助:
本文中将给出一些编译好的依赖库,如果你也是用的Windows 7 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/1dEtlIsp 密码:nbut
下载完,解压得到3rdparty文件夹。在下一段将会用到。
即:先建一个caffe工程,然后将caffe的源码文件拷贝到工程目录下
3.1 下载caffe源码
可以从caffe的github主页下载源码。
下载地址:Caffe’s GitHub
解压文件,假设caffe源码所在目录为CAFFE_ROOT。
3.2 准备项目需要的依赖库和系统环境变量
经过上一阶段的准备,caffe项目所需的依赖库都已经准备好。
1.首先设置系统环境变量(以我的为例):
CUDA_PATH_V7_5 安装好cuda7.5之后,会自动添加环境变量CUDA_PATH_V7_5
OPENCV_2_410 D:/Tools/opencv2.410/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_V7_5)\include;
$(OPENCV_2_410)\include;
$(OPENCV_2_410)\include\opencv;
$(OPENCV_2_410)\include\opencv2;
$(BOOST_1_56)
项目->属性->链接器->常规->附加库目录
添加:
$(CUDA_PATH_V7_5)\lib\$(PlatformName);
$(OPENCV_2_410)\x64\vc12\lib;
$(BOOST_1_56)\lib64-msvc-12.0;
..\3rdparty\lib;
项目->属性->链接器->输入->附加依赖项
debug添加:
opencv_ml2410d.lib
opencv_calib3d2410d.lib
opencv_contrib2410d.lib
opencv_core2410d.lib
opencv_features2d2410d.lib
opencv_flann2410d.lib
opencv_gpu2410d.lib
opencv_highgui2410d.lib
opencv_imgproc2410d.lib
opencv_legacy2410d.lib
opencv_objdetect2410d.lib
opencv_ts2410d.lib
opencv_video2410d.lib
opencv_nonfree2410d.lib
opencv_ocl2410d.lib
opencv_photo2410d.lib
opencv_stitching2410d.lib
opencv_superres2410d.lib
opencv_videostab2410d.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_objdetect2410.lib
opencv_ts2410.lib
opencv_video2410.lib
opencv_nonfree2410.lib
opencv_ocl2410.lib
opencv_photo2410.lib
opencv_stitching2410.lib
opencv_superres2410.lib
opencv_videostab2410.lib
opencv_calib3d2410.lib
opencv_contrib2410.lib
opencv_core2410.lib
opencv_features2d2410.lib
opencv_flann2410.lib
opencv_gpu2410.lib
opencv_highgui2410.lib
opencv_imgproc2410.lib
opencv_legacy2410.lib
opencv_ml2410.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
直接编译这个文件,会出现关于getid和fopen_s的错误。可通过如下步骤修改:
在代码前面添加:#include
在mkdtemp的位置进行如下修改:
修改完毕,可以成功编译。
4.编译solver.cpp
直接编译会出现关于snprintf的错误,需要进行如下修改:
修改完毕,可以成功编译。
5.其他剩余的cpp文件也依次编译
3.4.2 编译./src/layers中的文件
将./src/layers中的所有的cpp和cu文件都添加到项目中。
右键点击cu文件,修改属性。
注:如若没有cuda c/c++选项,则需要右键工程—>生成依赖项—>生成自定义,将cuda勾上
1.在bnll_layer.cu文件,进行如下修改:
float kBNLL_THRESHOLD = 50 —> #define kBNLL_THRESHOLD 50.0
2.在contrastive_loss_layer文件,进行如下修改:
Dtype dist = std::max(margin - sqrt(dist_sq_.cpu_data()[i]), 0.0);改为
Dtype dist = std::max(margin - sqrt(dist_sq_.cpu_data()[i]), Dtype(0.0));
依次编译所有的文件。
3.4.3 编译./src/util中的文件
将./src/util中所有的文件添加到项目
1.在io.cpp中
修改ReadProtoFromBinaryFile函数
O_RDONLY —> O_RDONLY | O_BINARY
在代码中进行如下修改:
将close()改为_close()
2.在math_functions.cpp中
做如下修改:
3.在db_lmdb.cpp中
作如下修改:
修改CHECK_EQ
4.依次编译其他文件
3.4.4 编译./src/proto中的文件
参照上一步,将proto中的caffe.pb.h和caffe.pb.cc文件都添加到项目。
(修改属性:
项目->属性->C/C++->预处理器->预处理器定义
添加:_SCL_SECURE_NO_WARNINGS
编译所有文件。
3.4.5 编译./tools中的文件
本文件夹下有多个cpp文件,通过它们的名字就可以知道相应的功能。添加不同的cpp文件到项目中,然后生成项目,就可以得到不同功能的exe文件。
将caffe.cpp添加到工程,生成项目,得到caffe.exe文件,可用于训练模型
依次类推。
自此,caffe在Windows下的编译已经完毕,接下来就可以使用它来训练自己的模型了。
附加修改:common.cpp第30行注释掉,否则整个工程生成的时候可能报错:
//::google::InstallFailureSignalHandler();
1.配置环境
配置的环境为:Windows 7 64位 + cuda7.5 + Opencv2.410 + 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/1dEtlIsp 密码:nbut
下载完,解压得到3rdparty文件夹。在下一段将会用到。
3.建立caffe工程
准备好了caffe需要的依赖库和环境之后,下面就可以建立caffe的vs项目,进行编译了。工程结构如下图:即:先建一个caffe工程,然后将caffe的源码文件拷贝到工程目录下
3.1 下载caffe源码
可以从caffe的github主页下载源码。
下载地址:Caffe’s GitHub
解压文件,假设caffe源码所在目录为CAFFE_ROOT。
3.2 准备项目需要的依赖库和系统环境变量
经过上一阶段的准备,caffe项目所需的依赖库都已经准备好。
1.首先设置系统环境变量(以我的为例):
CUDA_PATH_V7_5 安装好cuda7.5之后,会自动添加环境变量CUDA_PATH_V7_5
OPENCV_2_410 D:/Tools/opencv2.410/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_V7_5)\include;
$(OPENCV_2_410)\include;
$(OPENCV_2_410)\include\opencv;
$(OPENCV_2_410)\include\opencv2;
$(BOOST_1_56)
项目->属性->链接器->常规->附加库目录
添加:
$(CUDA_PATH_V7_5)\lib\$(PlatformName);
$(OPENCV_2_410)\x64\vc12\lib;
$(BOOST_1_56)\lib64-msvc-12.0;
..\3rdparty\lib;
项目->属性->链接器->输入->附加依赖项
debug添加:
opencv_ml2410d.lib
opencv_calib3d2410d.lib
opencv_contrib2410d.lib
opencv_core2410d.lib
opencv_features2d2410d.lib
opencv_flann2410d.lib
opencv_gpu2410d.lib
opencv_highgui2410d.lib
opencv_imgproc2410d.lib
opencv_legacy2410d.lib
opencv_objdetect2410d.lib
opencv_ts2410d.lib
opencv_video2410d.lib
opencv_nonfree2410d.lib
opencv_ocl2410d.lib
opencv_photo2410d.lib
opencv_stitching2410d.lib
opencv_superres2410d.lib
opencv_videostab2410d.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_objdetect2410.lib
opencv_ts2410.lib
opencv_video2410.lib
opencv_nonfree2410.lib
opencv_ocl2410.lib
opencv_photo2410.lib
opencv_stitching2410.lib
opencv_superres2410.lib
opencv_videostab2410.lib
opencv_calib3d2410.lib
opencv_contrib2410.lib
opencv_core2410.lib
opencv_features2d2410.lib
opencv_flann2410.lib
opencv_gpu2410.lib
opencv_highgui2410.lib
opencv_imgproc2410.lib
opencv_legacy2410.lib
opencv_ml2410.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
直接编译这个文件,会出现关于getid和fopen_s的错误。可通过如下步骤修改:
在代码前面添加:#include
#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 snprintf sprintf_s #endif
修改完毕,可以成功编译。
5.其他剩余的cpp文件也依次编译
3.4.2 编译./src/layers中的文件
将./src/layers中的所有的cpp和cu文件都添加到项目中。
右键点击cu文件,修改属性。
注:如若没有cuda c/c++选项,则需要右键工程—>生成依赖项—>生成自定义,将cuda勾上
1.在bnll_layer.cu文件,进行如下修改:
float kBNLL_THRESHOLD = 50 —> #define kBNLL_THRESHOLD 50.0
2.在contrastive_loss_layer文件,进行如下修改:
Dtype dist = std::max(margin - sqrt(dist_sq_.cpu_data()[i]), 0.0);改为
Dtype dist = std::max(margin - sqrt(dist_sq_.cpu_data()[i]), Dtype(0.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_lmdb.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中的caffe.pb.h和caffe.pb.cc文件都添加到项目。
(修改属性:
项目->属性->C/C++->预处理器->预处理器定义
添加:_SCL_SECURE_NO_WARNINGS
编译所有文件。
3.4.5 编译./tools中的文件
本文件夹下有多个cpp文件,通过它们的名字就可以知道相应的功能。添加不同的cpp文件到项目中,然后生成项目,就可以得到不同功能的exe文件。
将caffe.cpp添加到工程,生成项目,得到caffe.exe文件,可用于训练模型
依次类推。
自此,caffe在Windows下的编译已经完毕,接下来就可以使用它来训练自己的模型了。
附加修改:common.cpp第30行注释掉,否则整个工程生成的时候可能报错:
//::google::InstallFailureSignalHandler();
相关文章推荐
- HTML简单介绍
- 块元素、内联元素、inline-block的特点
- BufferedReader和BufferedWriter读写文件
- 前端和后端如何合作
- java使用BufferedWriter写文件
- 前端工程师如何和设计师沟通
- java使用BufferedReader类读取文本文件
- Caffe——when a blob will copy data
- JSP--行为(Action)
- JavaScript Uncaught SyntaxError: Unexpected token )(…)
- CSS选择器相关以及CSS选择器的优先级
- JSP动作学习一
- CSS3 笔记五(Buttons)
- org.openqa.selenium.StaleElementReferenceException
- 前端学PHP之基础语法
- install rpmbuild on rhel/fedora
- Bootstrap组件On和Off语法
- Caffe学习系列(14):初识数据可视化
- Caffe学习系列(12):训练和测试自己的图片
- Caffe学习系列(11):图像数据转换成db(leveldb/lmdb)文件