caffe配置過程很長啊,坑非常多,沒有linux基礎的估計會香菇的。我參考了網上很多的帖子,基本上每個帖子都有或多或少的問題,研究很久最終配置成功。參考過的帖子太多,都記不太清來源了。為了對前人的感謝,特地寫下我的配置過程,以供大家參考。可能我寫的時候會有遺漏,還望多多包涵,共同探討!
1. 安裝相關依賴項
1 sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler 2 sudo apt-get install --no-install-recommends libboost-all-dev 3 sudo apt-get install libopenblas-dev liblapack-dev libatlas-base-dev 4 sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev
2.安裝NVIDIA驅動
(1) 查詢NVIDIA驅動
首先去官網 http://www.nvidia.com/Download/index.aspx?lang=en-us 查看適合自己顯卡的驅動(這里不要下載,用下載的驅動安裝可能會出現循環登陸問題)
點擊右邊的search進入下載頁面
可以看到我的顯卡支持375
(2)安裝驅動
在終端下輸入:
sudo apt-get purge nvidia-* //這是卸載以前的nvidia驅動 sudo add-apt-repository pa:graphics-drivers/ppa sudo apt-get update sudo apt-get install nvidia-375 reboot //重啟
完成后,電腦重啟。
安裝完成之后輸入以下指令進行驗證:
sudo nvidia-smi
若列出了GPU的信息列表則表示驅動安裝成功。如下圖:
3.安裝CUDA
(1)下載CUDA
首先在官網上(https://developer.nvidia.com/cuda-downloads)下載CUDA:
(2)下載完成后執行以下命令(我用的是cuda7.5):
1 sudo chmod 777 cuda_7.5.44_linux.run 2 sudo ./cuda_7.5.44_linux.run
注意:執行后會有一系列提示讓你確認,但是注意,有個讓你選擇是否安裝nvidia367驅動時,一定要選擇否:
Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 367.48?
因為前面我們已經安裝了更加新的nvidia367,所以這里不要選擇安裝。其余的都直接默認或者選擇是即可。
(3)環境變量配置
打開~/.bashrc文件:
sudo gedit ~/.bashrc
將以下內容寫入到~/.bashrc尾部:
export PATH=/usr/local/cuda-7.5/bin${PATH:+:${PATH}} export LD_LIBRARY_PATH=/usr/local/cuda-7.5/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
在/etc/profile文件中添加CUDA環境變量:
sudo gedit /etc/profile
打開文檔都在文檔結尾加上下面兩句:
1 PATH=/usr/local/cuda/bin:$PATH 2 export PATH
保存后, 執行下列命令, 使環境變量立即生效:
source /etc/profile
同時添加lib庫路徑,在 /etc/ld.so.conf.d/新建文件 cuda.conf
sudo gedit /etc/ld.so.conf.d/cuda.conf
在文中加入下面內容:
/usr/local/cuda/lib64
執行下列命令使之立刻生效:
sudo ldconfig
(4)測試CUDA的samples
1 cd /usr/local/cuda-7.5/samples/1_Utilities/deviceQuery 2 make 3 sudo ./deviceQuery
如果顯示一些關於GPU的信息,則說明安裝成功。
nvcc –V 命令可查看版本
4.配置cuDNN(感覺我的有問題,我暫時沒用這個,另外這個單獨寫了個教程)
cuDNN是GPU加速計算深層神經網絡的庫。
首先去官網 https://developer.nvidia.com/rdp/cudnn-download 下載cuDNN,需要注冊一個賬號才能下載。
我直接在網上下的cuda7.5的cudnn-7.5-linux-x64-v5.0.tgz
進行解壓:
sudo tar -zxvf ./cudnn-7.5-linux-x64-v5.0.tgz
進入cuDNN5.0解壓之后的include目錄,在命令行進行如下操作:
1 cd cuda/include 2 sudo cp cudnn.h /usr/local/cuda/include #復制頭文件
再將進入lib64目錄下的動態文件進行復制和鏈接:
1 cd .. 2 cd lib64 3 sudo cp lib* /usr/local/cuda/lib64/ #復制動態鏈接庫 4 cd /usr/local/cuda/lib64/ 5 sudo chmod +r libcudnn.so.5.0.5 6 sudo ln -sf libcudnn.so.5.0.5 libcudnn.so.5 7 sudo ln -sf libcudnn.so.5 libcudnn.so 8 sudo ldconfig
5.安裝opencv3.1
從官網(http://opencv.org/downloads.html)下載Linux版Opencv
並將其解壓到你要安裝的位置,假設解壓到了/home/opencv
1 unzip opencv-3.1.0.zip 2 sudo cp ./opencv-3.1.0 /home 3 sudo mv opencv-3.1.0 opencv
安裝前准備,創建編譯文件夾:
1 cd ~/opencv 2 mkdir build 3 cd build
配置:
1 sudo apt install cmake 2 sudo cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
編譯:
sudo make -j8
-j8表示並行計算,根據自己電腦的配置進行設置,配置比較低的電腦可以將數字改小或不使用,直接輸make。
以上只是將opencv編譯成功,還沒將opencv安裝,需要運行下面指令進行安裝:
sudo make install
測試opencv:
1 mkdir ~/opencv-test 2 cd ~/opencv-test 3 gedit DisplayImage.cpp
編輯如下代碼:
1 #include <stdio.h> 2 #include <opencv2/opencv.hpp> 3 using namespace cv; 4 int main(int argc, char** argv ) 5 { 6 if ( argc != 2 ) 7 { 8 printf("usage: DisplayImage.out <Image_Path>\n"); 9 return -1; 10 } 11 Mat image; 12 image = imread( argv[1], 1 ); 13 if ( !image.data ) 14 { 15 printf("No image data \n"); 16 return -1; 17 } 18 namedWindow("Display Image", WINDOW_AUTOSIZE ); 19 imshow("Display Image", image); 20 waitKey(0); 21 return 0; 22 }
創建CMake編譯文件:
gedit CMakeLists.txt
寫入如下內容:
cmake_minimum_required(VERSION 2.8) project( DisplayImage ) find_package( OpenCV REQUIRED ) add_executable( DisplayImage DisplayImage.cpp ) target_link_libraries( DisplayImage ${OpenCV_LIBS} )
編譯:
1 cd ~/opencv-test 2 cmake . 3 make
執行:
此時opencv-test文件夾中已經產生了可執行文件DisplayImage,隨便從網上下載一張圖片放在opencv-test文件夾下,此處下載了opencv.jpg,然后運行:
./DisplayImage opencv.jpg
結果是顯示我下載的這張圖像。
如果想用python調用opencv,安裝python-opencv:
1 sudo apt-get install python-opencv 2 sudo apt-get install python-numpy
打開python,import即可。
Ps:如果用cuda8.0,可能會出現以下錯誤:
這是因為opecv3.0與cuda8.0不兼容導致的。解決辦法:修改 ~/opencv/modules/cudalegacy/src/graphcuts.cpp文件內容,如圖:
其中
#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER)||(CUDART_VERSION>=8000)
是我們修改的。
6.配置caffe
(1)https://github.com/BVLC/caffe下載caffe
下載完成后,會在家目錄下的下載里找到caffe-master.zip,用unzip命令解壓到家目錄下,然后重命名為caffe.
(2)復制Makefileconfig
sudo cp Makefile.config.example Makefile.config
(3)打開並修改配置文件:
sudo gedit Makefile.config #打開Makefile.config文件
根據個人情況修改文件:
a.若使用cudnn,則
將
#USE_CUDNN := 1
修改成:
USE_CUDNN := 1
b.若使用的opencv版本是3的,則
#OPENCV_VERSION := 3
修改為:
OPENCV_VERSION := 3
c.若要使用python來編寫layer,則
#WITH_PYTHON_LAYER := 1
修改為
WITH_PYTHON_LAYER := 1
d.重要的一項 :
將# Whatever else you find you need goes here. 下面的
1 INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include 2 LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib
修改為:
1 INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial 2 LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/hdf5/serial
(4)修改makefile文件
打開makefile文件,做如下修改:(這個不知道有沒有用,這一步感覺沒作用)
將:
NVCCFLAGS +=-ccbin=$(CXX) -Xcompiler-fPIC $(COMMON_FLAGS)
替換為:
NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
接下來是針對安裝opencv3.0.0版本的同學而言的,對於3.0.0之前的版本不需要修改:
在位置((LIBRARIES+= glog gflags protobuf leveldb snappy lmdbboost_system hdf5_hl hdf5 m
opencv_coreopencv_highgui opencv_imgproc opencv_imgcodecs))處添加opencv_imgcodecs
這一步非常重要,否則編譯后會出現錯誤如下:
CXX/LD-o.build_release/tools/convert_imageset.bin .build_release/lib/libcaffe.so:undefined reference tocv::imread(cv::String const&,int)'.build_release/lib/libcaffe.so: undefined referencetocv::imencode(cv::String const&, cv::_InputArray const&,std::vector >&, std::vector > const&)'
原因就是opencv3.0.0把imread相關函數放到imgcodecs.lib中了,而非原來的imgproc.lib。
(If you input "make all",the problem is the same again.But if you delete all the file in build(rm -rf ./build/*) before "make all"(I use make clean ),you will success.I just success)
(5)編輯/usr/local/cuda/include/host_config.h(不知道有沒有用,這一步我看到有帖子改了,但大多數沒改這個)
將其中的第115行注釋掉:
#error-- unsupported GNU version! gcc versions later than 4.9 are not supported!
改為
//#error-- unsupported GNU version! gcc versions later than 4.9 are not supported!
(6)編譯
make all –j8 make test –j8 make runtest –j8
7.編譯pycaffe
在caffe根目錄的python文件夾下,有一個requirements.txt的清單文件,上面列出了需要的依賴庫,按照這個清單安裝就可以了。
在安裝scipy庫的時候,需要fortran編譯器(gfortran),如果沒有這個編譯器就會報錯,因此,我們可以先安裝一下。
首先回到caffe的根目錄,然后執行安裝代碼:
1 cd ~/caffe 2 sudo apt-get install gfortran 3 cd ./python 4 for req in $(cat requirements.txt); do pip install $req; done
安裝完成以后,再次回到caffe根目錄我們可以執行:
1 cd .. 2 sudo pip install -r python/requirements.txt
就會看到,安裝成功的,都會顯示Requirement already satisfied, 沒有安裝成功的,會繼續安裝。
編譯python接口:
make pycaffe -j8
配置環境變量,以便python調用:
sudo gedit ~/.bashrc
將export PYTHONPATH=/home/caffe/python:$PYTHONPATH
添加到文件中
source ~/.bashrc