Caffe作为在众多公司搞深度学习时较多使用的框架,其在使用的友好程度上显然要比后起的一些深度学习框架要差一些,虽然如此,其作为深度学习的第一个开源框架,自有它的很多优势,比如设计结构。关于Caffe的种种,这里不表,小白菜仅聊很小的一个点,即:对于调用Caffe框架的C++程序,如何使用makefile进行编译的问题

这个问题是小白菜近两天遇到的一个问题,经过小半天的谷歌以及尝试,顺利解决。记录下来,一则备查询之需,二则对碰到相同问题的朋友也应该有帮助。当然对使用IDE的朋友,这个问题并不是问题,但是某些场合,比如开发环境在服务器上,这时候只能采用vim+makefile的方式来编写代码以及编译代码了,so我们终究还是避不过这个问题。

关于使用makefile编译调用Caffe框架的C++程序,有两种方式:一种是最容易且最笨的方法,即把你写的C++程序方法Caffe的examples目录里面,然后在CMakeLists.txt里面把你的C++程序添加到相应的位置,这种方式终究不是一个长久之道;另外一种是把Caffe编译成一个库,然后我们可以像正常使用一个库一样,调用和编译C++程序了。小白菜以为,此种方式是最优雅的方法,注意,对于makefile文件,我们并不是直接写的,而是通过写cmake文件然后编译生成的makefile文件。整个过程分为三步:

  • 重新编译一份Caffe
  • 编写cmake文件
  • 编译目标文件

下面细解该方法的步骤。

重新编译一份Caffe

对于已有Caffe环境了的小伙伴,对于重新编译一份Caffe可能觉得多余,但小白菜以为,通过下面这种方式编译,可以让你后续的步骤能够顺利进行,执行下面命令:

git clone https://github.com/BVLC/caffe.git
git checkout master
cp Makefile.config.example Makefile.config

修改Makefile.config文件,小白菜的线上环境用的Openblas做的矩阵加速,所以BLAS这一块的配置如下:

# BLAS choice:
# atlas for ATLAS (default)
# mkl for MKL
# open for OpenBlas
BLAS := open
BLAS_INCLUDE := /opt/OpenBLAS/include
BLAS_LIB := /opt/OpenBLAS/lib

然后,可以开始愉快地编译下面Caffe了:

mkdir build && cd build
cmake .. -DBUILD_SHARED_LIB=ON -DBLAS=open
cmake . -DCMAKE_BUILD_TYPE=Debug     # switch to debug
make -j 12 && make install           # installs by default to build_dir/install
cmake . -DCMAKE_BUILD_TYPE=Release   # switch to release
make -j 12 && make install           # doesn’t overwrite debug install
make pycaffe

上面编译完成后,我们在build/install目录下看到Caffe作为一个供调用的库的完整文件:

├── bin
├── include
├── lib
├── python
└── share

到这里,第一步走完了。回到关于推荐重新编译一份的问题,为什么推荐重新编译一份呢?这是因为,后面在写cmake文件的时候,我们是通过find_package来找Caffe库的,如果不按上面的过程重新编译一份,find_package无法找到Caffe的库目录。当然你也可以通过其他的方式绕过去,但如果想少些折腾,还是按这个来为妥。

此外,为了能够正常使用Caffe的Python接口,还需要按照Python的一些依赖模块:

cd caffe_root/python
pip install -r requirements.txt

补充:对于mac osx系统,如果按照上面编译完后,在import caffe时出现如下错误:

26852 segmentation fault python

这个错误主要是Makefile.conf中python的include和lib设置不合理所引起的,具体可以参考Segfault on PyCaffe import。将PYTHON_INCLUDEPYTHON_LIB修改为:

PYTHON_INCLUDE := /usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/include/python2.7PYTHON_LIB := /usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib

然后重新按照前面的步骤编译一遍即可解决上面的bug。

虚拟环境运行Caffe异常

讲真,只要使用python编程,anaconda绝对是一把利器。集成的ipython、jupyter、常用的第三方模块以及虚拟环境,可以省去不少让人折腾的功夫。举个例子,在日常的开发中,小白菜做开发都是在服务器上,但服务器上没有sudo权限,所以如果用Pyhon做开发,弄个虚拟开发环境必不可少。一直以来,小白菜都是用的Virtualenv来构建虚拟环境。这几天,在看Anaconda的bin目录下,发觉了Anaconda也有activate,然后揣测它应该跟Virtualenv,然后执行source activate,安装了Keras测试一下,发觉它并没有安装在系统目录里,而是安装在Anaconda目录下,甚喜,因为这意味着小白菜以后可以随意安装自己需要的安装包。

为了方便导入Caffe,将Caffe的Python目添加到环境变量中:

export PYTHONPATH=/home/yuanyong/caffe/python:$PYTHONPATH

执行source .bashrc,然后启动ipython,导入Caffe,异常抛出如下:

In [4]: import caffeIn [5]: QXcbConnection: Could not connect to display
已放弃(吐核)

因为服务器上无图像界面服务,所以推测这个错误应该跟这个图像界面的相关,然后谷歌到了Generating matplotlib graphs without a running X server,在导入Caffe之前,使用Agg backend作为后端渲染,即:

In [2]: import matplotlib as mpl
In [3]: mpl.use('Agg')
In [4]: import caffe

异常消除。这个问题比较奇怪,后来小白菜不执行[2][3]发觉没出现原来的错误了,不过不管出不出现了,整理以备再次出现此问题。

编写cmake文件

顺利完成了重新编译一份Caffe的步骤后,我们来写(复制)一份CMakeLists.txt文件:

cmake_minimum_required(VERSION 2.8.8)
find_package(Caffe)
include_directories(${Caffe_INCLUDE_DIRS})
add_definitions(${Caffe_DEFINITIONS})    # ex. -DCPU_ONLY
add_executable(caffeinated_application extract_features.cpp)
target_link_libraries(caffeinated_application ${Caffe_LIBRARIES})

此份文件来自Improved CMake scripts。上面,小白菜要单独编译一份经过修改后的提取特征的文件extract_features.cpp,整个目录是这样的:

├── CMakeLists.txt
└── extract_features.cpp

编译目标文件

我们进入到包含CMakeLists.txtextract_features.cpp文件的目录,执行下面命令:

mkdir build
cd build
cmake ..
make

执行到这一步,得到了我们的最终可执行文件caffeinated_application,我们的整个使用makefile编译调用Caffe框架的C++程序的问题已完结。

通过此种方法,我们能够很优雅的解决使用makefile编译调用Caffe框架的C++程序的问题,后面就可以愉快地写各种调用Caffe框架的代码了。

附录

  1. 如何在Macosx上安装caffe

from: http://yongyuan.name/blog/compiling-cpp-code-using-caffe.html

机器视觉:makefile编译调用Caffe框架的C++程序相关推荐

  1. Android端调用Caffe模型实现CNN分类

    本文的主要内容如下. 移动端的深度学习的实现方式 tiny-cnn介绍以及移动端移植 总结与改进 应用截图 一.移动端深度学习的几种实现方式 (1)Caffe的移动端编译项目 caffe(命令式框架) ...

  2. caffe框架下目标检测——faster-rcnn实战篇操作

    原有模型 1.下载fasrer-rcnn源代码并安装 git clone --recursive https://github.com/rbgirshick/py-faster-rcnn.git 1) ...

  3. 交互系统的构建之(一)重写Makefile编译TLD系统

    交互系统的构建之(一)重写Makefile编译TLD系统 zouxy09@qq.com http://blog.csdn.net/zouxy09 为了对TLD系统做一些功能的填充,例如添加语音合成来提 ...

  4. python调用caffe时,出现ImportError: No module named _caffe

    一个看似很简单的问题,折腾了我好久,今天恍然大悟,当然是自己太low,理解不够深入. 作为一个业余的小白,半年前配置了ubuntu 16.04 +CUDA8.0 +caffe+opencv 2.13 ...

  5. 奔跑吧Caffe(在MNIST手写体数字集上用Caffe框架训练LeNet模型)

    数据集背景: MNIST 是一个大型的手写体数字数据库,广泛应用于机器学习领域的训练和测试,由纽约大学Yann LeCun教授整理. MNIST包括60000个训练集和10000测试集,图片固定尺寸为 ...

  6. python caffe框架_ubuntu14.04 intel集成显卡配置caffe框架(用cpu跑)+pycharm自带python导入caffe框架...

    用cpu跑,不用安装CUDA. 1.安装依赖库 安装[build-essentials] 安装开发所需要的一些基本的包, sudo apt-get install build-essential BL ...

  7. win10在Anaconda3下面安装caffe框架(CPU)Python2.7从入门到放弃

    最新更新 https://blog.csdn.net/baidu_40691432/article/details/121426736 电脑系统重装,在2021年的11月再次在win10系统上安装ca ...

  8. Caffe使用step by step:caffe框架下的基本操作和分析

    Caffe使用step by step:caffe框架下的基本操作和分析 时间:2015-10-16 11:40:09      阅读:808      评论:0      收藏:0      [点我 ...

  9. linux环境cpp/c文件的makefile编写(caffe举例)

    编译单个cpp文件 方法一.g++ 文件名.cpp,生成一个名为 "文件名.out" 的可执行文件 方法二.g++ -c 文件名.cpp -o 新文件名.o:生成一个被命名成 &q ...

最新文章

  1. QIIME 2教程. 27语义类型Semantic(2020.11)
  2. SPQuery 查询知多少
  3. ps里面怎么插入流程图_photoshop cs6绘画带箭头简单流程图的操作步骤介绍
  4. Rabbit MQ 学习 (一)Window安装Erlang环境
  5. python value函数_python 函数基础
  6. php 映射程序,windows磁盘映射技术分享
  7. PyQt5学习笔记(二) 文本控件及使用
  8. 英特尔吃iPhone 7 Modem芯片订单可能逾5成 挹注15亿美元营收
  9. Python爬取网页中表格数据并导出为Excel文件
  10. ios pan手势滑动消失动画_iOS仿抖音—评论视图滑动消失
  11. HDU2000 ASCII码排序【字符串排序】
  12. NLP学习—23.基于Transformer的机器翻译实战
  13. Viscosity for Mac(好用的Open客户端)
  14. linux 命令行下载bt,linux命令行下载BT种子和磁力链接
  15. 超级搜索术,提升解决问题的能力
  16. adb 的安装与连接手机详解
  17. IEEE 中 LaTeX在作者后面加上ORCID标志和链接
  18. 在yii2应用中,使用imagine库生成分享图实战。
  19. scylladb源码安装过程
  20. Android中的Gradle之配置及构建优化

热门文章

  1. mysql表名查询sql
  2. java中的list时间排序
  3. hadoop命令帮助
  4. 【Python】Python常用的Series 和 Dataframe处理方法
  5. linux系统管道知识,哈哈哈,好东西转给大家啦
  6. 暴富、投机,金钱、欲望、人性,一个叫 Fomo3D的游戏正在刷新你的世界观
  7. 让餐厅放心的云服务-雅座CRM技术解密
  8. 17年9月计算机二级试题,9月计算机二级MSOffice练习试题
  9. APM - Hello Javaagent
  10. Oracle-PFILE和SPFILE解读