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、系统环境
- Ubuntu-18.04-LTS
- GCC-7.4.0
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 第三方库安装编译
- 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安装完成)
- 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版本
- 配置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
- 若系统内有两个版本以上的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项
- 使用caffe的cpu模式:#CPU_ONLY := 1 将此处注释去掉
- 配置opencv为3版本:#OPENCV_VERSION := 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
- 进入python解释器
- 输入:import caffe (没有错误提示则安装成功)
eg:print(caffe.__version__)
(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
推荐阅读
- 推荐系统论文进阶|CTR预估 论文精读(十一)--Deep Interest Evolution Network(DIEN)
- Python专栏|数据分析的常规流程
- Python|Win10下 Python开发环境搭建(PyCharm + Anaconda) && 环境变量配置 && 常用工具安装配置
- Python绘制小红花
- Pytorch学习|sklearn-SVM 模型保存、交叉验证与网格搜索
- OpenCV|OpenCV-Python实战(18)——深度学习简介与入门示例
- python|8. 文件系统——文件的删除、移动、复制过程以及链接文件
- 爬虫|若想拿下爬虫大单,怎能不会逆向爬虫,价值过万的逆向爬虫教程限时分享
- 分布式|《Python3网络爬虫开发实战(第二版)》内容介绍
- java|微软认真聆听了开源 .NET 开发社区的炮轰( 通过CLI 支持 Hot Reload 功能)