Deep|Caffe——环境安装和配置(CPU)

1、介绍 Caffe,全称Convolutional Architecture for Fast Feature Embedding,是一个兼具表达性、速度和思维模块化的深度学习框架。由伯克利人工智能研究小组和伯克利视觉和学习中心开发。虽然其内核是用C++编写的,但Caffe有Python和Matlab相关接口。Caffe支持多种类型的深度学习架构,面向图像分类和图像分割,还支持CNN、RCNN、LSTM和全连接神经网络设计。Caffe支持基于GPU和CPU的加速计算内核库,可以在CPU和GPU直接无缝切换,如NVIDIA cuDNN和Intel MKL。项目托管地址:https://github.com/BVLC/caffe.git
2、系统环境

  1. Ubuntu-18.04-LTS
  2. GCC-7.4.0
3、编译依赖环境 (1)protobuffer(必须)
Google开发的结构化数据存储格式,caffe中使用protobuffer作为权值和模型参数的载体,负责将文件读取到内存。
(2)opencv (必须)
caffe中使用opencv完成一些图像的存取和预处理功能,使用OpenCV源码编译安装。
(3)boost (必须)
扩展的C++标准库,其中的智能指针是其特色。
(4)lmdb (必须)
内存映射行数据库管理器。
(5)leveldb (必须)和 snappy (必须)
压缩和解压缩的C++库,比zlib库快。
4、安装依赖 4.1 基本依赖(依据下面的命令将基本依赖库安装)
sudo apt-get install libsnappy-dev libhdf5-serial-dev libopenblas-dev liblapack-dev libatlas-base-dev libgflags-dev libgoogle-glog-dev liblmdb-dev libleveldb-dev (hdf5 lmdb leveldb snappy库) sudo apt-get install --no-install-recommends libboost-all-dev (安装boost库) sudo apt-get install autoconf automake libtool curl make g++ unzip (辅助工具,可能会用到,可不安装)

4.2 第三方库安装编译
  1. protobuf编译安装
    (1)克隆源码:git clone https://github.com/protocolbuffers/protobuf.git
    (2)下载依赖的第三方库:
git init git submodule update --init -recursive cd [protobuf\_dir] ./autogen.sh ./configure --prefix=/opt/protobuf (指定安装目录) make -j8 make check sudo make install (protobuf安装完成)

  1. opencv编译安装
    (1)下载源码:https://opencv.org/releases/
    (2)安装opencv依赖项和安装步骤
依赖项: apt-get install bison flex m4 build-essential libmpc-dev gcc gcc-multilib (gcc相关依赖和工具) apt-get install libgtk2.0-dev libgtk-3-dev libavcodec-dev libavformat-dev libswscale-dev libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libdc1394-22-dev (opencv依赖库) apt-get install cmake git pkg-config安装步骤: cd [opencv\_dir] (切换到opencv源码顶层目录) mkdir build (创建build目录,opencv的编译是由cmake工具执行的) cd build cmake .. -DCMAKE\_BUILD\_TYPE=Release-DCMAKE\_INSTALL\_PREFIX=/opt/opencv(指定编译版本为release版本,编译好的opencv库安装在/opt/opencv目录下)执行完上述命令后,cmake工具会执行依赖项检查并同时联网下载 ippicv\_2017u3\_lnx\_intel64\_general\_20170822.tgz文件 make -j8 (待上述文件下载完成之后) sudo make install (opencv安装完成)

5、caffe配置文件修改 5.1指定protoc版本
  1. 配置protoc工具搜寻路径(protoc是.proto文件的编译器,用于编译caffe中定义的protobuf序列化协议文件)
sudo vim /etc/profile export PATH=/opt/protobuf/bin:${PATH}#protoc编译器搜寻目录 export CPLUS\_INCLUDE\_PATH=/opt/protobuf/include:$CPLUS\_INCLUDE\_PATH#添加protoc工具头文件搜索目录 export LD\_LIBRARY\_PATH=/opt/protobuf/lib:${LD\_LIBRARY\_PATH}#protoc编译器动态链接库搜索路径 source /etc/profile

  1. 若系统内有两个版本以上的protoc,修改caffe下的Makefile文件,指定使用特定版本的protoc工具编译
    1)进入目录:
    cd [caffe_dir]
    2)打开caffe的Makefile文件
    sudo vim Makefile
    3)大约在Makefile的第649行,修改下面这两句,改完后保存退出
$(Q)protoc --proto_path=$(PROTO_SRC_DIR) --cpp_out=$(PROTO_BUILD_DIR) $< 和 $(Q)protoc --proto_path=src --python_out=python $<改为(==>): $(Q)/opt/protobuf/bin/protoc --proto_path=$(PROTO_SRC_DIR) --cpp_out=$(PROTO_BUILD_DIR) $< 和 $(Q)/opt/protobuf/bin/protoc --proto_path=src --python_out=python $<

5.2 在Makefile.config配置文件中修改下列3项
  1. 使用caffe的cpu模式:#CPU_ONLY := 1 将此处注释去掉
  2. 配置opencv为3版本:#OPENCV_VERSION := 3 将此处注释去掉,否则编译时会出现链接不上该库错误
  3. 添加protobuf、opencv、hdf5这三个依赖的头文件和库搜索路径
    在Makefile.config.example中找到含有下面字眼的位置
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib添加头文件和库搜索路径: INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /opt/protobuf/include /opt/opencv/include/opencv4/usr/include/hdf5/serial #此处使用的是opencv4.2.0 LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /opt/protobuf/lib /opt/opencv/lib /usr/lib/x86_64-linux-gnu/hdf5/serial

5.3 更新caffe相关代码 因为使用OpenCV 4.*的版本,所以caffe中有些opencv的常量需要更新,在caffe框架源码的顶层目录下进行修改:
CV_LOAD_IMAGE_GRAYSCALE 为 cv::ImreadModes::IMREAD_GRAYSCALE
CV_LOAD_IMAGE_COLOR 为 cv::IMREAD_COLOR
替换命令如下:
sed -i 's/CV_LOAD_IMAGE_COLOR/cv::IMREAD_COLOR/g' src/caffe/layers/window_data_layer.cpp
sed -i 's/CV_LOAD_IMAGE_COLOR/cv::IMREAD_COLOR/g' src/caffe/util/io.cpp
sed -i 's/CV_LOAD_IMAGE_GRAYSCALE/cv::ImreadModes::IMREAD_GRAYSCALE/g' src/caffe/util/io.cpp
sed -i 's/CV_LOAD_IMAGE_COLOR/cv::IMREAD_COLOR/g' src/caffe/test/test_io.cpp
sed -i 's/CV_LOAD_IMAGE_GRAYSCALE/cv::ImreadModes::IMREAD_GRAYSCALE/g' src/caffe/test/test_io.cpp
6、执行编译过程 1)进入caffe框架源码的顶层目录执行下面命令:
cd [caffe_dir] mv Makefile.config.example Makefile.config make -j8 sudo make test make runtest -j8

2)编译结束
7、编译caffe的python接口(pycaffe) 7.1 安装编译python接口的各种依赖
  • 切换到caffe源码顶层目录,caffe下的命令执行必须在顶层目录下,否则执行会出错
cd caffe

  • 使用requirements.txt文件内指定的各种依赖库安装依赖
pip3 install -r python/requirements.txt

其中requirements.txt文件内容如下:
Cython>=0.19.2
numpy>=1.7.1
scipy>=0.13.2
scikit-image>=0.9.3
matplotlib>=1.3.1
ipython>=3.0.0
h5py>=2.2.0
leveldb>=0.191
networkx>=1.8.1
nose>=1.3.0
pandas>=0.12.0
python-dateutil>=1.4,<2
protobuf>=2.5.0
python-gflags>=2.0
pyyaml>=3.10
Pillow>=2.3.0
six>=1.1.0
特别注意:
第三方库protobuf编译后的版本要与python中protobuf的版本一致,若不一致可以在编译第三方库protobuff时,进入python目录下执行下面命令:
cd ./python python setup.py build python setup.py test python setup.py install

7.2 编译pycaffe
make pycaffe

7.3 把caffe的python接口路径添加到搜索目录
  • vim /etc/profile
    最后一行添加:
export PYTHONPATH=/caffe/python:$PYTHONPATH

  • source/etc/profile
7.4 导入pytcaffe测试
  • 进入python解释器
  • 输入:import caffe (没有错误提示则安装成功)
    eg:print(caffe.__version__)
8、注意事项 注意事项1: 若想caffe在命令行下使用,可以参考下面的两种方式:
(1)将自己编译的caffe可执行文件添加进环境变量中
(2)apt-get install caffe-tools-cpu
注意事项2: 将下面几个库在编译caffe第5步前拷贝到/usr/local/lib/下:
libopencv_core.so.4.2.0
libopencv_imgcodecs.so.4.2.0
libopencv_imgproc.so.4.2.0
然后再sudo ldconfig即可。
注意事项3: 使用caffe/tools/extra/plot_training_log.py.example进行日志可视化分析时出现ImportError: Matplotlib requires dateutil>=2.1;此时需要对python-dateutil进行升级,升级方式可以参考如下:
pip3 install --upgrade python-dateutil

注意事项4: 调用caffe/python/caffe/draw.py时,若出现pydotplus不存在等现象时;需要根据提示进行安装,参考命令如下:
pip3 install pydotplus

【Deep|Caffe——环境安装和配置(CPU)】注意事项5: 调用caffe/python/draw_net.py可视化决策树时,若出现下面的提示:
pydotplus.graphviz.InvocationException: GraphViz’s executables not found
此时需要安装graphviz,在Linux下安装方式可参考命令:
apt-get install graphviz

    推荐阅读