1. 程式人生 > >工程配置(三) vs2015+Caffe配置自己的工程

工程配置(三) 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,部落格連結:

三)、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所依賴的第三方庫有些也要用對應的靜態庫版本,如果不知道可以全部複製過來。