Faster-R-CNN Install on Ubuntu 16.04(GTX1080 CUDA 8.0,cuDNN 5.1)
pycaffe
로 구현된 py-faster R-CNN
을 uBuntu 16.04
에 설치하는 방법을 다룬다.
그래픽카드는 GTX 1080이며 CUDA 8.0과 cuDNN 5.1을 사용한다.
Caffe 의존성 라이브러리 설치
핵심은 BVLC
에서 최신 caffe는 설치할 필요가 없다.
왜냐하면, Faster-R-CNN
소스코드에 이미 구버전 caffe
가 포함되어 있기 때문이다.
해당 버전은 2015년에 Microsoft
에서 기존 Caffe
를 수정해서 만든것이다.
버클리 대학에서 지공하는 공식 Caffe
에는 Faster R-CNN
에만 있는 RoI pooling
와 같은 여러 기능들을 지원하지 않아서 실행이 안된다.
따라서 http://caffe.berkeleyvision.org/
에서 prerequisites
를 보고 그것들만 설치해 준다.
1. CUDA, cuDNN 설치하기
GTX 1080이기 때문에 CUDA 8과 cuDNN 5.1을 설치한다.
이전 post 참조
2. CUDA 환경변수 설정하기
TensorFlow
와 다르게 설정 해줘야 한다.
vi ~/.bashrc
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
3. python virtual environment 설정
tensorflow
와의 충돌을 막기위해서 virtualenv를 사용한다.
#install
$ sudo apt-get install python-pip python-dev python-virtualenv
$ virtualenv --system-site-packages targetDirectory
# activate shell
$ source ~/tensorflow/bin/activate # If using bash, ksh, sh, or
활성화 하면 shell 앞에 (caffe_py2_virtualenv) jemin@jemin-desktop:
와 같이 나옵니다.
이제부터 pip로 설치하면 모두 해당 virtual environment directory에 설치가 됩니다.
이때 sudo
를 붙이면 중복성이 발생하니 pip
로만 설치를 합니다.
4. 필요 라이브러리 설치
uBuntu 16.04를 기준으로 한다.
의존성 가이드 공식사이트: http://caffe.berkeleyvision.org/install_apt.html
sudo apt-get install opencl-headers build-essential \
protobuf-compiler libprotoc-dev libboost-all-dev libleveldb-dev \
hdf5-tools libhdf5-serial-dev \
libopencv-core-dev libopencv-highgui-dev \
libsnappy-dev libsnappy1 libatlas-base-dev cmake libstdc++6-4.8-dbg \
libgoogle-glog0 libgoogle-glog-dev libgflags-dev liblmdb-dev
5. openCV 설치하기
openCV를 직접 받아서 compile해서 설치해야 최신 CUDA를 잘 지원한다.
그래서 github에서 직접 받아서 cmake를 통해서 설치한다.
의존성 라이브러리들
sudo apt-get install build-essential cmake git pkg-config libjpeg8-dev \
libjasper-dev libpng12-dev libgtk2.0-dev \
libavcodec-dev libavformat-dev libswscale-dev libv4l-dev gfortran
sudo apt-get install libtiff5-dev
앞으로도 caffe
에서도 사용하는 ATLAS (among many other BLAS implementation)
을 설치한다.
sudo apt-get install libatlas-base-dev
이것 역시 openCV에서도 사용한다.
openCV 설치
git clone https://github.com/opencv/opencv.git
cd opencv
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D INSTALL_C_EXAMPLES=ON \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \
-D BUILD_EXAMPLES=ON ..
make -j8
sudo make -j8 install
sudo ldconfig
설치확인
py-faster-rcnn 설치
공식사이트
1. github 다운
내부에 fast-rcnn git이 또 존재하므로 반드시 --recursive
option을 줘서 두 개의 git repository에서 모두 다운 받아야 한다.
# Make sure to clone with --recursive
git clone --recursive https://github.com/rbgirshick/py-faster-rcnn.git
2. 의존성 파일 설치
3. 핵심
caffe 버전 통합
BVLC Caffe 2017
최신 버전과 현재 내부에 있는 2015년 버전 MS 수정 caffe를 merge해야 한다.
원래 Microsoft Caffe
(caffe_py2_virtualenv) jemin@jemin-desktop:~/caffe/second/py-faster-rcnn/caffe-f ast-rcnn$ git log
commit 0dcd397b29507b8314e252e850518c5695efbb83
Author: Ross Girshick <ross.girshick@gmail.com>
Date: Sun Aug 9 13:41:39 2015 -0700
Fast and Faster R-CNN change set
- smooth l1 loss
- roi pooling
- expose phase in pycaffe
- dropout scaling at test time (needed for MSRA-trained ZF network)
차이점은
vi src/caffe/proto/caffe.proto
를 열어서 보면 아래와 같이 Faster R CNN
용 옵션들이 모두 있다는 것이다.
optional ROIPoolingParameter roi_pooling_param = 8266711;
최신 버전의 caffe
를 설치해서 사용할 경우 이러한 Microsoft
에서 변경한 내용들이 없기 때문에 추후에 demo.py
를 실행 할 때
Message type "caffe.LayerParameter" has no field named "roi_pooling_param".
에러를 발생 시킨다. 따라서 반드시 2015년에 수정된 Microsoft caffe를 기반으로 merge를 수행 해야 한다.
(caffe_py2_virtualenv) jemin@jemin-desktop:~/caffe/second/py-faster-rcnn/caffe-f ast-rcnn$ git remote add caffe https://github.com/BVLC/caffe.git
(caffe_py2_virtualenv) jemin@jemin-desktop:~/caffe/second/py-faster-rcnn/caffe-f ast-rcnn$ git remote -v
caffe https://github.com/BVLC/caffe.git (fetch)
caffe https://github.com/BVLC/caffe.git (push)
origin https://github.com/rbgirshick/caffe-fast-rcnn.git (fetch)
origin https://github.com/rbgirshick/caffe-fast-rcnn.git (push)
(caffe_py2_virtualenv) jemin@jemin-desktop:~/caffe/second/py-faster-rcnn/caffe-f ast-rcnn$ git fetch caffe
remote: Counting objects: 13599, done.
remote: Compressing objects: 100% (7/7), done.
remote: Total 13599 (delta 3344), reused 3341 (delta 3341), pack-reused 10251
오브젝트를 받는 중: 100% (13599/13599), 13.71 MiB | 55.00 KiB/s, 완료.
델타를 알아내는 중: 100% (9619/9619), 로컬 오브젝트 582개 마침.
https://github.com/BVLC/caffe URL에서
* [새로운 브랜치] device-abstraction -> caffe/device-abstraction
* [새로운 브랜치] gh-pages -> caffe/gh-pages
* [새로운 브랜치] master -> caffe/master
* [새로운 브랜치] opencl -> caffe/opencl
* [새로운 브랜치] parallel -> caffe/parallel
* [새로운 브랜치] tutorial -> caffe/tutorial
* [새로운 브랜치] williford-patch-1 -> caffe/williford-patch-1
* [새로운 브랜치] windows -> caffe/windows
* [새로운 태그] acm-mm-oss -> acm-mm-oss
* [새로운 태그] bsd -> bsd
* [새로운 태그] rc -> rc
* [새로운 태그] rc2 -> rc2
* [새로운 태그] rc3 -> rc3
* [새로운 태그] rc5 -> rc5
* [새로운 태그] rcnn-release -> rcnn-release
* [새로운 태그] v0.1 -> v0.1
* [새로운 태그] v0.9 -> v0.9
* [새로운 태그] v0.99 -> v0.99
* [새로운 태그] v0.999 -> v0.999
* [새로운 태그] v0.9999 -> v0.9999
* [새로운 태그] rc4 -> rc4
(caffe_py2_virtualenv) jemin@jemin-desktop:~/caffe/second/py-faster-rcnn/caffe-fast-rcnn$ git branch
* (HEAD 0dcd397 위치에서 분리됨)
master
git merge -X theirs caffe/master
-X theirs
의 의미는 caffe/master를 기준으로 merge 한다는 의미이다.
추가로 아래의 파일에서 해당 코드를 주석처리 하거나 제거한다.
vi ./include/caffe/layers/python_layer.hpp
Remove self_.attr("phase") = static_cast<int>(this->phase_); from include/caffe/layers/python_layer.hpp after merging.
요약하면 아래와 같으며, 해당 issue는 원래 저자 github에 있다.
issue 316
# Maybe you can try to merge caffe master branch into caffe-fast-rcnn.
cd caffe-fast-rcnn
git remote add caffe https://github.com/BVLC/caffe.git
git fetch caffe
git merge -X theirs caffe/master
#Remove self_.attr("phase") = static_cast<int>(this->phase_);
#from include/caffe/layers/python_layer.hpp after merging.
4. py-caffe 빌드와 설치
Makefile.config 설정
py-faster-rcnn/caffe-fast-rcnn
에서 caffe를 빌드할 때 사용한다.
cp Makefile.config.example Makefile.config
를 한다.
각자 환경에 맞춰서 주석처리된 부분을 풀고 환경변수를 설정 해야 한다.
# cuDNN acceleration switch (uncomment to build with cuDNN).
USE_CUDNN := 1
# Uncomment if you're using OpenCV 3
OPENCV_VERSION := 3
# CUDA directory contains bin/ and lib/ directories that we need.
CUDA_DIR := /usr/local/cuda
# CUDA architecture setting: going with all of them.
# For CUDA < 6.0, comment the *_50 through *_61 lines for compatibility.
# For CUDA < 8.0, comment the *_60 and *_61 lines 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_60,code=sm_60 \
-gencode arch=compute_61,code=sm_61 \
-gencode arch=compute_61,code=compute_61
# BLAS choice:
# atlas for ATLAS (default)
# mkl for MKL
# open for OpenBlas
BLAS := atlas
# NOTE: this is required only if you will compile the python interface.
# We need to be able to find Python.h and numpy/arrayobject.h.
PYTHON_INCLUDE := $(VIRTUAL_ENV)/include/python2.7 \
$(VIRTUAL_ENV)/lib/python2.7/site-packages/numpy/core/include
# We need to be able to find libpythonX.X.so or .dylib.
PYTHON_LIB := /usr/lib
# Uncomment to support layers written in Python (will link against Python libs)
WITH_PYTHON_LAYER := 1
# 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 /usr/lib/x86_64-linux-gnu/hdf5/serial
# Uncomment to use `pkg-config` to specify OpenCV library paths.
# (Usually not necessary -- OpenCV libraries are normally installed in one of the above $LIBRARY_DIRS.)
USE_PKG_CONFIG := 1
# N.B. both build and distribute dirs are cleared on `make clean`
BUILD_DIR := build
DISTRIBUTE_DIR := distribute
# The ID of the GPU that 'make runtest' will use to run unit tests.
TEST_GPUID := 0
# enable pretty build (comment to see full commands)
Q ?= @
caffe-fast-rcnn에서 빌드하기
mkdir build
cd build
cmake ..
make -j8 all
make -j8 pycaffe
make -j8 install
make -j8 runtest
cython module들 빌드
py-faster-rcnn/lib
에서 make -j8
caffe 환경변수 설정
vi ~/.bashrc
export CAFFE_ROOT=/home/jemin/caffe/second/py-faster-rcnn/caffe-fast-rcnn
export PYTHONPATH=/home/jemin/caffe/second/py-faster-rcnn/caffe-fast-rcnn/python:$PYTHONPATH
5. 설치 확인
(caffe_py2_virtualenv) jemin@jemin-desktop:~/caffe/second/py-faster-rcnn/caffe-fast-rcnn$ python
Python 2.7.12 (default, Nov 19 2016, 06:48:10)
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import caffe
>>> caffe.__version__
'1.0.0-rc5'
6. 미리 빌드된 모델 다운받기
caffe zoo
에서 VOC2007로 미리 트레이닝된 zf net과 vgg16을 다운 받는다.
cd py-faster-rcnn
./data/scripts/fetch_faster_rcnn_models.sh
Simple demo.py 실행
이제 데모를 실행한다.
putty로 실행하더라도 X11 forwarding이 설정 되었다면 image가 정상적으로 표시된다.
./tools/demo.py --net zf
Demo for data/demo/000456.jpg
Detection took 0.038s for 300 object proposals
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Demo for data/demo/000542.jpg
Detection took 0.031s for 135 object proposals
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Demo for data/demo/001150.jpg
Detection took 0.033s for 231 object proposals
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Demo for data/demo/001763.jpg
Detection took 0.033s for 200 object proposals
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Demo for data/demo/004545.jpg
Detection took 0.037s for 300 object proposals
참고사이트
https://github.com/rbgirshick/py-faster-rcnn
http://lastone9182.github.io/2016/09/16/aws-caffe.html#index-table