您的位置:首页 > Web前端

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

2017-05-16 11:18 323 查看
微在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;

4000
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Caffe