本文共 4808 字,大约阅读时间需要 16 分钟。
1、新建一个VS工程,命名为caffe,建立一个空项目 将解压后的caffe中的文件都拷入到caffe项目中,在caffe项目中建立一个3dparty文件夹,在3dparty目录下建立include和lib文件夹,结果如图: Opencv环境搭建的文章很多,这里给出一个链接:,我的Opencv的版本是2.4.9。 注意opencv环境搭建后,将包含头文件目录,库目录,附加依赖项中在VS属性管理器中配置好,在caffe配置过程中不再讲述配置opencv。 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的时候报错。 将解压后的文件中的lib文件中的libopenblas.dll.a文件拷贝到caffe项目中的3dparty/lib目录中,将bin目录下的libopenblas.dll文件拷贝到caffe项目目录下,在caffe项目的3dparty/include目录下新建一个文件夹命名为openblas,将OpenBlas解压后的include文件夹下的头文件拷贝到3dparty/include/openblas文件夹下。 下载地址:,我直接下载的非安装版,即直接解压就能用。我的版本是。 解压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。 打开生成的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模式下对应调整。 下载地址:,下载后直接解压,这个不需要CMake处理,因为里面有个.sln文件,直接用VS就能打开。VS打开后,要配置工程,本文所有的工程都是在64位平台上的release模式下的,debug对应调整即可。在运行之前,需要把signalhandler.cc添加到libglog中,否则在运行caffe时会出现错误。VS运行没报错,将glog.lib文件同样放到caffe工程的3dparty/lib目录下,将下面的glog头文件拷贝到3dparty/include/glog目录下。 下载地址:,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目录下。 下载地址:,缺少的文件已经配置好了,如果出现问题参考 ,我的链接地址可能缺了一个文件,自己百度搜一下,或参考下图的下载地址去下载getopt.h等文件。 下载地址:,下载google的新版会出错误,得用旧版。 解压后会有一个vsprojects文件夹,直接用VS打开里面的工程protobuf.sln,设置生成的文件为lib文件,运行libprotobuf和libprotoc,将生成的libprotobuf.lib和libprotoc.lib文件放到caffe工程的3dparty/lib目录下,将解压的src中的google文件夹拷贝到到3dparty/include目录下。 下载对应版本,解压后用CMake编译,用VS打开编译后的工程,在release模式下运行,将生成的libhdf5.lib,libhdf5_hl.lib放到caffe工程的3dparty/lib目录下,将src文件夹中的.h文件放到3dparty/include/hdf5目录下,同时把hl/src中的头文件也放到 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 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 (4)开始编译文件(记住是编译文件Ctrl+F7): 将src/caffe中的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,成功。 找不到getpid,是因为缺乏头文件,在common.cpp加上#include<process.h>,编译成功。 在源文件中点击新建筛选器,将文件夹命名为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的文件添加到工程中,编译 出错位置为,语法问题, 错误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文件。