caffe2跟老版caffe相比变化较大,更容易上手和使用。但caffe2的windows版配置比linux下要麻烦一些、且更容易出错,把全过程记录下,以供参考。
1. 准备工作
准备工作与Caffe和TF等框架类似,大部分人可以选择性跳过~
(1)安装CUDA、cuDNN
【CUDA下载地址】https://developer.nvidia.com/cuda-downloads
【cuDNN下载地址】https://developer.nvidia.com/cudnn
本文采用的是CUDA8.0+cuDNN7,把cuDNN的lib和include下文件分别复制到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0下的对应文件夹。
(2)安装Python
caffe2支持Python 2.7.6 - Python 2.7.14。
推荐Anaconda安装,一步到位:
【Anaconda下载地址】https://www.anaconda.com/download/#windows
(3)安装Visual Studio
本文采用的是Visual Studio 2015,VS2017也可以。
【Visual Studio 下载地址】https://www.visualstudio.com/zh-hans/downloads/
(4)安装Cmake
【Cmake下载地址】https://cmake.org/download/
(5)安装依赖库
添加python路径到环境变量中,如 C:\Python27 和 C:\Python27\scripts
安装必需的python依赖:
pip install future ^
hypothesis ^
numpy ^
protobuf ^
six
非必选的python依赖,用于运行caffe2自带的tutorials:
pip install flask ^
glog ^
graphviz ^
jupyter ^
matplotlib ^
pydot python-nvd3 ^
pyyaml ^
requests ^
scikit-image ^
scipy ^
setuptools ^
tornado
2. 编译Caffe2
(1)获取源码
https://github.com/caffe2/caffe2.git
(2)构建sln工程
- 首先运行 ‘\scripts\build_host_protoc.bat’,生成build_host_protoc文件夹和protobuf.sln工程,用于编译;
- 然后运行 ‘\scripts\build_windows.bat’ ,对相关配置进行修改,这一步可能会报错,可以采用Cmake GUI进行直观的配置。由于Win版的部分可选软件包(gflags、glog、leveldb)需要从源码构建,而大部分训练和测试过程都在linux下完成,windows下主要进行模型部署,所以gflags、glog、leveldb并非必须,以下过程跳过这几个库。
- build_windows.bat中的最简配置如下:
cmake .. ^
-G%CMAKE_GENERATOR% ^
-DBUILD_TEST=OFF ^
-DCMAKE_BUILD_TYPE=%CMAKE_BUILD_TYPE% ^
-DUSE_CUDA=ON ^
-DUSE_NNPACK=OFF ^
-DUSE_CUB=OFF ^
-DUSE_GLOG=OFF ^
-DUSE_GFLAGS=OFF ^
-DUSE_LMDB=OFF ^
-DUSE_LEVELDB=OFF ^
-DUSE_ROCKSDB=OFF ^
-DUSE_OPENCV=ON ^
-DBUILD_SHARED_LIBS=OFF ^
-DBUILD_PYTHON=OFF^
- Cmake GUI中配置好路径,点击Configure + Generate。如果Cmake提示第三方库NOT FOUND,可以在Cmake里对各个第三方库的DIR地址进行手动配置,大多位于caffe2\third_party文件夹中。
- 成功之后会生成build文件夹和Caffe2.sln工程。
(3)编译protobuf库
打开protobuf.sln,编译成功后生成以下文件:
libprotobuf.lib
libprotobuf-lite.lib
libprotoc.lib
protoc.exe
js_embed.exe
(4)编译Caffe2源码
打开Caffe2.sln,进行编译。
【常见问题】
在Caffe2.sln的编译中,可能会遇到以下几个问题:
- 错误C1083: cub/util_allocator.cuh : No such file or directory
解决方法:
在项目属性->VC++目录->包含目录中添加:$你的地址\caffe2\third_party\cub 错误C4146: 一元负运算符应用于无符号类型,结果仍为无符号类型
解决方法:
项目属性->配置属性->C/C++->SDL检查,改成否链接类错误:error LNK2001 …cuda…
一般是没有找到cuda对应的lib,在项目属性->链接器->输入中添加:
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\x64\cuda.lib
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\x64\curand.lib
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\x64\cublas.lib
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\x64\cublas_device.lib
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\x64\cudnn.lib
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\x64\nvrtc.lib
3.测试Caffe2
打开caffe2\build\bin\Release文件夹,已经生成了所有binary文件夹下对应的exe。
运行其中的样例exe,可以看到此时的caffe2配置:
运行predictor_verifier.exe等样例时,记得把glog和gflag相关代码注释掉,再运行测试。
参考官方样例编写C++代码,分别对squeezenet[3],detectron[4]中模型进行单张图像测试:
squeezenet:0.015s/img 227x227
detectron-faster-C4:0.28s/img 1920x1080
速度比linux下慢不少,原因暂时未知。。
[1] https://caffe2.ai/docs/getting-started.html?platform=windows&configuration=compile
[2] https://github.com/caffe2/caffe2
[3] https://github.com/caffe2/models
[4] https://github.com/facebookresearch/Detectron