工程配置(三) vs2015+Caffe配置自己的工程

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<caffe/common.hpp>

#include<caffe/layers/scale_layer.hpp>

#include<caffe/layers/input_layer.hpp>

#include<caffe/layers/inner_product_layer.hpp>

#include<caffe/layers/dropout_layer.hpp>

#include<caffe/layers/conv_layer.hpp>

#include<caffe/layers/relu_layer.hpp>

#include<caffe/layers/pooling_layer.hpp>

#include<caffe/layers/lrn_layer.hpp>

#include<caffe/layers/softmax_layer.hpp>

#include<caffe/layers/batch_norm_layer.hpp>

#include<caffe/layers/concat_layer.hpp>

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所依赖的第三方库有些也要用对应的静态库版本,如果不知道可以全部复制过来。

猜你喜欢

转载自blog.csdn.net/ouyangfushu/article/details/79546566