Building Caffe on Windows

这并不是教程,只是个备忘录,希望能帮助到有需要的人,然而不对能否解决问题做任何保证

开个坑,终于成功把 Caffe 在 Windows 上跑起来了(其实我也不知道到底对不对,至少编译是过了),暂时没有 data_layer 和 GPU 支持,也就是说并不能在 Windows 上训练,最多只能手动输入图片测试。

环境是Visual Stuido 2013 Community,各种依赖的头文件直接放进Additional Include Directories里面即可,在这里说些链接库的问题:

  • Boost:使用官方的pre-built版本(http://sourceforge.net/projects/boost/files/boost-binaries/),非常好用,把头文件放置好即可,VS会自动寻找.lib的位置;
  • OpenCV:官方Windows版本即可,现在用的是2.4.11。需要手动在项目属性->Configuration Properties->Linker->General->Additional Library Directories里添加库的文件夹,在…->Input->Additional Dependencies里面添加库的文件名,后面的依赖库都要用这种方式去解决;
  • BLAS库我用的是OpenBLAS,特意装了个MinGW环境去编译,装好MinGW下的gcc和gfortran之后直接make && make PREFIX=/path/to/install/dir install即可,编译生成的是liboepnblas.dll和libopenblas.dll.a,注意.dll文件要放进系统PATH环境变量下的位置,.dll.a文件就是交给VS去用的库文件(添加到Additional Dependencies里);
  • google-glog:github上的源码里面就有VS的.sln项目文件,直接build即可,生成的库文件扔进Additional Dependencies里;
  • protobuf:跟glog一样可以直接用官方提供的.sln文件,然而注意需要使用protoc.exe用来生成caffe.pb.cc和caffe.pb.h两个重要的源码。
  • gflags:使用cmake-gui生成VS项目文件,然后在VS里面Build即可;
  • snappy:使用了kmanley的snappy-msvc项目(https://github.com/kmanley/snappy-msvc),里面的.sln文件可以直接用,如果出现ssize_t类型定义的问题的话可以手动指定:typedef __int64 ssize_t;
  • HDF5:使用官方的CMake安装说明即可,编译好之后复制库和头文件到项目设定好的位置即可。

解决依赖后需要手动通过 protoc.exe 把源代码里面的 caffe.proto 转换为 caffe.pb.cc 和 caffe.pb.h,之后把 caffe 的源代码直接添加到项目里面即可(Add->Existing Item)。

源代码很多地方需要修改,折腾了好长时间很多地方都忘了,说一些能记住的吧:

  • 因为是 CPU_ONLY,注意在项目属性里预先定义 CPU_ONLY 这个 flag;
  • io.cpp 里面用到了 posix 的 open 和 close 函数,还好 VS 提供了对这两个函数的支持,添加 #include<io.h> 即可(参考这里:Using File Descriptors in Visual Studio 2010 and Windows);
  • io.hpp 头文件里面的 MakeTempFilename 和 MakeTempDir 两个 inline 函数我直接注释掉了,因为发现这两个函数只在 runtest 部分才会用到;
  • 好多可执行文件的源码里似乎都有 namespace 的问题,需要手动添加 caffe:: 和 boost:: 的 namespace;
  • ……(记不住了)

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注