Ubuntu16.04+caffe的安裝和Py-faster-rcnn在CPU電腦的安裝-2
本機安裝在/home/whu/HS/caffe
https://blog.csdn.net/jx232515/article/details/72384465
第一步:
重點宣告:是在cpu安裝,不適用GPU.本教程caffe編譯只是編譯了通用caffe的Python介面(如果還需要編譯MATLAB介面的,請務必先看我的後一篇部落格,涉及到一個很重要的版本問題)和faster-rcnn的Python介面。gcc,g++使用的5.3版本。
基本庫安裝
Python的安裝有兩種方式:一種是系統自帶的python,只需再安裝相應的庫即可;第二種是直接安裝anaconda,很多相應的庫已經包含了。第一種直接安裝庫檔案比較簡單,不需要修改相應的包含路徑和庫檔案。選擇第一種。
sudo apt-get install -y libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libboost-all-dev libhdf5-serial-dev protobuf-compiler gfortran libjpeg62 libfreeimage-dev
sudo apt-get install libatlas-base-dev git python-dev python-pip libgoogle-glog-dev libbz2-dev libxml2-dev libxslt-dev libffi-dev libssl-dev libgflags-dev liblmdb-dev python-yaml
可能有的同學安裝報錯不能獲取下載地址,可以在Ubuntu的軟體更新器的其他軟體源全部勾選,就可以了,新增軟體源。
安裝影象包依賴OpenCV開源庫:
因為我之前安裝了opencv 2.4.10,所以這裡借用 http://blog.csdn.net/zyb19931130/article/details/53842791的內容。表示感謝。
(1)從github上下載安裝指令碼:https://github.com/jayrambhia/Install-OpenCV
(2)進行Ubuntu/2.4目錄,對所有指令碼增加可執行許可權
[python]
- sudo chmod +x *.sh
(3)安裝依賴項
[python] view plain copy
- sudo ./dependencies.sh
(4)安裝opencv 2.4.9
[python] view plain copy
- sudo sh ./opencv2_4_9.sh
第二:從caffe專案主頁把caffe專案clone下來:
[python] view plain copy
- git clone --recursive https://github.com/BVLC/caffe.git
然後:
[python] view plain copy
- cd caffe
- cp Makefile.config.example Makefile.config
由於是僅CPU安裝,修改Makefile相關配置:
[plain] view plain copy
- 去掉註釋CPU_ONLY :=1
- 註釋掉CUDA有關的行:
- #CUDA_DIR := /usr/local/cuda
- #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
- 去掉註釋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/i386-linux-gnu/hdf5/serial /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/hdf5/serial
- #TEST_GPUID := 0
檔案修改完成後,開始編譯:
[python] view plain copy
- make all
- make test
- make runtest
- make pycaffe
若編譯沒有錯誤,則caffe編譯成功。可以在Python環境中使用caffe。
開始在Python使用.
[python] view plain copy
- $cd caffe/python
- $python
- >>>import caffe
出現錯誤:
File "caffe/io.py", line 2, in <module>
import skimage.io
ImportError: No module named skimage.io
此時只要按照以下命令操作即可:
$ sudo apt-get install python-numpy python-scipy python-matplotlib python-sklearn python-skimage python-h5py python-protobuf python-leveldb python-networkx python-nose python-pandas python-gflags cython ipython
$ sudo apt-get update
然後回到編譯caffe的目錄,重新
$ make pycaffe
沒報錯之後,重新進行下面操作。
- $cd caffe/python
- $python
- >>>import caffe
到這裡,caffe以及Python介面都已經編譯成功,配置好了。
第三:下面進行Faster-rcnn Python版的安裝。
下載專案,裡面包含的caffe--rcnn與第一部分的通用的caffe並不相同。
[python] view plain copy
- git clone --recursive https://github.com/rbgirshick/py-faster-rcnn.git
安裝cython和easydict:
[python] view plain copy
- sudo pip install cython
- sudo pip install easydict
編譯cython
到/py-faster-rcnn/lib/目錄下修改setup.py檔案,然後在/py-faster-rcnn/lib/目錄下make,修改如下:
- #CUDA = locate_cuda() //第一處
- #self.set_executable('compiler_so', CUDA['nvcc']) //第二處
- #Extension('nms.gpu_nms', //第三處,就是把cuda,gpu部分修改
- #['nms/nms_kernel.cu', 'nms/gpu_nms.pyx'],
- #library_dirs=[CUDA['lib64']],
- #libraries=['cudart'],
- #language='c++',
- #runtime_library_dirs=[CUDA['lib64']],
- # this syntax is specific to this build system
- # we're only going to use certain compiler args with nvcc and not with
- # gcc the implementation of this trick is in customize_compiler() below
- #extra_compile_args={'gcc': ["-Wno-unused-function"],
- # 'nvcc': ['-arch=sm_35',
- # '--ptxas-options=-v',
- # '-c',
- # '--compiler-options',
- # "'-fPIC'"]},
- #include_dirs = [numpy_include, CUDA['include']]
- #),
編譯py-faster-rcnn自帶的caffe:
到/py-faster-rcnn/caffe-fast-rcnn/目錄下,把Makefile.config.exampe複製並重命名為Makefile.config檔案,修改Makefile.config檔案
(和第一部分中的修改一樣)和CMakeLists.txt檔案(OFF改成ON),修改如下
[python] view plain copy
- caffe_option(CPU_ONLY "Build Caffe without CUDA support" ON) # TODO: rename to USE_CUDA
然後
- cd ~/py-faster-rcnn/caffe-fast-rcnn
- make -j8&& make pycaffe
第四:測試demo:
首先下載訓練好的模型,放在data檔案下:
[plain] view plain copy
- cd ~/py-faster-rcnn
- ./data/scripts/fetch_faster_rcnn_models.sh
然後修改一些檔案:
A:修改/py-faster-rcnn/lib/fast_rcnn/config.py檔案(True改成False)
# Use GPU implementation of non-maximum suppression
__C.USE_GPU_NMS = False
B:將/py-faster-rcnn/tools/test_net.py和 /py-faster-rcnn/tools/train_net.py的caffe.set_mode_gpu()修改為caffe.set_mode_cpu().
C:修改/py-faster-rcnn/lib/fast_rcnn/nms_wrapper.py檔案(註釋該引用,並將False改成True)
#from nms.gpu_nms import gpu_nms
def nms(dets, thresh, force_cpu=True)
最後,執行demo:
[plain] view plain copy
- cd ~/py-faster-rcnn
- ./tools/demo.py --cpu
但是cpu還是比較慢的。且容易記憶體溢位。如果我們換成zf網路模型(預設為VGG16)需要
./tools/demo.py --cpu --net zf