博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
windows下无GPU的caffe的配置
阅读量:3977 次
发布时间:2019-05-24

本文共 4808 字,大约阅读时间需要 16 分钟。

Caffe在windows下的配置
一、下载caffe并创建工程
1、下载caffe
caffe下载地址:,下载后解压
1、新建一个VS工程,命名为caffe,建立一个空项目
将解压后的caffe中的文件都拷入到caffe项目中,在caffe项目中建立一个3dparty文件夹,在3dparty目录下建立include和lib文件夹,结果如图:
二、基础环境的搭建
1、Opencv环境
Opencv环境搭建的文章很多,这里给出一个链接:我的Opencv的版本是2.4.9。
注意opencv环境搭建后,将包含头文件目录,库目录,附加依赖项中在VS属性管理器中配置好,在caffe配置过程中不再讲述配置opencv。
2、Boost库的安装
Boost库是为C++语言标准库提供扩展的一些C++程序库的总称,由Boost社区组织开发、维护。我用的是1.56.0,下载地址为:
根据自己的VS版本选择。配置环境变量path,加入C:\local\boost_1_56_0;根据自己的boost目录调节,boost就是一个解压缩的文件。我的版本是
环境变量中要加入C:\local\boost_1_56_0\lib64-msvc-12.0;否则会在CMake leveldb的时候报错。
3、CUDA的安装
CUDA7.0版本下载地址:,不支持Win10。
CUDA7.5版本下载地址:,支持Win10。
CUDA的path会在安装时自动配置,不需要管。
4、OpenBlas的下载
OpenBlas的下载地址:,我的版本是
将解压后的文件中的lib文件中的libopenblas.dll.a文件拷贝到caffe项目中的3dparty/lib目录中,将bin目录下的libopenblas.dll文件拷贝到caffe项目目录下,在caffe项目的3dparty/include目录下新建一个文件夹命名为openblas,OpenBlas解压后的include文件夹下的头文件拷贝到3dparty/include/openblas文件夹下。
5、CMake工具下载
下载地址:,我直接下载的非安装版,即直接解压就能用。我的版本是
6、GFlags
下载地址:
,直接从github上下的最新版本。
解压CMake,解压GFlags,打开bin目录下的cmake-gui.exe,如图
在上图cmake的界面中,上面的是GFlags所在的源文件的目标,即CMakeLists.txt文件所在的目录,一定要保证CMakeLists.txt在目录下,下面的是要生成的VS工程所在的目录,点击Configure,
选择VS的版本及平台,点击finish。
选择BUILD_gflags_LIB等,如图,感觉就BUILD_gflags_LIB有用,其他文献中说CMAKE_INSTALL_PREFIX也要调整,主要是生成的dll文件所在的目录,感觉不需要调整,因为后面会用VS工程生成lib和dll。
点击generate,只要不报错,就没什么问题。
打开生成的VS工程,选择解决方案的平台,要区分debug和release模式,win32跟x64,不同模式下生成不同的lib,在生成caffe时需要根据对应的平台和模式来选择lib文件。运行成功,不报错就OK。
将生成的GFlags的VS工程下的include中的gflags文件夹拷贝到caffe的3dparty/include目录下,类似于openblas的拷贝,将GFlags的VS工程下的lib/Release下的gflags.lib拷贝到caffe工程的3dparty/lib目录下,现在使用的都是release模式,debug模式下对应调整。
7、Glog
下载地址:,下载后直接解压,这个不需要CMake处理,因为里面有个.sln文件,直接用VS就能打开。VS打开后,要配置工程,本文所有的工程都是在64位平台上的release模式下的,debug对应调整即可。在运行之前,需要把signalhandler.cc添加到libglog中,否则在运行caffe时会出现错误。VS运行没报错,将glog.lib文件同样放到caffe工程的3dparty/lib目录下,将下面的glog头文件拷贝到3dparty/include/glog目录下。
8、LevelDB
下载地址:,google的原版移除了CMake,这个有,同样的用CMake生成VS工程,如果CMake报错,则可能是C:\local\boost_1_56_0\lib64-msvc-12.0没加入到环境变量中,打开VS工程,release下运行,把解压的leveldb的include文件夹下的leveldb拷贝到caffe工程的3dparty/include目录下,leveldb.lib放到caffe工程的3dparty/lib目录下。
9、LMDB
下载地址:,缺少的文件已经配置好了,如果出现问题参考
,我的链接地址可能缺了一个文件,自己百度搜一下,或参考下图的下载地址去下载getopt.h等文件。
10、Protobuf
下载地址:,下载google的新版会出错误,得用旧版。
解压后会有一个vsprojects文件夹,直接用VS打开里面的工程protobuf.sln,设置生成的文件为lib文件,运行libprotobuf和libprotoc,将生成的libprotobuf.lib和libprotoc.lib文件放到caffe工程的3dparty/lib目录下,将解压的src中的google文件夹拷贝到3dparty/include目录下。
11、HDF5
下载地址:
下载对应版本,解压后用CMake编译,用VS打开编译后的工程,在release模式下运行,将生成的libhdf5.lib,libhdf5_hl.lib放到caffe工程的3dparty/lib目录下,将src文件夹中的.h文件放到3dparty/include/hdf5目录下,同时把hl/src中的头文件也放到
3dparty/include/hdf5下。
12、caffe编译
(1)打开caffe工程,添加附加包含目录:
包含目录有:
boost目录:C:\local\boost_1_56_0,CUDA目录:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.0\include
caffe目录:D:\VS_PROJECT\Caffe\Caffe\include和D:\VS_PROJECT\Caffe\Caffe\src
第三方包含目录:
D:\VS_PROJECT\CaffeConfig\CaffeConfig\3dparty\include
D:\VS_PROJECT\CaffeConfig\CaffeConfig\3dparty\include\openblas
D:\VS_PROJECT\CaffeConfig\CaffeConfig\3dparty\include\google\protobuf
D:\VS_PROJECT\CaffeConfig\CaffeConfig\3dparty\include\hdf5
D:\VS_PROJECT\CaffeConfig\CaffeConfig\3dparty\include\lmdb
D:\VS_PROJECT\CaffeConfig\CaffeConfig\3dparty\include\leveldb
D:\VS_PROJECT\CaffeConfig\CaffeConfig\3dparty\include\gflags
D:\VS_PROJECT\CaffeConfig\CaffeConfig\3dparty\include\glog
opencv的包含目录已经单独配置好了。
(2)添加库文件目录:
库目录有:
boost库目录:C:\local\boost_1_56_0\lib64-msvc-12.0
CUDA库目录:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.0\lib\x64
第三方库目录:D:\VS_PROJECT\Caffe\Caffe\3dparty\lib
opencv库目录已经单独配置好了。
(3)添加附加依赖项:
lib文件有:
cudart.lib
cuda.lib
nppi.lib
cufft.lib
cublas.lib
curand.lib
libglog.lib
libopenblas.dll.a
libprotoc.lib
shlwapi.lib
gflags.lib
libprotobuf.lib
leveldb.lib
lmdb.lib
libhdf5.lib
libhdf5_hl.lib
opencv的lib已经单独配置好。
(4)开始编译文件(记住是编译文件Ctrl+F7):
将src/caffe中的cpp文件通过添加现有项添加到源文件中,一个个文件开始编译。
错误1:编译blob.cpp,报错
缺乏caffe.pb.h文件,打开protobuf的工程,找到protoc.exe文件,将其拷贝到src/caffe/proto目录下,此目录下有个caffe.proto文件,新建一个proto.bat文件,里面写入protoc.exe caffe.proto --cpp_out=./
然后运行proto.bat文件即可生成caffe.pb.h和caffe.pb.cc文件,再次编译blob.cpp,成功。
错误2:编译common.cpp,报错
找不到getpid,是因为缺乏头文件,在common.cpp加上#include<process.h>,编译成功。
编译其他的cpp文件都没报错。
在源文件中点击新建筛选器,将文件夹命名为layers,将src/caffe/layers下的文件添加到layers中,编译所有cpp文件
错误3:在编译CUDA文件bnll_layer.cu文件时会报错,
kBNLL_THRESHOLD改为50,或加上#define kBNLL_THRESHOLD 50
同上建立solvers文件夹,src/caffe/solvers的文件添加到工程中,编译
同上建立util文件夹,src/caffe/util的文件添加到工程中,编译
错误4:在编译hdf5文件时报错,
出错位置为,语法问题,
将case下的操作加上大括号括起来即可。
错误5:编译io文件报错,
加上#include<io.h>即可。将io文件加上 | O_BINARY,否则后面在进行训练自己的数据时会出错
错误6:编译signal_handler.cpp文件报错。
主要是因为windows下的信号量和linux下不一致。
将下面三个函数替换:
换为
换为
换为
重新编译通过。
同上建立proto文件夹,将src/caffe/proto的proto.pb.cpp添加到proto中,编译。
新建一个tools,将caffe/tools中的caffe.cpp加入到tools中,运行。会报缺少dll错误,将该加的dll文件加入到工程目录下,包括gflags.dll,libglog.dll,libgfortran-3.dll(这个是因为libopenblas.dll需要这个dll文件,直接百度下载即可),为什么会缺少dll,是因为在编译这些工程时生成的是dll文件。而不是lib文件,因此在添加了lib之后还需要dll文件。
你可能感兴趣的文章
指针的使用注意事项(个人体…
查看>>
指针的使用注意事项(个人体…
查看>>
~c++中的指针使用注意事项
查看>>
~c++中的指针使用注意事项
查看>>
函数返回值、引用和指针的区别思考
查看>>
函数返回值、引用和指针的区别思考
查看>>
AT指令中文手册
查看>>
AT指令中文手册
查看>>
module_param&amp;&amp;MODULE_PARM_DESC
查看>>
struct&nbsp;inode&nbsp;和&nbsp;struct&nbsp;file
查看>>
mknod
查看>>
模板匹配函数cvMatchTemplate中的…
查看>>
模板匹配函数cvMatchTemplate中的…
查看>>
模板匹配函数cvMatchTemplate中的…
查看>>
C语言&nbsp;链表操作
查看>>
C语言&nbsp;链表操作
查看>>
深入探讨C++中的引用
查看>>
深入探讨C++中的引用
查看>>
assert用法
查看>>
assert用法
查看>>