Caffe,protobuf 编译安装

一、简介

Caffe,全称Convolutional Architecture for Fast Feature Embedding。
Caffe是一个深度学习框架。

查看项目网站了解所有详细信息:http://caffe.berkeleyvision.org/

二、编译

Caffe依赖protobuf
注:如果Caffe要和tensorflow一起使用,需要调整依赖项版本:要基于protobuf-3.6.0版本来编译Caffe才行。

1.protobuf 编译

protobuf依赖boost
注:如果Caffe要和tensorflow一起使用,则要基于boost1.58版本来编译protobuf才行。

# 使用apt安装boost1.58
$ sudo apt install libboost1.58-dev

GitHub地址:https://github.com/protocolbuffers/protobuf
我下载的3.6.0版本:https://github.com/protocolbuffers/protobuf/releases/download/v3.6.1/protobuf-all-3.6.0.tar.gz

解压并进入protobuf-3.6.0:

# 依赖项
$ sudo apt-get install autoconf automake libtool curl make g++ unzip
# 编译
$ cd protobuf-3.6.0
$ ./autogen.sh
$ ./configure
$ make -j12
$ make check # 如果“make check”失败,您仍然可以安装,但该库的某些功能可能无法在您的系统上正常运行。
# 安装
$ sudo make install
$ sudo ldconfig # refresh shared library cache.

默认情况下,程序包将安装到/usr/local
但是,在许多平台上,/usr/local/lib不是LD_LIBRARY_PATH的一部分。您可以添加它,但可能更容易安装到/usr。为此,请按如下方式调用configure:
./configure --prefix=/usr
如果您已经使用不同的前缀构建了包,请确保在再次构建之前运行make clean

有关configure和make的高级用法信息,请参阅autoconf文档:
http://www.gnu.org/software/autoconf/manual/autoconf.html#Running-configure-Scripts

2.caffe 编译

GitHub地址:https://github.com/BVLC/caffe
在Ubuntu 16.04系统中,Caffe所有的依赖包均可通过apt搞定。
下面编译的是GPU版本:

$ cd caffe
# 依赖项(根据上述步骤,我们会已经安装好需要的依赖了)
#$ sudo apt-get install 
# 修改选项 # 修改Makefile.config,例如我们可以打开CPU_ONLY选项。
$ cp Makefile.config.example Makefile.config
# 我是打开了USE_CUDNN选项,关闭CPU_ONLY
$ gedit Makefile.config
 USE_CUDNN := 1
# CPU_ONLY := 1
 CUDA_DIR := /usr/local/cuda
# 编译
$ make clean # 如果编译有奇怪问题,干脆直接clean一下。
$ make all -j12
# make runtest -j16
# make pycaffe

下面编译的是CPU版本:

# 修改选项 # 需要关闭USE_CUDNN选项,打开CPU_ONLY选项:
$ gedit Makefile.config
# USE_CUDNN := 1
 CPU_ONLY := 1
# 因为我系统里是openCV4,include目录和opencv3有些不同,所以手动设置了路径:
 INCLUDE_DIRS += /usr/local/include/opencv4
# 编译
$ make clean # 如果编译有奇怪问题,干脆直接clean一下。
$ make all -j12

# 编译问题1:
src/caffe/layers/window_data_layer.cpp:293:42: error: ‘CV_LOAD_IMAGE_COLOR’ was not declared in this scope
         cv_img = cv::imread(image.first, CV_LOAD_IMAGE_COLOR);
                                          ^
# opencv4里的 CV_LOAD_IMAGE_COLOR 应该使用 cv::IMREAD_COLOR 来代替:
cv::imread(image.first, cv::IMREAD_COLOR);
# 好几个这样的问题,都需要这样去改源码。
# 例:CV_LOAD_IMAGE_GRAYSCALE 换成 cv::IMREAD_GRAYSCALE 等等。。。

# 问题2:
src/caffe/layers/hdf5_output_layer.cpp:4:18: fatal error: hdf5.h: No such file or directory
# 需要在Makefile.config里添加hdf5的路径:
$ gedit Makefile.config
 INCLUDE_DIRS += /usr/include/hdf5/serial/

# 注:修改过宏定义,因为与openVINO冲突。
#  不是我修改的,所以具体改动点不明确。
库调用

对于API调用,可以在CMakeLists.txt中使用include_directories()写入指定调用路径。
我是把这些文件拷贝到了另一个文件夹下:
新建shell脚本auto_include_caffe.sh文件,写入以下内容,然后根据自己的目录运行脚本:

#!/bin/bash

if [ "$1" == "-h" ];then
    echo "执行的文件名:$0";
    echo "功能:拷贝caffe目录中的链接库文件,到目标目录中。"
    echo "用法:$ bash 文件名 [源目录] [目标目录]"
    echo "例子:$ bash auto_include_caffe.sh /home/toson/soft/caffes/caffe /home/toson/compile_libs/caffe"
    exit 0;
fi


if [ "$1" == "" ];then
    echo "请输入源目录!"
    exit 0;
fi

if [ "$2" == "" ];then
    echo "请输入目标目录!"
    exit 0;
fi

mkdir -p "$2"
cp -r "$1""/include" "$2"
cp -r "$1""/.build_release/src" "$2"
cp -r "$1""/.build_release/lib" "$2"

echo "end."

这样在CMakeLists.txt中这样进行链接:

include_directories(
        /home/toson/compile_libs/caffe/include
        /home/toson/compile_libs/caffe/src)
link_directories(
        /home/toson/compile_libs/caffe/lib)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值