Caffe在windows及ubuntu下多种形式的编译

                                            Caffe库编译

一、windows下编译

不得不吐槽一句,windows下编译caffe要比ubuntu麻烦很多,稍不注意就是各种错误,时间久了重新编译还会忘记,因此对于windows必须做好详细的记录。

Windows下caffe编译来源主要有两种:(1)官方BLVC以及微软(Microsoft) (2)电子科大happynear的caffe-windows。

一)资源链接:

1)、官方caffe-windows

BLVC,Github:https://github.com/BVLC/caffe/tree/windows

Microsoft,Github链接:https://github.com/Microsoft/caffe

2)、国产Happynear的caffe-windows-ms

Github: https://github.com/happynear/caffe-windows/tree/ms

3)、mini-caffe: https://github.com/luoyetx/mini-caffe

4)、tiny-caffe(Mine): https://github.com/SyGoing/tiny-caffe

…还有很多其他DIY类型的Caffe,比如对于目标检测的caffe-SSD、Faster-RCNN caffe和C3D-caffe等等,其实都是针对特定应用添加了自定义层。由于caffe官方对于其维护减少,很多新的层都是很多野生程序员添加,并形成各色caffe。

另一种归类方式: Microsoft和happynear的caffe-wondws工程结构同宗,应该是happynear模仿Microsoft,然后DIY出自己的。

 

 

二)编译

   1、编译环境:

win10+cuda8.0+cudnn5.1(cudnn6.0)+opencv3.1+vs2015,cuda8.0、cudnn和opencv安装随便百度很多。

   2、编译

   首先记录一下官版BLVC-caffe的编译过程,包括动态库及静态库编译,以及比较坑的python接口编译。

   2.1 BLVC-caffe编译

   默认已经安装了vs2015、cuda8.0和cuddnn5.1,并且安装好了Anaconda3和Anaconda2,这里要记录caffe的python2.7和python3.5两种版本接口的编译,python3.6的暂时还没有尝试,后续补上。PS:Anaconda安装参考我的另一篇博客(比较完整):

 https://blog.csdn.net/ouyangfushu/article/details/79464276

从github上下载caffe,最好使用git,压缩包有时候容易丢失文件。

   (1)git clone https://github.com/BVLC/caffe.git

   (2)cd caffe

   (3)git checkout windows

   (4)cd scripts.这一步比较容易出岔子,因为我们需要根据自己需求配置build_win.cmd,这里经常出错。Notebook打开build_win.cmd,一般是修改这里

 

 1)无python接口静态库及其可执行文件编译

WITH_NIJIA=0、BUILD_PYTHON=0、BUILD_PYTHON_LAYER=0、CMAKE_SHARED_BUILD=0(1编译动态库,0编译静态库),OK修改完以后,双击build_win.cmd。

期间会自动下载三方依赖库libraries_v140_x64_py27_1.1.0.tar.bz2,有时候下载不成功,不要紧,百度云盘:https://pan.baidu.com/s/1j1UDoqjzsAmv02bB72oDbQ

提取码:zayb,然后放在C:\Users\你的用户名\.caffe\dependencies\download下即可,然后再此双击buld_win.cmd.等待比较久编译完成。   

2) 无python接口动态库编译

修改build_win.cmd的WITH_NIJIA=1、CMAKE_SHARED_BUILD=1,注意:需要安装ninjia,win+R进入cmd命令窗口,

 conda install --yes ninja 或者pip install ninjia

双击build_win.cmd,等待编译完成,此时会生成caffe.dll动态库。接下来就是整理编译好的库作为三方库编写caffe接口函数进行调用即可。具体参考:

https://blog.csdn.net/ouyangfushu/article/details/79546566

编译好以后build文件夹下是这样:

 

3)有Python2接口的静态库编译

确保安装了Anaconda2(环境变量中配置了,如果有多个版本则Anaconda2应该位于首位),修改build_win.cmd, CMAKE_BUILD_SHARED_LIBS=0、WITH_NINJA=0、PYTHON_VERSION=2、BUILD_PYTHON=1、BUILD_PYTHON_LAYER=1,修改完后这样,同样执行build_win.cmd.

 

4)有python3.5接口的静态库编译

安装了python3.5(Anaconda3的python3.5版本),下载这个版本Anaconda3-2.4.1-Windows-x86_64.exe即可,同样安装好重要的库如protobuf,ninjia和numpy等,下面的命令一顿操作即可。

conda config --add channels conda-forge

conda config --add channels willyd

conda install --yes ninja numpy scipy protobuf==3.1.0 six scikit-image pyyaml pydotplus graphviz

conda install --yes numpy scipy matplotlib scikit-image pip

pip install protobuf

接下来修改build_win.cmd如下图:

  执行build_win.cmd,期间会自动下载libraries_v140_x64_py35_1.1.0.tar.bz2,

百度云:https://pan.baidu.com/s/1Ete_kISilZrbkFgobuTsrA

提取码:dt7r

放在C:\Users\你的用户名\.caffe\dependencies\download下即可,然后双击build_win.cmd.完了吗?  NO,问题来了……编译过程中会提示找不到include_symbols.hpp,

解决方法:在编译python2接口发现会在build/ caffe下生成:export.hpp和include_symbols.hpp,但是在编译python3.5时却少了include_symbols.hpp,解决办法比较取巧:等build_win.cmd失败后,把原来编译python2版本接口的include_symbols.hpp拷贝到这个目录下,vs2015打开build下的Caffe.sln,右击BUILD_ALL生成解决方案即可成功。

  编译好的python接口,caffe目录下

   回到caffe根目录下,拷贝python文件下的caffe文件夹到Anaconda3\Lib\site-packages文件夹下。注意坑来了,cmd下无法包含import caffe 提示使用了python2.dll,原来这个文件夹下默认是python2.dll,不急【进入编译的build目录下,(1)将install/bin/下的文件拷贝到caffe文件夹(caffe根目录下的python/caffe)下,删除python27.dll,(2)拷贝build\lib\Release下_caffe.pyd到caffe文件夹(caffe根目录下的python/caffe),然后再复制到Anaconda3\Lib\site-packages下即可】。

 

2.2  happynear的caffe-windows编译

   截止2018.12.28,该版本caffe支持cuda9.0,依赖boost1.65.但是貌似编译有问题。因此还是在cuda8.0下编译,boost依旧是1.61版本(下载好源码以后需要稍作修改,三方依赖库依然使用老版本的)。

   这个版本比较符合常规编译,作者提供好了编译的工程,不用BLVC那么麻烦(类似微软的caffe)。进入官网https://github.com/happynear/caffe-windows/tree/ms,准备工作下载三方依赖库。

百度网盘:https://pan.baidu.com/s/1_0SSmGHuFyYPO4Qj7XaDOQ

提取码:4dax

1、git clone https://github.com/happynear/caffe-windows.git

2、进入caffe-windows/windows下,将三方依赖库压缩包thirdparty.zip解压到thirdparty目录下。CommonSettings.props.example文件去掉.example。Notebook打开CommonSettings.props

3、GPU静态库编译

在这里只编译C++库,UseNCCL、PythonSupport、MatlabSupport和MXNetSupport设置为false。由于要编译cuda8.0的版本,而原版本支持cuda9.0,所以需要改一下libcaffe文件夹下的libcaffe.vcxproj。打开,第37行和470行,如果是这样则不需要修改,如果指明是cuda9.0则需要改成

Cuda8.0.

  接下来就可以开始编译了,打开工程Caffe.sln,编译模式修改为

  工程目录如下:

首先编译libcaffe,然后再编译整个解决方案。

4、编译动态库

右键licaffe,扩展名改为.dll,配置类型改为动态库。如图

   在caffe.pb.h中添加宏定义以导出的proto类型,便于在使用中调用时能正确是被层类型及相关参数。

#ifdef CAFFELIB_EXPORTS

#define CAFFELIB_API __declspec(dllexport)

#else

#define CAFFELIB_API __declspec(dllimport)

#endif

 

需要导出的类前面加CAFFELIB_API,在caffe.pb.h中需要添加的类有:BlobProto、LayerParameter、NetParameter

同样在blob.hpp、common.hpp、layer.hpp、net.hpp中添加

#ifdef CAFFELIB_EXPORTS

#define CAFFELIB_API __declspec(dllexport)

#else

#define CAFFELIB_API __declspec(dllimport)

#endif

class LIBCAFFE Blob   --blob.hpp

class LIBCAFFE Caffe  -- common.hpp

class LIBCAFFE Layer  -- layer.hpp

class LIBCAFFE Net    --net.hpp

 

然后在libcaffe属性中加入预定义宏如下:

然后编译即可。需要注意的是编译动态库需要在属性中重新配置cuda的包含目录、库目录、链接库,否则编译不通过!会报找不到三方依赖。

  

将C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\bin下面的

这几个文件复制到编译Build\x64\Release下面,现在编译就不会有问题。

2.3  mini-caffe编译

这个版本的caffe编译就比较简单了,直接按照官方readme编译即可,比较不容易出问题。

Github: https://github.com/luoyetx/mini-caffe

2.4 tiny-caffe编译

   我的版本caffe,这是本人对happynear版本caffe精简化的结果,去除很多冗余依赖,仅仅依赖protobuf.

Github: https://github.com/SyGoing/tiny-caffe,阅读readme就可以了。

二、Ubuntu下编译

Ubuntu下编译BLVC-caffe的教程较多,相比windows下编译要简单得多。cuda8.0、cudnn5.1或cudnn6.0、opencv3.1、相关三方依赖安装完毕之后,只需要根据自己需求修改Makefile.config文件即可。

1、三方依赖

sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-devlibhdf5-serial-dev protobuf-compiler

sudo apt-get install --no-install-recommends libboost-all-dev

sudo apt-get install libopenblas-dev liblapack-dev libatlas-base-dev

sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev

2、Makefile.config,为了防止重新编译又去查来查去,这里配置好了一份

百度云:https://pan.baidu.com/s/1MyaKk01hBWoNKbaDTnOzMA

提取码:4txw

然后make all -j8完成编译。

这个配置文件没有编译python接口,如果需要编译python、matlab,则先确保自己安装了python(Anaconda)或者matlab,然后配置文件中打开编译python和matlab接口。

 

 

 

假设想要编译mini-caffe、tiny-caffe、happynear-caffe。去官网查看readme,这里不再赘述。 happynear的caffe-windows在ubuntu下编译和BLVC的一样。mini-caffe和tiny-caffe则更简单。依赖就很少。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值