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