Caffe+VS+CUDA75+Matlab配置流程.docx
- 文档编号:3852595
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:19
- 大小:701.61KB
Caffe+VS+CUDA75+Matlab配置流程.docx
《Caffe+VS+CUDA75+Matlab配置流程.docx》由会员分享,可在线阅读,更多相关《Caffe+VS+CUDA75+Matlab配置流程.docx(19页珍藏版)》请在冰豆网上搜索。
Caffe+VS+CUDA75+Matlab配置流程
Caffe+VS2013+CUDA7.5+Matlab配置流程
1下载并配置openCV、openBlas、boost、CUDA、cuDNN、Gflags、Glog、LevelDB、LMDB、ProtoBuf、HDF5库
2openCV配置
下载opencv库,解压。
添加环境变量:
D:
\opencv2.4.10\build\x86\vc12\bin(32位)
D:
\opencv2.4.10\build\x64\vc12\bin(64位)
3openBlas配置
下载已经编译好的openBlas库,解压。
4boost配置
4.1下载boost库,解压。
4.2boost目录下有个bootstrap.bat文件,在cmd下运行:
4.3在cmd下分别运行:
64位:
b2stage--toolset=msvc-12.0link=sharedruntime-link=sharedaddress-model=64
b2stage--toolset=msvc-12.0address-model=64
32位:
b2stage--toolset=msvc-12.0link=sharedruntime-link=shared
b2stage--toolset=msvc-12.0
5安装CUDA
装完后VisualStudio新建项目中可见:
6cuDNN配置
下载已经编译好cuDNN库,解压。
7Gflags配置
7.1下载Gflags库,解压。
打开cmake,设置输入输出路径
7.2点Configure,选择“Visual Studio 12 2013 Win64”
7.3勾选BUILD_SHARED_LIBS和BUILD_STATIC_LIBS
7.3点Configure后,点Generate,生成gflags.sln
7.4打开gflags.sln,右键生成32位/64位的Debug/Release库
8Glog配置
下载Glog库,解压。
打开根目录下google-glog.sln,右键生成32位/64位的Debug/Release库
9LevelDB配置
9.1下载LevelDB库,解压。
打开cmake,设置输入输出路径
9.2点Configure,选择“Visual Studio 12 2013 Win64”
9.3设置Boost路径
Boost_INCLUDE_DIR:
D:
\boost_1_59_0
9.3点Configure后,点Generate,生成leveldb.sln
9.4打开leveldb.sln,右键生成32位/64位的Debug/Release库
注:
第1次生成后,会有几项失败的,再右键生成1次便可。
10LMDB配置
10.1下载LMDB库,解压。
10.2打开VisualStudio,文件->新建->从现有代码创建项目
10.3选上源代码文件夹,并命名项目
10.4下一步,项目类型:
控制台应用程序项目
10.5完成后,设置:
项目属性->配置属性->配置类型:
静态库(.lib)
10.6添加unistd.h、getopt.h、getopt.c到工和源文件里
unistd.h下载地址:
getopt.h、getopt.c下载地址:
http:
//ieng6.ucsd.edu/~cs12x/vc08install/getopt9.zip
10.7把包含#include
11ProtoBuf配置
下载ProtoBuf库,解压。
打开根目录/vsprojects/protobuf.sln,分别右键libprotobuf、libprotoc、protoc生成32位/64位的Debug/Release库
12HDF5安装
下载HDF5安装包hdf5-1.8.16-win64-vs2013-shared.zip,装完后:
***************************************
经过上面的准备,下面开始配置caffe
1下载Berkeley官方caffe库,解压出一个caffe-master文件夹(即根目录)。
2其他辅助工具:
链接:
密码:
v0gq
3准备第3方库,在caffe根目录下建3rdparty文件夹,再建如下子文件夹:
把前面生成的dll库、lib库、.h头文件,放在对应的文件夹里。
bin、include、lib里的文件如下图,3rdparty.7z下载地址:
链接:
密码:
4h9p
4打开VisualStudio,在根目录下新建一个项目名为caffe的空项目,并设置为x64Release平台,下面只讲解此平台的配置,Debug平台与此类似。
4.1右键项目名->生成依赖项->生成自定义:
勾选CUDA7.5
4.2在编译protobuf时已生成protoc.exe,把它拷到\src\caffe\proto目录下,打开cmd,到该目录下输入:
protoccaffe.proto--cpp_out=./将生成caffe.pb.cc和caffe.pb.h文件。
4.3把与\src\caffe对应的所有文件及文件夹添加进工程里(test文件夹可以不加)
4.4配置相关路径及选项,以下绝对路径需要根据实际作修改,打开项目属性:
常规->输出目录:
..\bin
VC++目录->包含目录:
..\..\src
..\..\include
..\..\3rdparty\include
..\..\3rdparty\include\hdf5
..\..\3rdparty\include\lmdb
..\..\3rdparty\include\openblas
D:
\boost_1_59_0
D:
\opencv2.4.10\build\include
D:
\opencv2.4.10\build\include\opencv
D:
\opencv2.4.10\build\include\opencv2
C:
\ProgramFiles\NVIDIAGPUComputingToolkit\CUDA\v7.5\include
VC++目录->库目录:
..\..\3rdparty\lib
D:
\boost_1_59_0\stage\lib
D:
\opencv2.4.10\build\x64\vc12\lib
C:
\ProgramFiles\NVIDIAGPUComputingToolkit\CUDA\v7.5\lib\x64
链接器->输入->附加依赖项:
cuda.lib
cudnn.lib
cudart.lib
curand.lib
gflags.lib
cublas.lib
libglog.lib
libprotoc.lib
libprotobuf.lib
libopenblas.dll.a
lmdb.lib
leveldb.lib
shlwapi.lib
szip.lib
zlib.lib
libhdf5.lib
libhdf5_hl.lib
opencv_core2410.lib
opencv_highgui2410.lib
opencv_imgproc2410.lib
C/C++->预处理器->预处理器定义:
USE_LMDB
USE_OPENCV
USE_LEVELDB
_CRT_SECURE_NO_WARNINGS
_SCL_SECURE_NO_WARNINGS
CUDAC/C++->Common->TargetMachinePlatform:
64-bit
CUDAC/C++->Device->CodeGeneration:
compute_20,sm_20
compute_30,sm_30
compute_35,sm_35
compute_50,sm_50
4.5下面开始逐步编译并修改bug
(1)编译common.cpp,右键选择编译。
从输出错误列表中定位相应的错误:
添加:
#include
修改:
getpid()->_getpid()
以上编译成功后才接着下面的编译
(2)编译solver.cpp
修改:
snprintf()->sprintf_s()
(3)编译caffe.cpp,从根目录\tools文件夹里,把caffe.cpp添加进工程源文件中。
4.6上面几个文件编译成功后,开始生成整个项目:
生成结束后会出现大量错误,需要反复生成多次才能找出所有的错误,下面逐一修复:
(1)在cudnn.hpp文件中的cudnnGetErrorString函数名前添加:
CUDNNWINAPI
(2)在signal_handler.cpp文件中,修改:
constfloatkBNLL_THRESHOLD=50.->#definekBNLL_THRESHOLD50.0
(3)在bnll_layer.cu文件中,添加:
#defineSIGHUP1
#defineSA_RESTART0x0002
#definesigfillset(set)(*(set)=~(sigset_t)0,0)
typedefunsignedintsigset_t;
structsigaction{
void(*sa_handler)(int);
sigset_tsa_mask;
intsa_flags;
};
并注释这些出错语句:
if(sigaction(SIGHUP,&sa,NULL)==-1){
LOG(FATAL)<<"CannotinstallSIGHUPhandler.";
}
if(sigaction(SIGINT,&sa,NULL)==-1){
LOG(FATAL)<<"CannotinstallSIGINThandler.";
}
(4)在hdf5.cpp文件中,修改:
给switch(class_)中的每个case分支加上花括号
(5)在db_lmdb.cpp文件中,添加:
#include
并把mkdir()改为_mkdir(),且将第2个参数去除
(6)在contrastive_loss_layer.cpp文件中,修改为:
(7)在math_functions.cpp文件中,添加:
#define__builtin_popcount__popcnt
#define__builtin_popcountl__popcnt
(8)在io.cpp文件中,添加:
#include
并修改函数名:
open()->_open();close()->_close()
(9)在common.cpp文件中,添加:
#include
#include
voidinitGlog(){
FLAGS_log_dir=".\\log\\";
_mkdir(FLAGS_log_dir.c_str());
std:
:
stringLOG_INFO_FILE;
std:
:
stringLOG_WARNING_FILE;
std:
:
stringLOG_ERROR_FILE;
std:
:
stringLOG_FATAL_FILE;
std:
:
stringnow_time=boost:
:
posix_time:
:
to_iso_extended_string(boost:
:
posix_time:
:
second_clock:
:
local_time());
now_time[13]='-';
now_time[16]='-';
LOG_INFO_FILE=FLAGS_log_dir+"INFO"+now_time+".txt";
google:
:
SetLogDestination(google:
:
GLOG_INFO,LOG_INFO_FILE.c_str());
LOG_WARNING_FILE=FLAGS_log_dir+"WARNING"+now_time+".txt";
google:
:
SetLogDestination(google:
:
GLOG_WARNING,LOG_WARNING_FILE.c_str());
LOG_ERROR_FILE=FLAGS_log_dir+"ERROR"+now_time+".txt";
google:
:
SetLogDestination(google:
:
GLOG_ERROR,LOG_ERROR_FILE.c_str());
LOG_FATAL_FILE=FLAGS_log_dir+"FATAL"+now_time+".txt";
google:
:
SetLogDestination(google:
:
GLOG_FATAL,LOG_FATAL_FILE.c_str());
}
并修改GlobalInit()函数:
voidGlobalInit(int*pargc,char***pargv){
//Googleflags.
:
:
gflags:
:
ParseCommandLineFlags(pargc,pargv,true);
initGlog();
:
:
google:
:
InitGoogleLogging(*(pargv)[0]);
}
(10)在base_data_layer.cpp文件中,初始化:
cudaStream_tstream=nullptr;
在base_data_layer.cpp文件中,初始化:
注:
以上不一定能修复所有代码bug,如还未生成成功,请自行修复。
5上面生成成功后会在根目录\caffe\bin下生成一个caffe.exe,重命名为caffe_gpu.exe,防止被覆盖,后面将会用到。
经过上面过程,caffe已经编译完成,下面开始测试mnist库
1下载辅助工具
链接:
密码:
v0gq
1.1把wget库解压,并添加环境变量:
Path=D:
\wget-1.11.4b
1.2把7za.exe、wget.exe、libiconv2.dll、libintl3.dll、libssl32.dll放进\3rdparty\bin
把get_mnist.bat放进\data\mnist
把create_mnist.bat、train_lenet.bat放进\examples\mnist
1.3双击运行\data\mnist\get_mnist.bat,将自动下载并解压mnist数据库。
或者下载已经解压好的数据库放在此路径下:
链接:
密码:
bbsb
或者到官方网站下载,解压并命名为对应的名字即可:
2添加环境变量,把\3rdparty\bin添加到环境变量中
Path=E:
\caffe3\caffe-master\3rdparty\bin
2.1把工程源文件中的caffe.cpp移除,将
\examples\mnist\convert_mnist_data.cpp添加到项目的源文件中,生成项目。
运行完后convert_mnist_data.cpp有错,需要修复:
添加:
#include
分别对mdb_env、mdb_txn、db初始化:
2.2生成成功后,把\caffe\bin\caffe.exe重命名为convert_mnist_data.exe。
2.3下载辅助dll库:
链接:
密码:
zigr
把刚下载和之前生成的dll库放进\3rdparty\bin,有:
libquadmath-0.dll
libgcc_s_seh-1.dll
libgcc_s_sjlj-1.dll
libgfortran-3.dll
libglog.dll
libopenblas.dll
cudnn64_70.dll
2.4在\examples\mnist\下新建mnist_test_leveldb和mnist_train_leveldb两个文件夹,双击运行create_mnist.bat,生成leveldb数据格式。
或者下载已经转换好的数据放在此路径下:
链接:
密码:
jdks
3下面开始训练和测试
3.1打开lenet_train_test.prototxt文件,把里面所有的lmdb替换成leveldb。
3.2把\caffe\bin\caffe_gpu.exe重命名为caffe.cpp,再双击运行\examples\mnist\train_lenet.bat,开始训练和测试,运行结果:
以上结果是在teslak20cGPU上的测试结果,测试10000个样本大约需要165ms,准确率为:
99.01%(每次测试的结果会有点波动)。
上面程序通过修改\examples\mnist\lenet_solver.prototxt文件中的属性,可以设定不同的测试条件。
下面开始配置NVidia提供的开源库cuDNN,该库专用于深度学习框架,以提高训练效率。
1在上面工程的基础上,把convert_mnist_data.cpp移除,将根目录\tools\caffe.cpp重新添加到工程源文件中。
项目属性->C/C++->预处理器->预处理器定义,添加:
USE_CUDNN
2把cuDNN库中的cudnn64_70.dll、cudnn.h、cudnn.lib分别拷到\3rdparty\的bin、include、lib文件夹里。
接着,右键生成项目。
3项目生成成功后,把\caffe\bin\caffe.exe备份,命名为:
caffe_cudnn.exe,以防止被覆盖(用到时把名字改回caffe.exe即可)。
4双击运行\examples\mnist\train_lenet.bat,开始训练和测试,运行结果:
以上结果是在teslak20cGPU上,使用cuDNNv3库的测试结果,测试10000个样本大约需要168ms,准确率为:
99.11%(每次测试的结果会有点波动)。
以上是在VisualStudio平台下测试的,下面开始配置MatlabR2014a。
1下载修复后的caffe_.cpp文件:
链接:
密码:
rob6
把刚下载的caffe_.cpp和matcaffe.def拷到\matlab\+caffe\private,并覆盖原有的文件。
2在上面工程的基础上,把caffe.cpp移除,将根目录\matlab\+caffe\private\caffe_.cpp添加到工程源文件中。
3配置属性,打开项目属性:
常规->
输出目录:
..\..\matlab\+caffe\private
目标文件名:
caffe_
目标文件扩展名:
.mexw64
VC++目录->
包含目录:
D:
\ProgramFiles\MATLAB\R2014a\extern\include
D:
\ProgramFiles\MATLAB\R2014a\extern\include\win64
库目录:
D:
\ProgramFiles\MATLAB\R2014a\extern\lib\win64\microsoft
链接器->
附加依赖项:
libmx.lib
libmex.lib
libmat.lib
模块定义文件:
../../matlab/+caffe/private/matcaffe.def
4右键生成项目,将会生成\matlab\+caffe\private\caffe_.mexw64,这是matlab的库文件。
5测试
5.1把前面下载到的bvlc_reference_caffenet.caffemodel放进\models\bvlc_reference_caffenet
5.2打开Matlab,把路径改为caffe根目录,输入:
addpath./matlab
5.3把路径改为\matlab\demo,classification_demo是一个分类函数,模型已经训练好即bvlc_reference_caffenet.caffemodel,这是1000分类的模型,调用格式:
其中,s是各类的分数,l是该图像的预测标签。
具体分类:
http:
//www.image-net.org/challenges/LSVRC/2012/
参考网址:
http:
//caffe.berkeleyvision.org/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Caffe VS CUDA75 Matlab 配置 流程
![提示](https://static.bdocx.com/images/bang_tan.gif)