ubuntu16.04 从源码编译安装caffe(纯CPU版)

2023-11-06

需要做caffe在嵌入式的移植,决定先在X86上理清所有依赖包关系,再做交叉编译,由于目的是用在嵌入式,暂不支持GPU。

1.boost

官网:http://www.boost.org/

Caffe 中主要使用了Boost 的智能指针,新版v1.66.0支持C++11。

pycaffe使用了Boost Python 实现c/c++和Python的链接,方便Python调用c/c++模块。

tar jxvf boost_1_66_0.tar.bz2 
cd boost_1_66_0/
1) 使用--show-libraries查看所有支持单独编译的庫库:
./bootstrap.sh –show-libraries
2) 使用 --without-libraries=, , , 逗号隔开去掉不需要编译的库,或者使用—with-libraries添加必要支持的库,--prefix=/../ 指定编译后的安装路径, 也可以在jam文件配置;
./bootstrap.sh –with-libraries=system,thread,filesystem

3) 生成b2和bjam,和project-config.jam,修改该文件,配置相关路径:


./bjam
./bjam installh1 { margin-bottom: 0.21cm; }h1.western { font-family: "Liberation Sans", sans-serif; font-size: 18pt; }h1.cjk { font-family: "Noto Sans CJK SC Regular"; font-size: 18pt; }h1.ctl { font-family: "Noto Sans CJK SC Regular"; font-size: 18pt; }p { margin-bottom: 0.25cm; line-height: 120%; }a:link { }code.ctl { font-family: "Liberation Mono", monospace; }


2.opencv

参考链接:https://blog.csdn.net/luteresa/article/details/79916064


3.protobuf

google开发的一种可以实现内存和非易失存储介质(如硬盘)交换的协议接口。使用protobuf可以跨语言(c++/java/python)传递相同的数据结构。
仓库:https://github.com/google/protobuf.git
C++ Installation – Unix

To build protobuf from source, the following tools are needed:
autoconf
automake
libtool
curl (used to download gmock)
make
g++
unzip
On Ubuntu, you can install them with:

$ sudo apt-get install autoconf automake libtool curl make g++ unzip
./autogen.sh
 ./configure  --prefix=/home/leon/caffe_install/

$ make
$ make install


4.GFLAGS

GFLAGS在Caffe 中主要起到命令行参数解析作用,与protobuf类似,只是输入源不同。

仓库:https://github.com/gflags/gflags.git

mkdir build;cd build/
cmake ..
ccmake ..
修改两行:BUILD_SHARED_LIBS ON
CMAKE_INSTALL_PREFIX /home/leon/caffe_install

按c,g,生成Makefle。


Make
make install

5.GLOG

GLOG在Caffe 中主要起到记录日志的作用,便于开发者查看Caffe训练中产生的中间输出,并根据这些信息决定如何调整参数来控制收敛。GLOG 的使用方法参考tools/caffe.cpp
仓库:https://github.com/google/glog.git


glog依赖gflags库:
./autogen.sh
./configure --prefix=/home/leon/caffe_install/  --with-gflags=/home/leon/caffe_install/

make
make install

6.HDF5

HDF(Hierarchical Data File)美国国家高级计算应用中心(NCSA)为满足各种领域研究需求而研制的一种能高效存储和分发科学数据的新型数据格式。可以存储不同类型的图像和数码数据的文件,并且可以在不同类型的机器上传输,同时还有统一处理这种格式的函数库。Caffe 训练模型可以选择保存为HDF5格式或者ProtoBuffer(默认)格式。
官网:https://www.hdfgroup.org/downloads/hdf5/source-code/
./configure –prefix=/home/leon/caffe_install/
make
make install

7.BLAS

最常用的BLAS 库有 ATLAS,Intel MKL,OpenBLAS。ATLAS 是免费开源的,也
是 Caffe 的默认选择。Intel MKL 是商业性质的,针对 Intel 的 CPU 专门做了优化的
BLAS 库,可以选择使用免费试用以及学生 licenses。OpenBLAS 是免费开源的,针对
并行做了优化的 BLAS 库。
在GPU端的数值计算则由相应的cuBLAS完成,其API接口与OpenBLAS类似。

caffe可以选中任何一种,在Makefile.config文件修改”BLAS:=”一行
# BLAS choice:
# atlas for ATLAS (default)
# mkl for MKL
# open for OpenBlas                                                                           
BLAS := open

仓库: git clone https://github.com/xianyi/OpenBLAS.git  (最新为OpenBLAS 0.2.20 version)

cd OpenBLAS/

make

make PREFIX=/home/leon/caffe_install/   install


8.Snappy

Snappy是一个用来压缩的C++库,比zlib更快,但文件相对更大;
仓库:https://github.com/google/snappy
修改CMakeLists.txt,打开动态库选项
option(BUILD_SHARED_LIBS "Build shared libraries(DLLs)." ON)

mkdir build
cd build
cmake -D CMAKE_INSTALL_PREFIX=/home/leon/caffe_install  ..
make
make install

9.LMDB/LEVELDB

LMDB在caffe中作用主要是提供数据管理,将各色原始数据(JPEG图片,二进制数据)转换为统一的Key-Value存储,便于Caffe 的DataLayer获取这些数据。
LEVELDB库是Caffe中早期版本使用的数据存储方式,由google开发,目前大部分应用都已经使用LMDB替代了LEVELDB,但是了兼容,仍然需要将这个依赖库编译到Caffe中。
LMDB:
仓库:https://github.com/LMDB/lmdb.git

修改Makefile :
#prefix    = /usr/local
prefix    = /home/leon/arm_install/

make
make install

LEVELDB:

仓库:https://github.com/google/leveldb.git

make
cp -r include/leveldb/  /home/leon/caffe_install/include/
cp libleveldb.so* /home/leon/caffe_install/lib/

所有库和头文件都已经安装在/home/leon/caffe_install/, 路径加入到环境变量中,准备工作就绪;

终于来到主咖caffe。


caffe编译:(待续)


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ubuntu16.04 从源码编译安装caffe(纯CPU版) 的相关文章

随机推荐

  • Axure RP9笔记--页面自适应

    笔记2 页面自适应 大三的时候曾经对猫耳FM进行重构 使用HTML 现在看看真是一塌糊涂 只做出了静态页面 当时还遇到了个问题 浏览器变成小窗后 里面的内容并不会改变大小 但是现在大部分网站都做了页面自适应 当时还对前端一无所知 今天的学习
  • 如何在macOS中编译LLVM

    第一步 在App Store中搜索并安装Xcode 如果不想安装整个Xcode 可以在terminal中运行以下命令来只安装命令行工具 xcode select install 第二步 安装LLVM的依赖库 首先运行以下命令 以官网为准 来
  • sql尚硅谷day1

    mysql基础 1 通过mysql自带服务端 只限root用户 2 cmd进入mysql命令 mysql h localhost P 3306 u 用户名 p 停止exit 显示数据库 show databases 打开一个库 use 库名
  • 五大板块(5)——字符串

    参考 五大板块 5 字符串 作者 丶PURSUING 发布时间 2021 03 18 16 03 48 网址 https blog csdn net weixin 44742824 article details 114982019 目录
  • 华为OD机试真题-士兵过河II【2023Q2】【JAVA、Python、C++】

    题目描述 一支N个士兵的军队正在趁夜色逃亡 途中遇到一条湍急的大河 敌军在T的时长后达河面 没到过对岸的士兵都会被消灭 现在军队只找到了1只小船 这船最多能同时坐上2个士兵 1 当1个士兵划船过河 用时为 a i 0 lt i lt N 2
  • java: framework from BLL、DAL、IDAL、MODEL、Factory, using MySql 8.0

    sql drop table BookKindList 书目录 create table BookKindList BookKindID INT NOT NULL AUTO INCREMENT 自动增加 BookKindName nvarc
  • G - LR Constraints(AtCoder - arc124_a )

    题目链接 题意 N个卡片 上面的数字为1 k 然后有k个限制条件 每个限制条件有1个字母 ci 和一个数字 ki 如果ci是 L 表示i能够输入的最左边的位置是ki 如果ci是 R 表示i能够输入的最右边的位置是ki 如果能理解题意 这个题
  • simulink的工具箱开发stm32步骤

    1 打开stm32cubeMx 配置芯片信息 记得配置时钟 之前就是因为没有配置time 出现灯不亮的问题 2 打开Matlab 将当前工作目录切换到配置文件的目录IOC配置文件 stm32cubeMx 然后开始调用simulink模块 3
  • linux tcpdump rpm,linux命令——tcpdump

    这样tcpdump就顺利地安装到你的linux系统中 怎么样 很简单吧 二 Tcpdump的使用 tcpdump采用命令行方式 它的命令格式为 tcpdump adeflnNOpqStvx c 数量 F 文件名 i 网络接口 r 文件名 s
  • 在CentOS7中安装JDK1.8并配置环境变量

    在CentOS7中安装JDK1 8并配置环境变量 准备工作 首先下载jdk的压缩包 64位 链接 http pan baidu com s 1o7B1PXK 密码 el7b 1 新建 usr java文件夹 将jdk 8u45 linux
  • HIVE中关于collect_set与explode函数妙用

    hive的复合数据类型 hive中的列支持使用三类复杂的集合数据类型 即 array map及struct 这些类型的名称是保留字 具体用法可参见该篇博文 里面有关于三类基本集合数据类型的操作实例 注 map中可嵌套array类型 例如 定
  • openwrt中samba及ftp服务器设置

    1 挂载点设置 U盘或硬盘格式化为exfat或ext4 挂载点自定义为 mnt sda1 并记得勾 上启用挂载项 2 samba设置 3 ftp设置 新手折腾很久 只会最简单的设置 还没完全搞明白但能用root登录使用了 但自定义用户和匿名
  • Linux下Qt程序运行时找不到so的解决办法

    一 全局性设置 将so放入相应的系统lib目录 修改环境变量 在环境变量中添加so所在路径 修改一些文件 在其中指定so所在路径 大概有上面的这3种方式 就不详细说了 相信大家都清楚 二 指定编译选项 上面介绍的方式 无一例外 都需要修改环
  • vulnhub-lampiao

    lampiao 1 信息收集 nmap p 192 168 14 189 dirb http 192 168 14 189 1898 X txt php 发现更新日志文件CHANGLOG txt 访问更新日志文件CHANGELOG txt
  • iOS 15 适配踩坑:NavigationBar、UITabBar失效问题

    苹果前两天推出了iOS 15 秋天都等不及 相关链接 ios 15 0 适配问题 NavigationBar和UITabBar失效问题 Xcode 13 beta版 iOS 15 beta 3的系统 除了客户提出的问题 自己还发现了两处UI
  • python常用的类间关系

    1 类之间的关系 1 1 定义 1 2 例子 2 定义可访问性 2 1 定义 2 2 例子 附录 1 类之间的关系 1 1 定义 简单的说 类和类之间的关系有三种 is a has a和use a关系 is a关系也叫继承或泛化 比如学生和
  • 《软件测试的艺术》第七章 可用性(或用户体验)测试

    软件测试的艺术 第七章 可用性 或用户体验 测试 7 0 前言 7 1 可用性测试基本要素 7 2 可用性测试流程 7 2 1 测试用户的选择 7 2 2 需要多少用户进行测试 7 2 3 数据采集方法 7 2 4 可用性调查问卷 7 2
  • 网页使用jssdk微信分享报错

    网页使用jssdk微信分享报错 显示找不到文件 jssdk php文件如下
  • 判断字符串是否以 endStr 为结尾

    String prototype endWith function endStr 判断字符串以 endStr 为结尾 let d this length endStr length return d gt 0 this lastIndexO
  • ubuntu16.04 从源码编译安装caffe(纯CPU版)

    需要做caffe在嵌入式的移植 决定先在X86上理清所有依赖包关系 再做交叉编译 由于目的是用在嵌入式 暂不支持GPU 1 boost 官网 http www boost org Caffe 中主要使用了Boost 的智能指针 新版v1 6