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
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 第三方庫安裝編譯
- 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
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
注意事項5: 調用caffe/python/draw_net.py可視化決策樹時,若出現下面的提示:
pydotplus.graphviz.InvocationException: GraphViz’s executables not found
此時需要安裝graphviz,在Linux下安裝方式可參考命令:
apt-get install graphviz