Win10+vs2015+Caffe 动(静)态库配置自己的工程
转载请注明原出处:http://blog.csdn.net/ouyangfushu/article/details/79546566
作者:SyGoing
QQ: 2446799425
一、 工程目录预览
动态库版本caffe和静态库版本caffe工程目录为:
1、3rdparty目录层次为:v1_shared\3rdparty\windows,该路径下存放:
2、caffe_vs2015Test文件夹为此次的demo工程。
二、 caffe动/静态库配置
一)、caffe编译
caffe静/动态库编译,可以参考官方github的说明,默认cmake只能编译静态库,编译动态库需要用到ninja,详情见:https://github.com/BVLC/caffe/tree/windows(后续也会啰嗦着补充这方面的教程,但是按照官网基本没有问题)
二)、vs2015配置之动态库
新建一个普通win32控制台应用程序,工程名为caffe_vs2015Test,将该工程放置在3rdparty同级目录
1、库文件准备。
(1)caffe库
Caffe文件夹下:
lib: caffe.lib,caffeproto.lib
bin: caffe\bin
Include: caffe\include\caffe
Include2: include2\caffe
proto下:
(2)caffe的第三方依赖库
Caffe3rdparty文件夹下(该文件夹主要是caffe所依赖的三方库):
主要是一些google,boost和gflags等三方库。
Include:非常多直接拷贝出来就可以
Lib:
(3)opencv,opencv不在赘述,此版本默认opencv3.1.0,下载好拷贝到这个文件下即可,Opencv目录下
2、配置
(1) C/C++的常规:配置头文件包含目录
此处为相对路径配置,也可以直接绝对路径。
(2) 预处理器定义:
_CRT_SECURE_NO_WARNINGS
BOOST_ALL_NO_LIB
CAFFE_VERSION=1.0.0
CMAKE_WINDOWS_BUILD
GLOG_NO_ABBREVIATED_SEVERITIES
GOOGLE_GLOG_DLL_DECL=__declspec(dllimport)
GOOGLE_GLOG_DLL_DECL_FOR_UNITTESTS=__declspec(dllimport)
H5_BUILT_AS_DYNAMIC_LIB=1
USE_CAFFE
USE_CUDNN
USE_OPENCV
USE_LEVELDB
USE_LMDB
CMAKE_INTDIR="Release"
NDEBUG
(3) 链接器定义:
常规:需要定义opencv库目录以及cuda8.0库目录
输入:.lib
..\..\3rdparty\windows\caffe\lib\caffe.lib
..\..\3rdparty\windows\caffe\lib\caffeproto.lib
..\..\3rdparty\windows\caffe3rdparty\lib\boost_filesystem-vc140-mt-1_61.lib
..\..\3rdparty\windows\caffe3rdparty\lib\boost_system-vc140-mt-1_61.lib
..\..\3rdparty\windows\caffe3rdparty\lib\caffehdf5.lib
..\..\3rdparty\windows\caffe3rdparty\lib\caffehdf5_hl.lib
..\..\3rdparty\windows\caffe3rdparty\lib\caffezlib.lib
..\..\3rdparty\windows\caffe3rdparty\lib\gflags.lib
..\..\3rdparty\windows\caffe3rdparty\lib\glog.lib
..\..\3rdparty\windows\caffe3rdparty\lib\leveldb.lib
..\..\3rdparty\windows\caffe3rdparty\lib\libopenblas.dll.a
..\..\3rdparty\windows\caffe3rdparty\lib\libprotobuf.lib
..\..\3rdparty\windows\caffe3rdparty\lib\lmdb.lib
..\..\3rdparty\windows\caffe3rdparty\lib\snappy.lib
###..\..\3rdparty\windows\opencv\x64\vc14\lib\opencv_world310.lib
opencv_world310.lib(已经包含库目录)
cublas.lib
cublas_device.lib
cudart.lib
cudnn.lib
curand.lib
ntdll.lib
shlwapi.lib
(4) 将所有开始准备的.dll复制拷贝到x64\release下。
工程所需要的caffe及其三方库配置完毕,接下来就可以根据自己的需求编写相应的代码了。
(5) 测试
这里还是以classification为例,这个代码经过我的整理变成caffepredict.hpp和caffepredict.cpp,再配合一个测试的带有Main函数的.cpp文件就可以了。
说明:需要说明的事caffe动态库配置时不需要加入Register.hpp头文件,因为动态库可以加载caffe中的虚函数和虚类,这个在我以前的博客vs2013配置caffe静态库中有说明,caffe静态库必须加入Register.hpp,博客链接:
http://blog.csdn.net/ouyangfushu/article/details/79450501
三)、vs2015配置之静态库
静态库的配置与动态库基本一致,不同点:
(1)在动态库配置基础上需要在工程中加入Register.hpp才能正常加载.prototxt文件,将Layer注册信息加载进内存,手动注册层类的信息,动态库没有caffe.dll,再贴一次Register.hpp的示例,其中的需要的层根据自己网络模型中用到的层手动添加即可。
#ifndef REGISTER_LAYER_CLASS_H
#define REGISTER_LAYER_CLASS_H
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
namespace caffe{
extern INSTANTIATE_CLASS(InputLayer);
extern INSTANTIATE_CLASS(InnerProductLayer);
extern INSTANTIATE_CLASS(DropoutLayer);
extern INSTANTIATE_CLASS(InputLayer);
extern INSTANTIATE_CLASS(BatchNormLayer);
extern INSTANTIATE_CLASS(ConcatLayer);
extern INSTANTIATE_CLASS(ScaleLayer);
extern INSTANTIATE_CLASS(BiasLayer);
extern INSTANTIATE_CLASS(ConvolutionLayer);
//REGISTER_LAYER_CLASS(Convolution);
extern INSTANTIATE_CLASS(ReLULayer);
//REGISTER_LAYER_CLASS(ReLU);
extern INSTANTIATE_CLASS(PoolingLayer);
//REGISTER_LAYER_CLASS(Pooling);
extern INSTANTIATE_CLASS(LRNLayer);
//REGISTER_LAYER_CLASS(LRN);
extern INSTANTIATE_CLASS(SoftmaxLayer);
//REGISTER_LAYER_CLASS(Softmax);
}
#endif
(2)还有一小点需要注意的是:caffe所依赖的第三方库有些也要用对应的静态库版本,如果不知道可以全部复制过来。