SSD是Caffe的一個分支,源碼在github上:https://github.com/weiliu89/caffe/tree/ssd
$ git clone https://github.com/weiliu89/caffe.git
$ cd caffe
$ git checkout ssd
然后編譯SSD
$ cp Makefile.config.example Makefile.config
$ make -j8
$ make py
$ make test -j8
在這個過程中會遇到很多很多問題,特此記錄
1、hdf5缺失
解決方案
官網下載hdf5:https://www.hdfgroup.org/downloads/hdf5/source-code/
解壓后編譯安裝
$ cd hdf5-1.10.3
$ mkdir build
$ cd build
$ cmake ..
$ sudo make
$ sudo make install
對於新版本的hdf5需要較新版本的cmake,因此需要將cmake更新至3.10以后,此處選擇3.12.0
$ cd /usr
$ sudo wget https://cmake.org/files/v3.12/cmake-3.12.0-Linux-x86_64.tar.gz
$ sudo tar zxvf cmake-3.12.0-Linux-x86_64.tar.gz
$ sudo ln -s /usr/cmake-3.12.0-Linux-x86_64/bin/* /usr/bin/
如果提示有沖突,那么需要將原有的cmake相關可執行文件刪除
$ sudo rm /usr/bin/cmake #以及其他如ccmake、ctest、cpack、cmake-gui
#然后重新關聯
$ sudo ln -s /usr/cmake-3.12.0-Linux-x86_64/bin/* /usr/bin/
$ cmake --version #檢查cmake版本,如果為3.12.0則說明安裝成功
打開Makefile.config,找到
# Whatever else you find you need goes here.
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib
改為
# Whatever else you find you need goes here.
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib
然后鏈接hdf5庫
$ cd /usr/lib/x86_64-linux-gnu
$ sudo ln -s libhdf5_serial.so.10.0.2 libhdf5.so
$ sudo ln -s libhdf5_serial_hl.so.10.0.2 libhdf5_hl.so
如果還是有問題
$ sudo ln -sf libhdf5_serial.so libhdf5.so
$ sudo ln -sf libhdf5_serial_hl.so libhdf5_hl.so
github上有討論帖https://github.com/BVLC/caffe/issues/4333
2、opencv3的問題
問題如下
.build_release/lib/libcaffe.so: undefined reference to 'cv::VideoCapture::set(int, double)'
...
解決方案
已安裝opencv3及對應的contrib的同學們打開Makefile.config,找到
# OPENCV_VERSION := 3
將這句話前面的#去掉,然后打開Makefile找到
ifeq ($(USE_OPENCV), 1)
LIBRARIES += opencv_core opencv_highgui opencv_imgproc
這里空格然后加上
opencv_imgcodecs opencv_contrib opencv_videoio
3、架構architecture compute_20的問題
問題如下
nvcc fatal : Unsupported gpu architecture 'compute_20'
Makefile:596: recipe for target '.build_release/cuda/src/caffe/solvers/nesterov_solver.o' failed
解決方案
打開Makefile.config,找到
# CUDA architecture setting: going with all of them. # For CUDA < 6.0, comment the lines after *_35 for compatibility. 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_52,code=sm_52 \ -gencode arch=compute_61,code=sm_61
第三行和第四行中的結構部分前面加#,改為
# CUDA architecture setting: going with all of them. # For CUDA < 6.0, comment the lines after *_35 for compatibility. 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_52,code=sm_52 \ -gencode arch=compute_61,code=sm_61
至此基本解決安裝編譯SSD的問題,接下來從github上下載MobileNet到examples文件夾下:https://github.com/chuanqi305/MobileNet-SSD,運行demo.py,這時又會出現好幾種問題,特做以下記錄
4、沒有安裝pycaffe
問題如下
ImportError: No module named _caffe
這是沒有配置好python與caffe的接口,需要安裝pycaffe
解決方案
$ cd your_caffe_path
$ sudo make pycaffe
5、找不到skimage模塊
問題如下
ImportError: No module named skimage.io
找不到skimage模塊,那么我們安裝此模塊
解決方案
$ sudo pip install scikit-image
使用pip安裝的過程中,如果pip版本過低,有些庫是無法安裝的,因此需要用以下的命令升級到最新版的pip
$ sudo pip install --upgrade pip
建議個人使用pip時安裝都加上sudo,有些文件權限會有問題。
6、找不到protobuf模塊
問題如下
ImportError: No module named google.protobuf.internal
找不到protobuf模塊,解決方案類似於上一問題
解決方案
$ sudo pip install protobuf