caffe-windows使用happynear提供的,好处是设置好了依赖库,不需要自己再进行设置,可以省很多麻烦事。GitHub地址:https://github.com/happynear/caffe-windows/tree/ms
配置时使用的环境:
1、windows 10
2、CUDA 10.1 + cudnn for CUDA 10.1
3、Visual Studio 2015 + Python 3.6 + Matlab 2016b
配置过程:
1、安装 CUDA 和 cudnn
这里只叙述大概过程,下载 CUDA 10.1,下载完成后,得到一个.exe文件,然后运行它,选择一个存放提取文件的位置,进入图形安装界面,我选择了精简,于是一路就 next 下去,最后 CUDA 安装在了:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1 。安装结束后在系统变量内多了:
下载 cudnn v7.5 for CUDA 10.1,下载后解压,将解压后的 bin、include、lib 拷贝到 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1 下面,然后将 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\lib\x64(这个也是cudnn的路径,后面会用上) 添加到 系统变量 ——> 变量 Path 下。
cmd 后输入 nvcc -V 可以显示 CUDA 的相关信息。
2、下载 caffe-windows,将caffe-windows存放的地址表示为[caffe path]。下载第三方依赖,下载好的文件解压到 [caffe path]/windows/thirdparty/ 下,再将 [caffe path]/windows/thirdparty/bins 添加到 环境变量 ——> 系统变量 ——> Path变量
3、在 [caffe path]/windows/ 下,找到 CommonSettings.props.example 这个文件,复制为 CommonSettings.props
4、打开 CommonSettings.props 文件,修改文件内容,原文件内容如下,红色字体是我标注的解读内容,也是需要我们修改的部分。
5、根据自己的需要进行修改:是否使用GPU?是否使用cuDNN?为caffe设置Python接口(PyCaffe)?为caffe设置Matlab接口(MatCaffe)?
不使用GPU,则需要将 CpuOnlyBuild 修改成 true,把 UseCuDnn 修改为 false;
使用GPU,不需要更改,需要设置 CudaVersion 为我们使用的版本,还要添加 cuDNN(上文提到的路径)的路径;
不使用 PyCaffe 或是 MatCaffe,只需将对应的 PythonSupport 或 MATLABSupport 设置为 false 即可;
若选择使用 PyCaffe 或是 MatCaffe,则需要在 PythonDir 或 MatlabDir 处添加 Python 或 Matlab 的路径。
6、我的需求:caffe-windows + GPU + CUDA 10.1 + cuDNN + PyCaffe + MatCaffe,根据我的需求,修改后的 CommonSettings.props 文件如下:
$(SolutionDir)..\Build
false
true
true
false
10.1
true
true
false
cufft.lib
$(SolutionDir)thirdparty\Boost
$(SolutionDir)thirdparty\Boost\lib64-msvc-14.0
$(SolutionDir)thirdparty\HDF5
$(SolutionDir)thirdparty\GFlags
$(SolutionDir)thirdparty\Glog
$(SolutionDir)thirdparty\Protobuf
$(ProtobufRoot)\bin\
$(SolutionDir)thirdparty\OpenCV
$(SolutionDir)thirdparty\LMDB
$(SolutionDir)thirdparty\OpenBLAS
$(SolutionDir)thirdparty\LEVELDB
$(SolutionDir)thirdparty\NCCL
D:\ThirdPartyLibrary\IntelSWTools\compilers_and_libraries_2017.4.210\windows\mkl
D:\deepLearning\mxnet
compute_52,sm_52;compute_60,sm_60;
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1
$(SolutionDir)\scripts
cublas.lib;cuda.lib;curand.lib;cudart.lib
cudnn.lib;$(CudaDependencies)
$(CuDnnPath)\lib\x64;$(LibraryPath)
$(CuDnnPath)\include;$(IncludePath)
nccl.lib;$(CudaDependencies)
$(NCCLRoot)\lib;$(LibraryPath)
$(NCCLRoot)\include;$(IncludePath)
$(MKLRoot)\lib\intel64_win;$(LibraryPath)
$(MKLRoot)\include;$(IncludePath)
mkl_rt.lib;$(AdditionalDependencies)
$(OpenBLASRoot)\lib;$(LibraryPath)
$(OpenBLASRoot)\include;$(IncludePath)
libopenblas.dll.a;$(AdditionalDependencies)
$(BuildDir)\$(Platform)\$(Configuration)\
$(BuildDir)\Int\$(ProjectName)\$(Platform)\$(Configuration)\
$(OutDir);$(CUDA_PATH)\lib\$(Platform);$(BoostLibraryFolder);$(HDF5Root)\lib;$(GFlagsRoot)\lib;$(GLogRoot)\lib;$(ProtobufRoot)\lib;$(OpenCVRoot)\x64\vc14\lib;$(LMDBRoot)\lib;$(LevelDBRoot)\lib;$(LibraryPath)
$(SolutionDir)..\include;$(SolutionDir)..\include\caffe\proto;$(CUDA_PATH)\include;$(BoostIncludeFolder);$(HDF5Root)\include;$(GFlagsRoot)\include;$(GLogRoot)\include;$(ProtobufRoot)\include;$(OpenCVRoot)\include;$(LMDBRoot)\include;$(LevelDBRoot)\include;$(IncludePath)
E:\IDE\Anaconda3
$(PythonDir)\libs;$(LibraryPath)
$(PythonDir)\include;$(IncludePath)
E:\IDE\MATLAB\R2016b
$(MatlabDir)\extern\lib\win64\microsoft;$(LibraryPath)
$(MatlabDir)\extern\include;$(IncludePath)
CPU_ONLY;%(PreprocessorDefinitions)
USE_CUDNN;%(PreprocessorDefinitions)
USE_CUDNN
USE_NCCL;%(PreprocessorDefinitions)
USE_NCCL
USE_MKL;%(PreprocessorDefinitions)
USE_MKL
WITH_PYTHON_LAYER;BOOST_PYTHON_STATIC_LIB;%(PreprocessorDefinitions)
MATLAB_MEX_FILE;%(PreprocessorDefinitions)
false
true
_SCL_SECURE_NO_WARNINGS;USE_OPENCV;USE_LEVELDB;USE_LMDB;%(PreprocessorDefinitions)
true
Full
NDEBUG;%(PreprocessorDefinitions)
MultiThreadedDLL
true
4819;
true
true
UseLinkTimeCodeGeneration
true
leveldb.lib;Advapi32.lib;Shlwapi.lib;lmdb.lib;opencv_world310.lib;libprotobuf.lib;glog.lib;gflags.lib;hdf5_tools.lib;hdf5_hl_fortran.lib;hdf5_fortran.lib;hdf5_hl_f90cstub.lib;hdf5_f90cstub.lib;hdf5_cpp.lib;hdf5_hl_cpp.lib;hdf5_hl.lib;hdf5.lib;zlib.lib;szip.lib;$(AdditionalDependencies)
Disabled
_DEBUG;%(PreprocessorDefinitions)
MultiThreadedDebugDLL
4819;
true
leveldbd.lib;Advapi32.lib;Shlwapi.lib;lmdbd.lib;opencv_world310d.lib;libprotobufd.lib;glogd.lib;gflagsd.lib;hdf5_tools.lib;hdf5_hl_fortran.lib;hdf5_fortran.lib;hdf5_hl_f90cstub.lib;hdf5_f90cstub.lib;hdf5_cpp.lib;hdf5_hl_cpp.lib;hdf5_hl.lib;hdf5.lib;zlib.lib;szip.lib;$(AdditionalDependencies)
7、完成上述的所有操作以后,我们就可以在 visual studio 2015 中进行编译了。使用 visual studio 2015 打开 [caffe path]/windows/Caffe.sln ,将编译模式设置为: Release + x64。
如果有生成失败的,或是 error C2220: 警告被视为错误 - 没有生成“object”文件,在它的 属性 --> 配置属性 --> C/C++ --> 常规 中,把将警告视为错误改成 否,可以使之生成成功。
如果看到 matlab 运行时需要版本10.x的SDK… 在 matcaffe 的 属性 --> 配置属性 常规 --> 目标平台版本 修改为你有的(看一下其它项目使用的是哪个,修改成一样即可)。
8、编译完成后,会在 [caffe path]\Build\x64\Release\pycaffe\caffe 下看到一个 _caffe.pyd 文件;在 [caffe path]\matlab\+caffe\private 下看到一个 caffe_.mexw64 文件。