Caffe에서 R-CNN을 사용하려면 rbgirshick/py-faster-rcnn을 이용해야 한다.

그러나 1년전에 올라온 커밋 이후로 갱신되지 않았기에 수많은 삽질 끝에 설치를 완료할 수 있었다.

다시 이 고생을 하지 않기 위해 이 글을 올린다.

Ubuntu 16.04(64bit), CUDA 8.0, cuDNN 5.1은 설치 과정은 링크된 글을 통해 설치하면된다.

참고로 Caffe 최신버전과 py-faster-rcnn을 merge하여 사용하기 때문에 기존에 설치된 Caffe가 있다면 Ubuntu를 재설치 하길 권장한다.

Caffe General dependencies

sudo apt-get update
sudo apt-get upgrade

sudo apt-get install -y build-essential cmake git pkg-config
sudo apt-get install -y libprotobuf-dev libleveldb-dev libsnappy-dev libhdf5-serial-dev protobuf-compiler
sudo apt-get install -y libatlas-base-dev
sudo apt-get install -y --no-install-recommends libboost-all-dev
sudo apt-get install -y libgflags-dev libgoogle-glog-dev liblmdb-dev

# (Python general)
sudo apt-get install -y python-pip

# (Python 2.7 development files)
sudo apt-get install -y python-dev
sudo apt-get install -y python-numpy python-scipy

# Make sure to clone with --recursive
cd ~
git clone --recursive https://github.com/rbgirshick/py-faster-rcnn.git

cd ~/py-faster-rcnn/caffe-fast-rcnn
git remote add -f caffe https://github.com/BVLC/caffe.git
git merge -X theirs caffe/master
# 이렇게 하면 nano에디터가 켜지면서 정보를 입력해 달라고 하는데 그냥 Ctrl + X를 눌러서 종료해주면 된다.

gedit include/caffe/layers/python_layer.hpp

# Remove
self_.attr("phase") = static_cast<int>(this->phase_);

cd ~/py-faster-rcnn/caffe-faster-rcnn/python
for req in $(cat requirements.txt); do sudo -H pip install $req --upgrade; done

OpenCV Install

이후 Caffe를 build하기 전에 OpenCV를 설치해야한다. git master branch로 3.2.0-dev를 설치한다.

# Build tools:
sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

cd ~
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 WITH_CUDA=ON \
-D WITH_CUBLAS=1 \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D BUILD_EXAMPLES=ON ..

make -j8
sudo make -j8 install
sudo ldconfig

# Check Install
$ python
>>> import cv2
>>> cv2.__version__
'3.2.0-dev'

py-faster-rcnn Install

이제 py-faster-rcnn을 설치할 차례이다.

cd ~/py-faster-rcnn/lib
make -j8

cd ~/py-faster-rcnn/caffe-faster-rcnn
cp Makefile.config.example Makefile.config
gedit Makefile.config

# 설정 변경
USE_CUDNN := 1
OPENCV_VERSION := 3
CUDA_DIR := /usr/local/cuda 를
CUDA_DIR := /usr/local/cuda-8.0 로 변경해주고
PYTHON_INCLUDE := /usr/include/python2.7 \
/usr/lib/python2.7/dist-packages/numpy/core/include \
/usr/local/lib/python2.7/dist-packages/numpy/core/include
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
WITH_PYTHON_LAYER := 1
USE_PKG_CONFIG := 1

Makefile도 다음과 같이 수정해준다.

cd ~/py-faster-rcnn/caffe-faster-rcnn
gedit Makefile

NVCCFLAGS += -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
이 내용을 찾아서
NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
이렇게 변경 해주면 된다.

이제 build를 해준다.

mkdir build
cd build
cmake ..
make -j8 all
make -j8 pycaffe
make -j8 install

# Caffe Path setting
gedit ~/.bashrc
export CAFFE_ROOT=~/py-faster-rcnn/caffe-fast-rcnn
export PYTHONPATH=~/py-faster-rcnn/caffe-fast-rcnn/python:$PYTHONPATH
source ~/.bashrc

# Check Install
$ python
>>> import caffe
>>> caffe.__version__

sudo -H pip install easydict
sudo apt-get install python-gi-cairo python-tk

mkdir ~/py-faster-rcnn/data/faster_rcnn_models
sh ~/py-faster-rcnn/data/scripts/fetch_faster_rcnn_models.sh

python ~/py-faster-rcnn/tools/demo.py

demo.py가 정상적으로 실행되면 설치가 완료된다.