1. 程式人生 > >ubuntu16.04下安裝opencv3.1+anaconda2+caffe

ubuntu16.04下安裝opencv3.1+anaconda2+caffe

轉自:https://blog.csdn.net/u013277656/article/details/72627602

準備步驟:安裝ssh遠端登入,以方便兩臺電腦通過FileZilla傳輸檔案。我的所有資料都存在windows的電腦上(不是雙系統),沒有該需要的可忽略此步驟。
ubuntu系統中預設沒有安裝ssh程式,可通過以下命令安裝:

sudo apt-get install openssh-client
sudo apt-get install openssh-server

  
  • 1
  • 2

ssh的埠號一般為22.在windows上開啟FileZilla,設定如圖:
這裡寫圖片描述


連線成功,即可直接傳輸檔案。
一、安裝caffe配置依賴項

sudo apt-get install libprotobuf-dev protobuf-compiler libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev  
    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
  • 1
  • 2
  • 3
  • 4

配置一些基本的環境變數

vim ~/.bashrc   在最後加入:
export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH

  
  • 1
  • 2

二. 安裝NVIDIA驅動
可直接按照NVIDIA官網上的安裝方法安裝,由於我安裝的時候,總是失敗,本文記錄的方法是唯一成功的方法。
搜尋計算機->附件驅動
這裡寫圖片描述
更改後重啟後即可驗證:nvidia-smi,出現下圖資訊即為成功
這裡寫圖片描述
如果出現了你的GPU列表,則說明驅動安裝成功了。另外也可以通過

nvidia-settings

  
  • 1

檢視自己機器上詳細的GPU資訊,本人機器的資訊如下:
這裡寫圖片描述
三. 安裝CUDA
CUDA是NVIDIA的程式語言平臺,想使用GPU就必須要使用cuda。
(1)下載CUDA
首先在官網上(https://developer.nvidia.com/cuda-downloads)下載CUDA:
(2)安裝CUDA
下載完成後執行以下命令:

sudo sh cuda_8.0.27_linux.run

  
  • 1

注意:執行後會有一系列提示讓你確認,但是注意,有個讓你選擇是否安裝nvidia361驅動時,一定要選擇否,因為前面我們已經安裝了更加新的nvidia367,所以這裡不要選擇安裝。其餘的都直接預設或者選擇是即可(選擇是會出錯)
這裡寫圖片描述
(3)環境變數配置
開啟~/.bashrc檔案:

sudo vim ~/.bashrc

  
  • 1

將以下內容寫入到~/.bashrc尾部:

export PATH=/usr/local/cuda-8.0/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

  
  • 1
  • 2

這一步可使環境變數生效,也可在下一步配置玩cudnn之後再生效
(生效方法:切換到root使用者下,source ~/.bashrc,ctrl+D退出root使用者,輸入sudo updatedb)
四、 配置cudnn
cuDNN是GPU加速計算深層神經網路的庫。
首先去官網(https://developer.nvidia.com/rdp/cudnn-download)下載cuDNN,可能需要註冊一個賬號才能下載。我選擇的下載版本號如下圖:
這裡寫圖片描述
下載cuDNN5.1之後進行解壓,cd進入cuDNN5.1解壓之後的include目錄,在命令列進行如下操作:

sudo cp cudnn.h /usr/local/cuda/include/    #複製標頭檔案

  
  • 1

再將cd進入lib64目錄下的動態檔案進行復制和連結:

sudo cp lib* /usr/local/cuda/lib64/    #複製動態連結庫
cd /usr/local/cuda/lib64/
sudo rm -rf libcudnn.so libcudnn.so.5    #刪除原有動態檔案
sudo ln -s libcudnn.so.5.0.5 libcudnn.so.5  #生成軟銜接
sudo ln -s libcudnn.so.5 libcudnn.so      #生成軟連結

  
  • 1
  • 2
  • 3
  • 4
  • 5

上一步配置之後,可不用再重新配置,也可兩部分都配置
然後設定環境變數和動態連結庫,在命令列輸入:

sudo gedit /etc/profile

  
  • 1

在開啟的檔案末尾加入:

export PATH = /usr/local/cuda/bin:$PATH

  
  • 1

儲存之後,建立連結檔案:

sudo vim /etc/ld.so.conf.d/cuda.conf

  
  • 1

按下鍵盤i進行編輯,輸入連結庫位置:

/usr/local/cuda/lib64

  
  • 1

然後按esc,輸入:wq儲存退出。並在終端輸入:

sudo ldconfig

  
  • 1

使連結立即生效

測試cuda的samples

cd /usr/local/cuda-8.0/samples/1_Utilities/deviceQuery
sudo make
./deviceQuery

  
  • 1
  • 2
  • 3

如果看到一些GPU的資訊說明安裝成功,如下圖:
這裡寫圖片描述

五、 編譯opencv3.1
A.首先安裝opencv依賴項

sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-dev libx264-dev
sudo apt-get install libgtk2.0-dev libtbb-dev

  
  • 1
  • 2

B.編譯opencv

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_PYTHON_SUPPORT=ON -D INSTALL_PYTHON_EXAMPLES=ON -D WITH_TIFF=ON -D BUILD_TIFF=OFF -D OPENCV_EXTRA_MODULES_PATH=/home/july/software/opencv_contrib-3.2.0/modules ..

  
  • 1

C. 安裝

sudo make install –j4

  
  • 1

編譯安裝完成後,將編譯好的python裡的庫cv2.so copy至anaconda2/lib/python2.7/site-packages內即可在python中使用,如下圖:
這裡寫圖片描述
此步出現的問題:
1./home/july/software/opencv-3.2.0/build/opencv_lapack.h:2:45:fatalerror:LAPACKE_H_PATH-NOTFOUND/lapacke.h: 沒有那個檔案或目錄
**解決方法:**sudo apt-get install liblapacke-dev checkinstall

六、安裝Anaconda2
從官網下載所需的linux版本的可執行檔案,執行如下命令:

bash Anaconda2-4.2.0-Linux-x86_64.sh

  
  • 1

後面就根據提示執行就可以了,最後一步新增環境變數的部分選擇是,它會自動新增到使用者環境變數檔案~/.bashrc檔案中,不要手動新增到/etc/profile這個系統環境變數中,因為anaconda有幾個連結庫和系統連結庫檔案類似,如果新增到/etc/profile檔案中,有可能會造成衝突,導致意外錯誤。安裝完成後,為了防止編譯caffe時檔案衝突造成的一些錯誤,需替換掉anaconda包內的ibstdc++,libgomp這幾個4.x版本的gcc編譯動態庫軟連線:

rm -rf /home/your_path/anaconda2/lib/libstdc++.so
rm -rf /home/your_path/anaconda2/pkgs/libgcc-4.8.5-2/lib/libstdc++.so
rm -rf /home/your_path/anaconda2/lib/libstdc++.so.6
rm -rf /home/your_path/anaconda2/pkgs/libgcc-4.8.5-2/lib/libstdc++.so.6
ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.21 /home/your_path/anaconda2/lib/libstdc++.so.6
ln -s /home/your_path/anaconda2/lib/libstdc++.so.6 /home/your_path/anaconda2/lib/libstdc++.so
ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.21 /home/your_path/anaconda2/pkgs/libgcc-4.8.5-2/lib/libstdc++.so.6
ln -s /home/your_path/anaconda2/pkgs/libgcc-4.8.5-2/lib/libstdc++.so.6 /home/your_path/anaconda2/pkgs/libgcc-4.8.5-2/lib/libstdc++.so
rm -rf /home/your_path/anaconda2/lib/libgomp.so
rm -rf /home/your_path/anaconda2/pkgs/libgcc-4.8.5-2/lib/libgomp.so
rm -rf /home/your_path/anaconda2/lib/libgomp.so.1
rm -rf /home/your_path/anaconda2/pkgs/libgcc-4.8.5-2/lib/libgomp.so.1
ln -s /usr/lib/x86_64-linux-gnu/libgomp.so.1.0.0 /home/your_path/anaconda2/lib/libgomp.so.1
ln -s /home/your_path/anaconda2/lib/libgomp.so.1 /home/your_path/anaconda2/lib/libgomp.so
ln -s /usr/lib/x86_64-linux-gnu/libgomp.so.1.0.0 /home/your_path/anaconda2/pkgs/libgcc-4.8.5-2/lib/libgomp.so.1
ln -s /home/your_path/anaconda2/pkgs/libgcc-4.8.5-2/lib/libgomp.so.1 /home/your_path/anaconda2/pkgs/libgcc-4.8.5-2/lib/libgomp.so

  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

注意:在第一步時安裝了libprotobuf-dev protobuf-compiler,到此步驟為止,conda list列表內不能有任何關於protobuf的檔案,不然編譯caffe時會因檔案衝突而報錯(一次性的解決方法在最後會給出)。

七:安裝編譯caffe
(1)從github上獲取caffe:

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

  
  • 1

(2)進入caffe目錄,並複製出所需的Makefile.config檔案

sudo cp Makefile.config.example Makefile.config

  
  • 1

(3)修改Makefile.config檔案

vim Makefile.config

  
  • 1

需要修改的地方

#USE_CUDNN := 1 修改成: USE_CUDNN := 1
#OPENCV_VERSION := 3 修改為: OPENCV_VERSION := 3

  
  • 1
  • 2

註釋掉原來的PYTHON_INCLUDE,使用ANACONDA的配置

    ANACONDA_HOME := $(HOME)/anaconda
    修改為:
    ANACONDA_HOME := $(HOME)/anaconda2

# PYTHON_INCLUDE := /usr/include/python2.7 \
# /usr/lib/python2.7/dist-packages/numpy/core/include
# Anaconda Python distribution is quite popular. Include path:
# Verify anaconda location, sometimes it's in root.
ANACONDA_HOME := $(HOME)/anaconda2
PYTHON_INCLUDE := $(ANACONDA_HOME)/include \
$(ANACONDA_HOME)/include/python2.7 \
$(ANACONDA_HOME)/lib/python2.7/site-packages/numpy/core/include \
#PYTHON_LIB := /usr/lib
PYTHON_LIB := $(ANACONDA_HOME)/lib

#WITH_PYTHON_LAYER := 1 
修改為 
WITH_PYTHON_LAYER := 1

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

  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

(4)然後修改makefile檔案
415行

NVCCFLAGS +=-ccbin=$(CXX) -Xcompiler-fPIC $(COMMON_FLAGS) 
替換為:
NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)

  
  • 1
  • 2
  • 3

然後再大概181行的地方做修改

LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_hl hdf5 
替換為
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_hl hdf5 opencv_core opencv_imgproc opencv_imgcodecs opencv_highgui

  
  • 1
  • 2
  • 3

(5)編輯/usr/local/cuda/include/host_config.h (119行)

#error-- unsupported GNU version! gcc versions later than 5 are not supported!
改為
//#error-- unsupported GNU version! gcc versions later than 5 are not supported!

  
  • 1
  • 2
  • 3

更改完檔案,儲存。
(6)編譯caffe

mkdir build
cd build
cmake ..
make all –j4

  
  • 1
  • 2
  • 3
  • 4

編譯過程中會可能會出現的錯誤:
a、usr/local/lib/libopencv_imgcodecs.so.3.2.0對‘[email protected]_4.0’未定義的引用
解決方法:編譯opencv的時候,需要加上-D WITH_TIFF=ON -D BUILD_TIFF=OFF 參考連結:http://www.cnblogs.com/taopanpan/p/4263951.html 還需要刪除anaconda/lib/下面的libtiff*
b、/usr/lib/x86_64-linux-gnu/libx264.so.142:對‘[email protected]_2.15’未定義的引用
解決方法:如果你裝了anaconda包的話,刪除anaconda/lib/下面的 libm* 命令:sudo rm -rf libm*
(7)編譯caffe的python介面

sudo make pycaffe

  
  • 1

編譯完成後,新增路徑到環境變數

sudo gedit ~/.bashrc

  
  • 1

新增上caffe的路徑:

export PYTHONPATH=/home/july/software/caffe/python:$ PYTHONPATH

  
  • 1

儲存後在root使用者下執行source ~/.bashrc,按ctrl+D切換出root使用者,執行sudo updated 使更改的環境變數生效
(8)測試能否正常使用
這裡寫圖片描述
根據本文安裝方式,一定會出現此種錯誤,因為anaconda環境裡沒有任何關於protobuf的內容,解決方法:
這裡寫圖片描述
再次進行測試:
這裡寫圖片描述
到此為止,caffe安裝成功,可在anaconda的python包中正常使用。

八、測試mnist資料集
在終端上執行:

cd  ~/caffe/
./data/mnist/get_mnist.sh
./examples/mnist/create_mnist.sh

  
  • 1
  • 2
  • 3

可以檢視下載的資料:
這裡寫圖片描述
繼續執行:

./examples/mnist/train_lenet.sh

  
  • 1

這裡寫圖片描述

關於protobuf的問題:
如果在編譯caffe之前,安裝了libprotobuf-dev protobuf-compiler,在anaconda中也安裝了protobuf,會因衝突出現錯誤:

../lib/libcaffe.so: undefined reference to ‘google::protobuf::io::CodedOutputStream::WriteStringWithSizeToArray(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned char*)

  
  • 1

可用本文中規避的方法安裝,但測試後anaconda中安裝了protobuf,如果再因需要編譯caffe的話,可能會因為忽略這個問題而在此踩坑。嫌麻煩的可採用一次性解決方法,安裝anaconda2後,將之前安裝的libprotobuf-dev protobuf-compiler解除安裝,直接下載protobuf包,自己重新編譯(方法百度可得),排除衝突即可。

關於import cv2報錯的問題
裝了anaconda和OpenCV,但import cv2報錯:no module named cv2
要把opencv編譯出來的cv2.so拷貝到anaconda的lib目錄下 ,然後就好了
但這時在其他路徑執行時還是報錯 no module cv2 :需要在bashrc裡面新增anaconda的路徑

寫在最後的話:本文的步驟是一步一步經過操作實現過的,需要參考的童鞋,要根據自己的實際情況進行配置,切勿完全照搬,可留言或加群交流:521370281