Caffe三方库相关资料、编译方法和注意事项

微在Nuget上传了Caffe所需的所有3rd-Library,因此不想了解和编译Caffe三方库的同学,可以略过以下内容。
附微软提供的Windows版本Caffe

Google

glog

由Google提供的日志模块,通过设置FLAGS_log_dir来保存训练和测试日志。通过CMake生成VS项目并编译,仅编译Release版本即可,似乎在Caffe中不能够使用静态库(反正我从来没配置成功过)

gflags

命令行参数解析,解析CMD命令参数,可以通过宏DEFINE_string定义参数以及参数说明,并用ParseCommandLineFlags函数对参数进行解析。通过CMake生成VS项目并编译;

protobuf

存储数据结构信息,构造网络模型,保存网络权值等。通过CMake生成VS项目并编译;
其实主要是通过protobuf将Caffe的代码和训练分离,使得训练的时候只用关注如何构造网络结构而不用担心实现问题;(唔~我自己的理解其实也就是Google定义了一套标准用来转化结构化的数据,具体的用法可以参考网上的资料或者参考Caffe项目中的caffe.proto文件)

googletest

用于对代码进行测试,如果不编译和运行caffe中的测试代码,则仅需要头文件。在编译protobuf的时候,如果需要生成相应的测试项目,也需要googletest和googlemock;

leveldb

由Google提供的一个高效的key-value数据库。Git项目需要切换到WINDOWS分支,并参考WINDOWS文档说明进行编译,该项目需要Boost的支持;
对于Windows版本,需要对代码进行如下修改:
- 注释掉c.cc文件中的#include <unistd.h>
- 在port.h文件中 #include "port/port_android.h"之后添加

#elif defined(LEVELDB_PLATFORM_WINDOWS) 
#include "port\port_win.h" 
#endif 

如果在Visual Studio 2015中,还需要进行如下修改:
- x64平台中添加预定义宏WIN32
- 注释掉port_win.h中的#define snprintf _snprintf

让人不爽的是Google目前没有再对leveldb的Windows版本进行维护,但是在需要处理大量的key-value数据的时候,还是很有效的(嗯,这东西可以理解为扩展版的+外部存储版本的std::map)

Boost

提供智能指针以及多线程和时间函数的支持。如果在VS2013中使用Boost1.60以上的版本,需要将VS升级到Update 5;Caffe中仅使用了以下6个静态库:
- boost.chrono (libboost_chrono-*.lib)
- boost.data_time (libboost_date_time-*.lib)
- boost.filesystem (libboost_filesystem-*.lib)
- boost.system (libboost_system-*.lib)
- boost.thread (libboost_thread-*.lib)
- boost.python (libboost_python-*.lib)

其中,boost.python仅在使用宏WITH_PYTHON_LAYER时才会被用到(“*”会随着编译环境以及Boost版本变化),另外,如果要使用libboost_python的静态库,在项目中需要添加宏定义BOOST_PYTHON_STATIC_LIB,否则默认链接boost.python的动态库;
Boost编译方法:
解压下载的压缩包之后,在Visual Studio的编译环境下运行boottrap.bat,得到b2.exe之后,运行如下命令:

b2 stage toolset=msvc-14.0 address-model=64 

由于我目前下载的Boost 1.64版本,python版本3.5,以上命令编译无法得到libboost_python-*.lib库,因此我参考Boost官方文档添加了配置文件user-config.jam,内容如下:

# Configure specific Python version.
using python : 3.5
#: C:/Program Files/Python35/python.exe
#: C:/Program Files/Python35/include #directory that contains pyconfig.h
#: C:/Program Files/Python35/libs    #directory that contains python27.lib
#: <toolset>msvc ;

相应的编译命令修改为:

b2 stage toolset=msvc-14.0 address-model=64 --user-config=user-config.jam 

这样编译后会得到libboost_python3-*.lib,但是在项目中依然会提示找不到libboost_python-*.lib库文件,因此需要将libboost_python库添加到忽略列表中,添加对libboost_python3的引用;

更新一下,目前Boost 1.68.0版本在VS2017的环境下,编译Python的库是没有问题的,Python路径没有问题的情况下,会直接生成python相关的库,如果没有生成,那么多半是python的路径空格问题

参考
[1] http://stackoverflow.com/questions/15881771/boost-1-53-python-fatal-error-lnk1104-boost-python-vc110-mt-gd-1-53-lib
[2] http://blog.csdn.net/zengraoli/article/details/70187556
[3] http://blog.csdn.net/lpp0900320123/article/details/52014741

OpenCV

在Caffe中仅用OpenCV读取图象数据。官方提供x64预编译版本;

OpenBlas

科学运算库,可以用Intel MKL替代
如果使用VS2013进行编译,则需要对openblas_config.h文件进行修改:

#if (defined(__STDC_IEC_559_COMPLEX__) || __STDC_VERSION__ >= 199901L || \
(__GNUC__ >= 3 && !defined(__cplusplus)) || \
_MSC_VER >= 1800) // Visual Studio 2013 supports complex

修改为

#if (defined(__STDC_IEC_559_COMPLEX__) || __STDC_VERSION__ >= 199901L || \
(__GNUC__ >= 3 && !defined(__cplusplus))) // Visual Studio 2013 does not support complex

VS2017以后可以无视这条,并且最新版本的OpenBlas一般不提供预编译版本,Window版本的则不需要GCC的相关三方库

HDF5

HDF是用于存储和分发科学数据的一种自我描述、多对象文件格式,可以用于对Caffe输入数据进行存储和读取,可以用于回归网络中浮点型标签的存储。官方提供预编译版本;

LMDB

非关系型数据库,不支持超过2G以上的数据。创建静态库项目,将midl.h、lmdb.h以及midl.c、mdb.c文件到项目中并进行编译;

Nvidia

CUDA

Nvidia GPU运算库。由于CUDA仅能够在x64平台下运行,因此Caffe不支持x86的GPU运算,但是可以在x86平台下编译CPU版本;

CUDNN

CUDA加速,下载压缩包后解压,将解压的文件拷贝到CUDA对应的文件夹中即可;

GCC

x64平台中需要libgcc_s_seh-1.dll、libgcc_s_sjlj-1.dll、libgfortran-3.dll、libquadmath-0.dll;
这是由于预编译版本的OpenBlas是基于MinGW交叉编译的,因此需要以上4个相关的DLL


以上,懒得再补了,现在用Caffe的人越来越少了,本来想整理以前遇到的问题集锦的也没弄出来,反正遇到啥问题上Google吧,不过前面提到的一些三方库在很多时候还是很有用的,比如glog以及leveldb等,学会用轮子了至少会减少自己造轮子的难度

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值