1. 程式人生 > >Visual Studio 2015 Caffe配置

Visual Studio 2015 Caffe配置

    環境:

    Windows 8.1 (64-bit)

    Visual Studio 2015

    無GPU    

    VS2013可使用微軟提供的Windows工具包(caffe-master)。

    caffe-master好像只支援VS2013,caffe提供的Windows工具包(caffe-windows)提供了對VS2015的支援。

    caffe有些依賴,如BLAS(ATLAS,MKL,或OpenBLAS),OpenCV,Boost,glog, gflags, protobuf, leveldb, snappy, hdf5。可選的還有CUDA,cuDNN,Python,Matlab。這裡做最簡單的無GPU環境配置,大部分依賴都提供

了自動下載,安裝配置過程中只用到了CMake和Python。

    我的是CMake3.7.0和Anoconda4.2.0(Python 2.7 Version)。確保cmake和python在環境變數中。

    在github下載caffe-windows,用git clone也可。解壓後在cmd中進入caffe-windows目錄。

    根據VS版本執行python指令碼下載依賴:

    :: Install Visual Studio 2013 dependencies

    > python scripts\download_prebuilt_dependencies.py --msvc_version=v120

    :: Or install Visual Studio 2015 dependencies

    > python scripts\download_prebuilt_dependencies.py --msvc_version=v140

    我的是VS2015,執行

    python scripts\download_prebuilt_dependencies.py --msvc_version=v140

    完成後在路徑下會有libraries資料夾,裡面有boost,hdf5,zlib,gflags,glog,leveldb,openblas,protobuf,lmdb,snappy,opencv等等。把該資料夾路徑加入CAFFE_DEPENDENCIES環境變數:

    call libraries\prependpath.bat

    設定VS x64環境:

    call "D:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" amd64

    "D:\Program Files (x86)\Microsoft Visual Studio 14.0\"是我的安裝目錄,樣例腳本里給的是:

    call "!VS%MSVC_VERSION%0COMNTOOLS!..\..\VC\vcvarsall.bat" amd64

    建立並進入build目錄:

    mkdir build

    cd build

設定Generator(一般根據選擇有ninja,"Visual Studio 14 2015 Win64"和"Visual Studio 12 2013 Win64"。具體寫法在Usage裡會提示。)

    set CMAKE_GENERATOR="Visual Studio 14 2015 Win64"

設定buildtype(Debug或Release)

    set CMAKE_CONFIGURATION="Release"

    cmake -G%CMAKE_GENERATOR% -DBLAS=Open DCMAKE_BUILD_TYPE=%CMAKE_CONFIGURATION% -DCPU_ONLY=1  -C ..\libraries\caffe-builder-config.cmake ..\

這裡設定-DBLAS=Open,之前下載的libraries裡有openBLAS,否則預設在電腦上查Atlas。 因為我不使用GPU,設定-DCPU_ONLY。

    另外如果要編譯shared library,可加-DBUILD_SHARED_LIBS=ON,預設是Off。根據官方github說法,shared library在測試時可能有問題。另外設定

    python:-DBUILD_python -DBUILD_python_layer

    Matlab:-DBUILD_matlab

    cuDNN : -DCUDNN_ROOT

    在官方github上都有說明,使用ninja方法也有。

    用cmake-gui也可以。

    編譯:

    cmake --build . --config %CMAKE_CONFIGURATION%

    測試:

    cmake --build . --target runtest --config %CMAKE_CONFIGURATION%

    樣例指令碼appveyor中的後面的python測試和lint沒成功,不過基本可以用了。

    主要參照:Github以及script資料夾下的指令碼。

VS環境配置:

    在Linux下訓練好了模型,得到均值檔案,在Visual Studio 2015裡跑classification程式碼。直接把examples\cpp_classification\classification.cpp加入專案。

專案配置屬性->VC++目錄->包含目錄:

D:\caffe-windows\src

D:\caffe-windows\libraries\include

D:\caffe-windows\include

D:\caffe-windows\build\include

D:\caffe-windows\libraries\include\boost-1_61

(D:\caffe-windows\ 是caffe目錄)

專案配置屬性->VC++目錄->庫目錄:

D:\caffe-windows\libraries\lib

D:\caffe-windows\build\lib\Debug

D:\caffe-windows\libraries\x64\vc14\lib

D:\Program Files\Anaconda2\libs

(D:\Program Files\Anaconda2\ 是Anaconda/Python目錄)

專案配置屬性->C/C++->前處理器->前處理器定義:

CPU_ONLY=1

BOOST_ALL_DYN_LINK

用GPU的不用加CPU_ONLY巨集。因為libraries資料夾裡的libboost*.lib好像不是很完整(boost*.lib較完整)。本想去下載一個對應版本的Boost,不過當時網路條件不行,就加了BOOST_ALL_DYN_LINK,然後在環境變數里加上各種動態連結庫的目錄。

專案配置屬性->除錯->環境:

path=%path%;D:\caffe-windows\libraries\bin;D:\caffe-windows\libraries\x64\vc14\bin;D:\caffe-windows\libraries\lib;

專案配置屬性->連結器->輸入->附加依賴項:

boost_python-vc140-mt-1_61.lib

boost_thread-vc140-mt-1_61.lib

caffehdf5.lib

caffehdf5_cpp.lib

caffehdf5_hl.lib

caffehdf5_hl_cpp.lib

caffezlib.lib

gflags.lib

glog.lib

leveldb.lib

libopenblas.dll.a

libprotobufd.lib

lmdb.lib

snappy.lib

opencv_core310d.lib

opencv_features2d310d.lib

opencv_highgui310d.lib

opencv_imgcodecs310d.lib

opencv_imgproc310d.lib

caffe-d.lib

proto-d.lib

python27.lib

配置的是Debug x64的,嘗試了很久,加這些暫時沒問題。缺什麼加什麼,錯什麼換什麼。

少什麼就註冊,多註冊了就不註冊。至此應該可以跑了。

#include "caffe/common.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"

namespace caffe
{
	extern INSTANTIATE_CLASS(InputLayer);
	extern INSTANTIATE_CLASS(InnerProductLayer);
	extern INSTANTIATE_CLASS(DropoutLayer);
	extern INSTANTIATE_CLASS(ConvolutionLayer);
	extern INSTANTIATE_CLASS(ReLULayer);
	extern INSTANTIATE_CLASS(PoolingLayer);
	extern INSTANTIATE_CLASS(LRNLayer);
	extern INSTANTIATE_CLASS(SoftmaxLayer);
}

namespace caffe
{
	
	REGISTER_LAYER_CLASS(Convolution);

	REGISTER_LAYER_CLASS(ReLU);

	REGISTER_LAYER_CLASS(Pooling);

	REGISTER_LAYER_CLASS(LRN);

	REGISTER_LAYER_CLASS(Softmax);

}