Caffe2-Windows+Python接口配置
折腾了整整三天,终于把Caffe2的安卓版本,和windows版本build成功了。由于还是个深度学习小白,踩了无数的坑。把我在windows下配置的过程中遇到的问题大概说一下。
1. 准备:首先主要参考的这里 https://caffe2.ai/docs/getting-started.html?platform=windows&configuration=compile ,我用的是Anaconda python 2, 装在了C:\Anaconda2, Visual Studio Community Edition 2017, Cmake,Github Extension for Visual Studio。其中需要把C:\Anaconda2, C:\Anaconda2\libs, C:\Anaconda2\Scripts 加到系统环境变量里。另外我的系统是windows 10 64bit. Cmake版本3.10.1。此外,我还装了pybind11 (pip install pybind11即可),不知道这个有没有用,没装之前,编译build_windows.bat会提示找不到pybind。
2. build protoc
这里用的按照官网里的说明,安装了Github Extension for Visual Studio之后,打开Visual Studio 2017, 用首页里的github链接下载caffe2到本地: C:\Users\username\Source\Repos\caffe2
.
然后打开Developer Command Prompt, cd 到C:\Users\username\Source\Repos\caffe2, .\scripts\build_windows.bat就可以编译protoc了。记得这里当时是一遍成功的,没有什么错。这里build成功的话,会出现C:\Users\username\source\repos\caffe2\build_host_protoc这个文件夹。
3. build caffe2 windows
按照官网讲的,需要运行.\scripts\build_windows.bat,这里为了后面编译python接口,我们需要打开build_windows.bat,这里我将第63行的build_python=off改成on了。如果这个不改的话,并不会生成后面visual studio的python相关的project.
然后仍在Developer Command Prompt里运行.\scripts\build_windows.bat 。这时,会报一个找不到python27.lib的错:如下图。
这个错我找解决办法找了很久很久,最后在github caffe2 issues上有个人提到他用vs编译python caffe2,并把python.lib路径加到项目里就好了。所以最终我也是用的这个方法。
4. build python bindings
刚才的build_windows.bat虽然失败了,但是它帮我们生成了一个caffe2.sln。在caffe2\build文件夹下。然后用visual studio 2017打开这个caffe2.sln。会得到28个project如下:
最终要build (Release,X64)的是All_BUILD这个project. 在这之前,我把每个project的属性都看了一遍,在C/C++ ->Additional include Directories里加上C:\Anaconda2\libs; (这个路径里有python27.lib)。然后编译All_build, 发现caffe2_pybind11_state这个project总是还是会报找不到python27.lib的link的错误。
于是,我加了最关键的一个,在caffe2_pybind11_state的属性的Linker -> Additional Library Directories里加上C:\Anaconda2\libs; , 然后再次点击ALL_BUILD的build, 这次完全通过了!
5. 如何使用
本来我以为到这里已经结束了,按照官网讲的,我应该要生成caffe2_pybind11_state.dll在\caffe2\build\caffe2\binaries\Release里,但是并没有,找了很久,最后发现在C:\Users\username\source\repos\caffe2\build\caffe2\python\Release里有一个 caffe2_pybind11_state.pyd。我把它放在C:\Anaconda2\DLLs里,然后import caffe2。但是还是会报no module的错。
最后还是在github上找了一个解决方案:
到这里,终于build好了caffe2 的python接口!