天天看點

Ubuntu16.04下Caffe安裝(CPU)

注:文章最後,會列出之前安裝的錯誤!!全是坑,這些錯誤,都是因為安裝時依賴缺少,試着去調試,結果導緻依賴版本不對,無從入手,隻能重裝系統,血的教訓!!

不要對系統做更新,更新就無法打開了,要想打開,又得費半天勁,慘!

安裝教程-開始

第一步:檢查自己電腦是否具有GPU

lspci | grep -i nvidia
           

第二步:依次安裝依賴包

sudo apt-get install libprotobuf-dev 
sudo apt-get install libleveldb-dev
sudo apt-get install libsnappy-dev 
sudo apt-get install libopencv-dev
sudo apt-get install libhdf5-serial-dev
sudo apt-get install protobuf-compiler
sudo apt-get install libgflags-dev
sudo apt-get install libgoogle-glog-dev
sudo apt-get install liblmdb-dev
sudo apt-get install libatlas-base-dev
sudo apt-get install --no-install-recommends libboost-all-dev
           

第三步:下載下傳caffe

1.可直接使用Git下載下傳caffe,如果沒有Git,請先安裝Git,作者新裝的Ubuntu16.04沒有Git,是以先安裝Git,執行如下語句:

2.安裝結束後下載下傳caffe,執行以下指令:

git clone git://github.com/BVLC/caffe.git
           

第四步:編譯caffe

1.進入caffe目錄

cd caffe/
           

2.生成Makefile.config檔案,這裡是将caffe目錄下自帶的Makefile.config.example檔案複制一份并更名為Makefile.config,指令如下:

cp Makefile.config.example Makefile.config
           

這步如果出現錯誤:

./include/caffe/common.hpp:4:32: fatal error: boost/shared_ptr.hpp: 沒有那個檔案或目錄
           

解決方案:出現該錯誤的原因是少了依賴:

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

3.修改Makefile.config檔案中的配置

1)編輯Makefile.config檔案

sudo gedit Makefile.config
           

2)去掉CPU_ONLY前面的#号

3)配置引用檔案路徑(主要是HDF5的路徑問題)

/usr/include/hdf5/serial

/usr/lib/x86_64-linux-gnu/hdf5/serial

具體如下:

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/hdf5/serial
           

4)執行編譯

一共三個指令:

sudo make all
sudo make test
sudo make runtest
           

注:網上有其他版本,用的指令是 sudo make, 或者是sudo make all -j8 ,執行結果是不一樣的!!!

第一個指令:

sudo make all
           

若報錯:

.build_release/lib/libcaffe.so: undefined reference to cv::imread(cv::String const&, int)’
           

1.Makefile.config中pkg-config --modversion opencv取消注釋(親測可用)

2.Makefile.config中OPENCV_VERSION := 3取消注釋

3.Makefile.config中找到LIBRARIES(在PYTHON_LIBRARIES := boost_python python2.7 前一行)并修改為:

LIBRARIES += glog gflags protobuf leveldb snappy \
             lmdb boost_system hdf5_hl hdf5 m \ 
             opencv_core opencv_highgui opencv_imgproc opencv_imgcodecs

           

第二個指令:

這裡又出現了上面的問題:

1)在 Makefile檔案的195 行 LIBRARIES += opencv_core opencv_highgui opencv_imgproc 後面添加:

opencv_imgcodecs opencv_videoio

即:

LIBRARIES += opencv_core opencv_highgui opencv_imgproc opencv_imgcodecs opencv_videoio
           

2)修改完成後,每次 make 前需要:make clean,再執行 make all 等指令

第三個指令:

sudo make runtest
           

第五步:編譯python接口

1)安裝pip

sudo apt-get install python-pip
           

2)安裝Python接口依賴庫

sudo apt-get install gfortran
           
cd ~/caffe/python
           

3)驗證

sudo pip install -r requirements.txt
           

可以看到,安裝成功的,都會顯示Requirement already satisfied,沒安裝成功的,會繼續進行安裝。

4)将caffe根目錄下的python檔案夾加入到環境變量

1.先打開配置檔案bashrc

sudo gedit ~/.bashrc
           

2.在檔案的最後面添加

依據自己路徑添加,使用指令檢視路徑pwd
           

然後執行更新配置(有時更新不起作用時,可以重新開機電腦就會有效):

sudo ldconfig
           

5)驗證python接口

進行python環境,引入caffe包,如果沒有報錯則安裝成功!

import caffe之後沒有報錯,安裝完成。

安裝教程-結束

錯誤過程-開始

問題1:

.build_release/src/caffe/proto$ more caffe.pb.o.warnings.txt 
In file included from .build_release/src/caffe/proto/caffe.pb.cc:4:0:
.build_release/src/caffe/proto/caffe.pb.h:10:40: fatal error: google/protobuf/po
rt_def.inc: 沒有那個檔案或目錄
           

說是沒有:protobuf ,且隻能安裝 2.6.1的

檢視protobuf 版本指令:

protoc --version
           

連接配接:https://github.com/BVLC/caffe/issues/5078

問題2:

CXX src/caffe/layers/argmax_layer.cpp
CXX src/caffe/layers/base_conv_layer.cpp
CXX src/caffe/layers/hdf5_output_layer.cpp
src/caffe/layers/hdf5_output_layer.cpp:4:18: fatal error: hdf5.h: 沒有那個檔案或目錄
compilation terminated.
Makefile:591: recipe for target '.build_release/src/caffe/layers/hdf5_output_layer.o' failed
make: *** [.build_release/src/caffe/layers/hdf5_output_layer.o] Error 1

           

執行以下指令:

sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler
sudo apt-get install --no-install-recommends libboost-all-dev
sudo apt-get install libopenblas-dev liblapack-dev libatlas-base-dev
sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev
           

問題3:

CXX/LD -o .build_release/tools/upgrade_solver_proto_text.bin
.build_release/lib/libcaffe.so:對‘cv::imread(cv::String const&, int)’未定義的引用
.build_release/lib/libcaffe.so:對‘cv::imencode(cv::String const&, cv::_InputArray const&, std::vector<unsigned char, std::allocator<unsigned char> >&, std::vector<int, std::allocator<int> > const&)’未定義的引用
.build_release/lib/libcaffe.so:對‘cv::imdecode(cv::_InputArray const&, int)’未定義的引用
collect2: error: ld returned 1 exit status
Makefile:635: recipe for target '.build_release/tools/upgrade_solver_proto_text.bin' failed
           

這個問題在上面安裝有解決!

問題4:

CXX/LD -o .build_release/test/test_all.testbin src/caffe/test/test_caffe_main.cpp
src/caffe/test/test_caffe_main.cpp:1:27: fatal error: caffe/caffe.hpp: 沒有那個檔案或目錄
compilation terminated.
Makefile:615: recipe for target '.build_release/test/test_all.testbin' failed
make: *** [.build_release/test/test_all.testbin] Error 1
           

上面安裝過程有解決!

注:網上還有一個版本的配置:

Makefile.config新增

LIBRARIES += glog gflags protobuf leveldb snappy \ lmdb boost_system hdf5_hl hdf5 m \ opencv_core opencv_highgui opencv_imgproc opencv_imgcodecs
           

另外說法是boost的版本問題:

https://ask.csdn.net/questions/684608

不過都無效,苦啊!!!!

問題5:

LD -o .build_release/lib/libcaffe.so.1.0.0
/usr/bin/ld: 找不到 -l -llmdb
/usr/bin/ld: 找不到 -l -lopencv_core
collect2: error: ld returned 1 exit status
Makefile:585: recipe for target '.build_release/lib/libcaffe.so.1.0.0' failed
make: *** [.build_release/lib/libcaffe.so.1.0.0] Error 1
           

問題6:

CXX/LD -o .build_release/tools/convert_imageset.bin
/usr/bin/ld: 找不到 -l -llmdb
/usr/bin/ld: 找不到 -l -lopencv_core
collect2: error: ld returned 1 exit status
Makefile:638: recipe for target '.build_release/tools/convert_imageset.bin' failed
make: *** [.build_release/tools/convert_imageset.bin] Error 1
           

問題7:

CXX src/caffe/data_transformer.cpp
AR -o .build_release/lib/libcaffe.a
LD -o .build_release/lib/libcaffe.so.1.0.0
/usr/bin/ld: 找不到 -l -llmdb
/usr/bin/ld: 找不到 -l -lopencv_core
collect2: error: ld returned 1 exit status
Makefile:586: recipe for target '.build_release/lib/libcaffe.so.1.0.0' failed
make: *** [.build_release/lib/libcaffe.so.1.0.0] Error 1
           

錯誤過程-結束

可能由于主伺服器的配置不一樣,導緻下載下傳的依賴的不同,具體問題具體分析了隻能。

完!!

繼續閱讀