Caffe三方库相关资料、编译方法和注意事项[补坑中]

来源:互联网 发布:ap100编程教程 编辑:程序博客网 时间:2024/05/21 10:34

微在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项目并编译;

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

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的引用;

参考
[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

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;