工程配置(三) 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,詳情見:
二)、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資料夾下(
主要是一些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,部落格連結:
三)、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所依賴的第三方庫有些也要用對應的靜態庫版本,如果不知道可以全部複製過來。