caffe配置之opencv2.4.9和配置Makefile.config
阿新 • • 發佈:2019-01-22
7、安裝opencv2.4.9
這個地方坑也不少,用Python寫程式碼用於影象處理時,常常要和opencv結合起來,所以需要安裝opencv,我這裡用的版本是2.4.9,Python版本是2.7。
(1) 下載 opencv 原始碼。
(2) 解壓到任意目錄
unzip opencv-2.4.9.zip
(3) 進入原始碼目錄,建立release目錄(或者 build 目錄都行)
cd opencv-2.4.9
mkdir release
(4) 可以看到在OpenCV目錄下,有個CMakeLists.txt檔案,這是用於編譯opencv原始碼的,編譯之前需要需要事先安裝一些軟體
sudo apt-get install build-essential cmake libgtk2.0-dev pkg-config python-dev python-numpy libavcodec-dev libavformat-dev libswscale-dev
(5) 進入release目錄,安裝OpenCV是所有的檔案都會被放到這個release目錄下
cd release
(6) 用cmake編譯OpenCV原始碼,安裝所有的lib檔案都會被安裝到/usr/local目錄下
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..
make -j4 (-j4表示使用4個執行緒編譯,可以大大加快編譯速度)
sudo make install
這個地方,可能會遇到一些問題,如果啥事沒發生,那真是太幸運了。
a、第一個錯誤 :
CMake Error at cuda_compile_generated_matrix_operations.cu.o.cmake:206 (message):
Error generating
/home/yy/opencv-2.4.9/build/modules/core/CMakeFiles/cuda_compile.dir/__/dynamicuda/src/cuda/./cuda_compile_generated_matrix_operations.cu.o
make[2]: *** [modules/core/CMakeFiles/cuda_compile.dir/__/dynamicuda/src/cuda/./cuda_compile_generated_matrix_operations.cu.o] 錯誤 1
make[1]: *** [modules/core/CMakeFiles/opencv_core.dir/all] 錯誤 2
make: *** [all] 錯誤 2
解決辦法:
輸入:“cmake -D CMAKE_BUILD_TYPE=bulid -D CMAKE_INSTALL_PREFIX=/usr/local -D CUDA_GENERATION=Kepler ..”,即可解決!
b、第二個錯誤
因為我的電腦安裝了GPU卡,因此OpenCV會自動編譯CUDA相關的程式碼,可以直接關掉( 在cmake時加上-D WITH_CUDA=OFF ),
但我需要編譯。因此預設是開啟的,因此在make時遇到以下錯誤:a storage class is not allowed in an explicit specialization。
解決辦法:
開啟錯誤的檔案:
vim /root/opencv-2.4.9/modules/gpu/src/nvidia/core/NCVPixelOperations.hpp,
將其中template宣告中的所有static全部刪除。可以使用vim的全域性替換,或者其他編輯工具全域性替換即可(template<> static inline 替換為template<> inline ):
在命令列下輸入:%s/template<> static inline/template<> inline/g。
最後重新執行以上命令。
(7) 環境變數修改
在/etc/ld.so.conf 檔案中新增 /usr/local/lib , 然後執行:
sudo ldconfig -v
為程式指定openvc的標頭檔案位置, 使用pkg-config命令來完成。首先在 /etc/profile 中新增:
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
然後source生效:
source /etc/profile
再執行以下命令可以列印opencv的配置資訊:
pkg-config --libs opencv
(8) 把Python與opencv建立連線
編譯安裝好後的cv2.so,也就是python呼叫openc所需要的庫,放在/usr/local/lib/python2.7/site-packages
這個目錄下,我們可以將這個目錄新增到環境變數
export PYTHONPATH=$PYTHONPATH:/usr/local/lib/python2.7/site-packages
這樣便可以在python中 import cv2。
(9) 測試
在解壓的opencv目錄下找到 samples/c/build_all.sh,執行該檔案:
cd /root/opencv-2.4.8/samples/c/
chmod a+x build_all.sh
./build_all.sh
在這裡又遇到一個問題 :
/usr/bin/ld: cannot find -lcufft
/usr/bin/ld: cannot find -lnpps
/usr/bin/ld: cannot find -lnppi
/usr/bin/ld: cannot find -lnppc
/usr/bin/ld: cannot find -lcudart
去網上找了許多解決/usr/bin/ld: cannot find -lxxx問題的資料,但是都沒有解決。
不過看到一些材料中說libcufft,libnpps,libnppi,libnppc,libcudart是cuda的庫(cuda和opencv是有仇吧...),搜尋/usr/local/cuda-7.0/lib64,
果然發現了libcufft.so.7.0,libnpps.so.7.0,libnppi.so.7.0,libnppc.so.7.0,libcudarts.so.7.0,
既然報錯說是/usr/bin/ld: cannot find -lcufft,那是不是因為/usr/local/lib下面沒有libcufft.so.7.0,libnpps.so.7.0,libnppi.so.7.0,
libnppc.so.7.0,libcudarts.so.7.0的軟連線?
於是分別對上面幾個檔案建立軟連線 sudo ln -s /usr/local/cuda-7.0/lib64/libcufft.so.7.0 /usr/local/lib/libcufft.so
再次進入opencv目錄/samples/c/ 執行./build_all.sh 問題解決,不會再報錯,然後執行./find_obj 會出現無比nice的測試結果。
{
參考:
http://www.yanjiankang.cn/linux-install-opencv-on-ubuntu-or-redhat/
http://blog.csdn.net/gongxs7/article/details/49131201
http://blog.csdn.net/dyx810601/article/details/51579273
http://blog.csdn.net/llp1992/article/details/50066983
}
8、配置Makefile.config(參考:http://blog.csdn.net/autocyz/article/details/51783857)
折騰到這一步,離成功就不遠了,接下來就是配置之前擱置的Makefile.config,進入caffe根目錄,使用vim編輯器開啟Makefile.config。
在開啟的Makefile.config修改如下內容(我自己的配置):
USE_OPENCV := 1
USE_LEVELDB := 1
USE_LMDB := 1
CUSTOM_CXX := g++
CUDA_DIR := /usr/local/cuda-7.5
CUDA_ARCH := -gencode arch=compute_20,code=sm_20 \
-gencode arch=compute_20,code=sm_21 \
-gencode arch=compute_30,code=sm_30 \
-gencode arch=compute_35,code=sm_35 \
-gencode arch=compute_50,code=sm_50 \
-gencode arch=compute_50,code=compute_50
BLAS := atlas
MATLAB_DIR := /home/eric/MATLAB2014/R2014a
PYTHON_INCLUDE := /usr/include/python2.7 \
/usr/lib/python2.7/dist-packages/numpy/core/include
PYTHON_LIB := /usr/local/lib
WITH_PYTHON_LAYER := 1
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
BUILD_DIR := build
DISTRIBUTE_DIR := distribute
9、make所有檔案
進入caffe根目錄,輸入如下命令:
sudo make clean
sudo make all -j4
sudo make test -j4
sudo make runtest -j4
sudo make pycaffe -j4
sudo make matcaffe -j4
在命令列下輸入Python,會出現Python的一些資訊,然後輸入import caffe,沒有報錯說明配置成功。在命令列下輸入matlab,會開啟MATLAB軟體。
如果前面所有的配置過程都沒有問題的話,最後一步應該是不會出錯的。至此,caffe所有的配置項都完成了,接下來就可以愉快地使用這個強大的深度學習框架了。
這個地方坑也不少,用Python寫程式碼用於影象處理時,常常要和opencv結合起來,所以需要安裝opencv,我這裡用的版本是2.4.9,Python版本是2.7。
(1) 下載 opencv 原始碼。
(2) 解壓到任意目錄
unzip opencv-2.4.9.zip
(3) 進入原始碼目錄,建立release目錄(或者 build 目錄都行)
cd opencv-2.4.9
mkdir release
(4) 可以看到在OpenCV目錄下,有個CMakeLists.txt檔案,這是用於編譯opencv原始碼的,編譯之前需要需要事先安裝一些軟體
sudo apt-get install build-essential cmake libgtk2.0-dev pkg-config python-dev python-numpy libavcodec-dev libavformat-dev libswscale-dev
(5) 進入release目錄,安裝OpenCV是所有的檔案都會被放到這個release目錄下
cd release
(6) 用cmake編譯OpenCV原始碼,安裝所有的lib檔案都會被安裝到/usr/local目錄下
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..
make -j4 (-j4表示使用4個執行緒編譯,可以大大加快編譯速度)
sudo make install
這個地方,可能會遇到一些問題,如果啥事沒發生,那真是太幸運了。
a、第一個錯誤
CMake Error at cuda_compile_generated_matrix_operations.cu.o.cmake:206 (message):
Error generating
/home/yy/opencv-2.4.9/build/modules/core/CMakeFiles/cuda_compile.dir/__/dynamicuda/src/cuda/./cuda_compile_generated_matrix_operations.cu.o
make[2]: *** [modules/core/CMakeFiles/cuda_compile.dir/__/dynamicuda/src/cuda/./cuda_compile_generated_matrix_operations.cu.o] 錯誤 1
make[1]: *** [modules/core/CMakeFiles/opencv_core.dir/all] 錯誤 2
make: *** [all] 錯誤 2
解決辦法:
輸入:“cmake -D CMAKE_BUILD_TYPE=bulid -D CMAKE_INSTALL_PREFIX=/usr/local -D CUDA_GENERATION=Kepler ..”,即可解決!
b、第二個錯誤
因為我的電腦安裝了GPU卡,因此OpenCV會自動編譯CUDA相關的程式碼,可以直接關掉( 在cmake時加上-D WITH_CUDA=OFF ),
但我需要編譯。因此預設是開啟的,因此在make時遇到以下錯誤:a storage class is not allowed in an explicit specialization。
解決辦法:
開啟錯誤的檔案:
vim /root/opencv-2.4.9/modules/gpu/src/nvidia/core/NCVPixelOperations.hpp,
將其中template宣告中的所有static全部刪除。可以使用vim的全域性替換,或者其他編輯工具全域性替換即可(template<> static inline 替換為template<> inline ):
在命令列下輸入:%s/template<> static inline/template<> inline/g。
最後重新執行以上命令。
(7) 環境變數修改
在/etc/ld.so.conf 檔案中新增 /usr/local/lib , 然後執行:
sudo ldconfig -v
為程式指定openvc的標頭檔案位置, 使用pkg-config命令來完成。首先在 /etc/profile 中新增:
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
然後source生效:
source /etc/profile
再執行以下命令可以列印opencv的配置資訊:
pkg-config --libs opencv
(8) 把Python與opencv建立連線
編譯安裝好後的cv2.so,也就是python呼叫openc所需要的庫,放在/usr/local/lib/python2.7/site-packages
這個目錄下,我們可以將這個目錄新增到環境變數
export PYTHONPATH=$PYTHONPATH:/usr/local/lib/python2.7/site-packages
這樣便可以在python中 import cv2。
(9) 測試
在解壓的opencv目錄下找到 samples/c/build_all.sh,執行該檔案:
cd /root/opencv-2.4.8/samples/c/
chmod a+x build_all.sh
./build_all.sh
在這裡又遇到一個問題
/usr/bin/ld: cannot find -lcufft
/usr/bin/ld: cannot find -lnpps
/usr/bin/ld: cannot find -lnppi
/usr/bin/ld: cannot find -lnppc
/usr/bin/ld: cannot find -lcudart
去網上找了許多解決/usr/bin/ld: cannot find -lxxx問題的資料,但是都沒有解決。
不過看到一些材料中說libcufft,libnpps,libnppi,libnppc,libcudart是cuda的庫(cuda和opencv是有仇吧...),搜尋/usr/local/cuda-7.0/lib64,
果然發現了libcufft.so.7.0,libnpps.so.7.0,libnppi.so.7.0,libnppc.so.7.0,libcudarts.so.7.0,
既然報錯說是/usr/bin/ld: cannot find -lcufft,那是不是因為/usr/local/lib下面沒有libcufft.so.7.0,libnpps.so.7.0,libnppi.so.7.0,
libnppc.so.7.0,libcudarts.so.7.0的軟連線?
於是分別對上面幾個檔案建立軟連線 sudo ln -s /usr/local/cuda-7.0/lib64/libcufft.so.7.0 /usr/local/lib/libcufft.so
再次進入opencv目錄/samples/c/ 執行./build_all.sh 問題解決,不會再報錯,然後執行./find_obj 會出現無比nice的測試結果。
{
參考:
http://www.yanjiankang.cn/linux-install-opencv-on-ubuntu-or-redhat/
http://blog.csdn.net/gongxs7/article/details/49131201
http://blog.csdn.net/dyx810601/article/details/51579273
http://blog.csdn.net/llp1992/article/details/50066983
}
8、配置Makefile.config(參考:http://blog.csdn.net/autocyz/article/details/51783857)
折騰到這一步,離成功就不遠了,接下來就是配置之前擱置的Makefile.config,進入caffe根目錄,使用vim編輯器開啟Makefile.config。
在開啟的Makefile.config修改如下內容(我自己的配置):
USE_OPENCV := 1
USE_LEVELDB := 1
USE_LMDB := 1
CUSTOM_CXX := g++
CUDA_DIR := /usr/local/cuda-7.5
CUDA_ARCH := -gencode arch=compute_20,code=sm_20 \
-gencode arch=compute_20,code=sm_21 \
-gencode arch=compute_30,code=sm_30 \
-gencode arch=compute_35,code=sm_35 \
-gencode arch=compute_50,code=sm_50 \
-gencode arch=compute_50,code=compute_50
BLAS := atlas
MATLAB_DIR := /home/eric/MATLAB2014/R2014a
PYTHON_INCLUDE := /usr/include/python2.7 \
/usr/lib/python2.7/dist-packages/numpy/core/include
PYTHON_LIB := /usr/local/lib
WITH_PYTHON_LAYER := 1
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
BUILD_DIR := build
DISTRIBUTE_DIR := distribute
9、make所有檔案
進入caffe根目錄,輸入如下命令:
sudo make clean
sudo make all -j4
sudo make test -j4
sudo make runtest -j4
sudo make pycaffe -j4
sudo make matcaffe -j4
在命令列下輸入Python,會出現Python的一些資訊,然後輸入import caffe,沒有報錯說明配置成功。在命令列下輸入matlab,會開啟MATLAB軟體。
如果前面所有的配置過程都沒有問題的話,最後一步應該是不會出錯的。至此,caffe所有的配置項都完成了,接下來就可以愉快地使用這個強大的深度學習框架了。