caffe学习笔记,导出的python接口参数有自定义类型

使用的是开源的深度学习代码caffe,编译的pycaffe。借助boost.python把caffe里src/caffe/util/io.cpp里的ReadImageToDatum接口导出了对应的python接口,接口有一个参数类型是caffe::Datum*,是自定义的指针结构体类型。使用python接口调用该如何给此类型赋值,ctypes没有查到怎么处理此类问题,swig和boost.python不是很熟悉这两个工具,求大神指点

首先在你要安装的路径下 clone :
git clone https: //github.com/BVLC/caffe.git

最近尝试在MAC(OS X 10.11 El Capitan)上安装Caffe 以及Python接口遇到了一些问题但是官方安装教程上并没有提出这些问题的解决办法搜索了很久(主要在于Python接口上) 终于找到了解决办法

官方安装手册

进入 caffe ,将 Makefile.config.example 文件复制一份并更名为 Makefile.config ,也可以在 caffe 目录下直接调用以下命令完成复制操作 :
sudocpMakefile.config.exampleMakefile.config

其实Caffe的安装分两步:安装依赖 编译源码

备注:使用系统 - Ubuntu 15.04 64位操作系统(若系统位于虚拟机上,在安装CUDA后,Ubuntu将无法进入图形界面)

复制一份的原因是编译 caffe 时需要的是 Makefile.config 文件,而 Makefile.config.example 只是 caffe 给出的配置文件例子,不能用来编译 caffe。
然后修改 Makefile.config 文件,在 caffe 目录下打开该文件:
sudogedit Makefile.config

首先是安装依赖:

/**************************************************/

修改 Makefile.config 文件内容:

【必要依赖】: 

//准备工作:CUDA,OpenBLAS/ATLAS,Boost, protobuf,OpenCV, Python

  1. 应用 cudnn
    将#USE_CUDNN := 1修改成:
    USE_CUDNN :=1

  2. 应用 opencv 版本
    将#OPENCV_VERSION := 3 修改为:
    OPENCV_VERSION :=3

  3. 使用 python 接口
    将#WITH_PYTHON_LAYER := 1 修改为
    WITH_PYTHON_LAYER :=1

  4. 修改 python 路径
    INCLUDE_DIRS:=$(PYTHON_INCLUDE) /usr/local/include
    LIBRARY_DIRS:=$(PYTHON_LIB) /usr/local/lib /usr/lib
    修改为:
    INCLUDE_DIRS:=$(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
    LIBRARY_DIRS:=$(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu/usr/lib/x86_64-linux-gnu/hdf5/serial

官方推荐用homebrew来安装:

/**************************************************/

这里贴出 我的 Makefile.config 文件 方便大家参考
然后修改 caffe 目录下的 Makefile 文件:
将:
NVCCFLAGS =-ccbin=$(CXX)-Xcompiler-fPIC$(COMMON_FLAGS)
替换为:
NVCCFLAGS = -D_FORCE_INLINES -ccbin=$(CXX)-Xcompiler -fPIC$(COMMON_FLAGS)

brew install -vd snappy leveldb gflags glog szip lmdb
# 添加science源来安装 OpenCV 和 hdf5
brew tap homebrew/science
brew install hdf5 opencv

方法一:

将:LIBRARIES = glog gflags protobuf boost_system boost_filesystem m hdf5_hl hdf5
改为:LIBRARIES = glog gflags protobuf boost_system boost_filesystem m hdf5_serial_hl hdf5_serial

或者使用Anaconda Python这个工具包含了大量的Python工具包来解决以上依赖问题而且安装新的软件包也特别容易。如果用Anaconda Python的话HDF5已经包含其中了 可以略过。并且opencv这里有两行需要改一下:

Ubuntu系统上安装caffe官方手册(第一次安装时竟没看到这个神器。。。)

然后修改 /usr/local/cuda/include/host_config.h 文件 :

brew edit opencv
  1. 基本依赖项

error-- unsupported GNU version! gcc versions later than 4.9 are not supported!改为

//#error-- unsupported GNU version! gcc versions later than 4.9 are not supported!

OK ,可以开始编译了,在 caffe 目录下执行 :
makeall -j8

这是如果之前的配置或安装出错,那么编译就会出现各种各样的问题,所以前面的步骤一定要细心。
编译成功后可运行测试:
sudomake runtest -j8

图片 1

如果显示结果为上图所示,则表示 caffe 已经成功安装。

在python接口中制定caffe路径:
import sys
sys.path.append(‘/home/xxx/caffe/python/’)

库里安装opencv:
pip install opencv-python

参考文章:http://www.h3399.cn/201705/86033.html
http://www.cnblogs.com/softzrp/p/6479442.html
http://blog.csdn.net/u010417185/article/details/52065472
http://blog.csdn.net/yhaolpz 详细安装

然后找到跟下面两行类似的改成如下(改变的他Python路径用Anaconda的Python而不是系统自带的)

$sudo apt-get install libprotobuf-dev  libleveldb-dev  libsnappy-dev  libopencv-dev  libhdf5-serial-dev  protobuf-compiler

  -DPYTHON_LIBRARY=#{py_prefix}/lib/libpython2.7.dylib
  -DPYTHON_INCLUDE_DIR=#{py_prefix}/include/python2.7

$sudo apt-get install --no-install-recommends  libboost-all-dev

然后是BOOST和BOOST-Python 安装这个主要是为了之后Python接口的编译

  1. CUDA(使用方法二安装)

  2. BLAS

# with Python pycaffe needs dependencies built from source
brew install --build-from-source --with-python -vd protobuf
brew install --build-from-source -vd boost boost-python

若选择使用ATLAS:$sudo apt-get install libatlas-base-dev(安装较方便)

BLAS部分:网上有人说系统自带的不稳定推荐换成MKL但是我没有换也是可以用的。

若选择使用OpenBLAS 则参考方法二安装;

Python接口:从Github上把Caffe下载下来解压后用命令行进入其中的Python文件夹执行以下命令来安装Python的依赖:

  1. Python(可选)
for req in $(cat requirements.txt); do pip install $req; done

若需要使用Python,则$sudo apt-get install python-dev 安装pycaffe接口的Python头文件;

用MAKE指令来编译:

方法二中的Python安装;

在编译之前我们需要修改make.config的几个地方

  1. 剩余依赖项 (14.04及以上)

首先将make.config.example的.example后缀删除

$sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev

然后将CPU_ONLY := 1 的注释去掉(删除#)因为我的电脑是AMD的显卡没法使用CUDA所以无法进行GPU加速

 

然后就是后面的Python路径,用Anaconda Python的话将下面的注释去掉:

 

 ANACONDA_HOME := $(HOME)/anaconda
 PYTHON_INCLUDE := $(ANACONDA_HOME)/include 
   $(ANACONDA_HOME)/include/python2.7 
   $(ANACONDA_HOME)/lib/python2.7/site-packages/numpy/core/include 

方法二:(因为系统空间问题失败。。。)

这个地方一定要注意路径正确 按照自己机器的配置来。

  1. CUDA - 是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题

接下来就可以MAKE了

download

make all
make test
make runtest
make pycaffe

0.1 选择操作系统和安装类型

如果没有报错并且运行完runtest之后看到了一路绿色pass那么恭喜你安装完了这个时候他的CPP接口是可以用的但是Python不一定

图片 2

将caffe/python路径放入你的PYTHONPATH中注意/path/to/caffe/python是你caffe的地址,注意更改。

0.2 deb(network)方式的安装

export PYTHONPATH=/path/to/caffe/python:$PYTHONPATH

图片 3

在命令行中进入Python尝试import caffe 如果不报错那么恭喜你Python接口也可以正常使用。

下载上图所示软件到Ubuntu中;

 

执行后面3行命令即可;

遇到的报错:

 

  1. 如果运行import caffe的时候提示 no module  那么说明你的PYTHONPATH有问题 注意更改
  2. 如果遇到了segmentation fault 那很有可能是你系统里也有多个版本的Python并且编译和运行的时候不是一个版本(通常是boost-Python链接的Python是系统自带Python而不是anaconda)。这个时候可以在编译的时候强制他们都用同一个Python。用otool -L指令来检查:
  1. OpenBLAS - 基础线性代数子程序库,里面拥有大量已经编写好的关于线性代数运算的程序

download

$ brew info boost
...
$ otool -L /usr/local/Cellar/boost/1.57.0/lib/libboost_system.dylib # this is one of the libs that caffe links against
...
/usr/lib/libc  .1.dylib (compatibility version 1.0.0, current version 120.0.0)
...
$ brew info boost-python
...
$ otool -L /usr/local/Cellar/boost-python/1.57.0/lib/libboost_python.dylib
...
/usr/local/Frameworks/Python.framework/Versions/2.7/Python (compatibility version 2.7.0, current version 2.7.0)

1.1 下载.zip / .tar.gz文件,解压;

          注意其中的boost和boost-python的版本和路径需要更改。

1.2 安装命令

    我在Github上发现还有另一种解决方法,首先查看_caffe.so:

$sudo make

    otool -L python/caffe/_caffe.so

$sudo make PREFIX=/path/to/your/installation install

如果他没有链接到你的anaconda Python上那么用下面的命令强制他链接上去就不会有segmentation fault的错误啦:

[1.3 将生成的.so库文件放入系统/lib文件夹中](可选步骤);

    install_name_tool -change "libpython2.7.dylib" "$HOME/anaconda/lib/libpython2.7.dylib" python/caffe/_caffe.so

 Reference:

 

  1. Caffe offical installation
  2. Github:Theory of Building Caffe on OS X
  3. Github Issue#591
  1. Boost库-为C 语言提供的扩展的C 程序库

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-06/132547.htm

download

图片 4

方法一:(失败)

2.1 下载boost_1_60_0.tar.gz文件,解压;

2.2 安装命令

执行$sudo ./bootstrap.sh 编译成功;

执行$sudo ./bjam 开始编译,大约十几分钟,编译完成后出现:The Boost C Libraries were successfully built!

方法二:

直接执行命令:

$apt-cache search boost :搜索所有的boost库

$sudo apt-get install libboost-all-dev:安装相应的库

2.3 测试代码:利用boost库将字符串转换成整数

1 #include<iostream>
2 #include<boost/lexical_cast.hpp>
3 int main()
4 {
5    int a = boost::lexical_cast<int>("123456");
6    std::cout << a <<std::endl;
7    return 0;
8 }

 

 

  1. protobuf - protocol buffer:google的一种数据交换的格式

方法一:根据源码安装(失败)

download

3.1 下载,并解压;

3.2 安装命令

C 下安装指南

安装编译工具$sudo apt-get install autoconf automake libtool curl

执行$./autogen.sh 生成configure脚本;

失败未解决:

提示 - Google Mock not present.  Fetching gmock-1.7.0 from the web... 未成功

解决:是否需要安装Google Mock?Google Mock安装指南 

 

开始编译:

$./configure

$make

$make check

$sudo make install

$sudo ldconfig # refresh shared library cache.

 方法二:(成功)

sudo apt-get install protobuf-compiler

 

  1. OpenCV(安装时间较长)

利用自动脚本安装(脚本地址)

Ubuntu执行:

$cd Ubuntu

$chmod x *

$./opencv_latest.sh

 

  1. Python(安装时间较长)

Ubuntu中缺省安装了Python;

执行$sudo apt-get install python-pip 安装pip(Python的一个安装和管理扩展库的工具);

下载caffe,解压,再进入python文件夹下,执行$ for req in $(requirements.txt); do pip install $req; done 操作,安装caffe中对Python的依赖项;``

 

/*****************************/

//安装caffe

/****************************/

download

关键在于正确配置Makefile.config文件:

cp Makefile.config.example Makefile.config

根据情况修改配置:

CUDA_DIR;

BLAS:=open;(使用OpenBLAS)

未使用python接口则将对应的参数注释掉;

INCLUDE_DIRS和LIBRARY_DIRS下需要加入caffe所需要的所有头文件和库目录的文件夹地址;

 

配置完成后,执行命令:(这部分操作中使用的是cmake)

$make all - 编译生成caffe的库文件_caffe.so

 

本文由新葡萄京娱乐场8522发布于计算机编程,转载请注明出处:caffe学习笔记,导出的python接口参数有自定义类型

TAG标签:
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。