openPose 설치 및 구동 (ubuntu 16.04 + 1080)


CMU의 유명 프로젝트인 딥러닝 기반 openPose 구동에 대해서 다룬다.
영상 자동 tagging시 유용하게 쓸 수 있는 오픈 코드인것 같다.

openPose 논문 리스트

  • CVPR17, Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields
  • CVPR16, Hand Keypoint Detection in Single Images using Multiview Bootstrapping
  • CVPR16, Convolutional pose machines

코드
github 주소

설치

설치 컴퓨터는 한성컴퓨터 보스몬스터 (NVIDA 1080) 스팩은 아래와 같다.
구매시기: 2017.1월, 200만원

코드 다운
git clone https://github.com/CMU-Perceptual-Computing-Lab/openpose.git

종속 프로그램 설치

  • sudo apt-get install cmake-qt-gui설치 make 위해서 visual configuration을 하기 위함이다.
  • CUDA 8 cuDNN 5.1설치. cuDNN까지 설치해야 Deep Learning 작업시 속도가 빠르다. CUDA 9.0까지 나와 있으니 버전을 잘 맞춰서 설치
    • sudo ./install_cmake.sh해당 스크립트로 설치 가능
  • Caffe 설치: sudo ./install_cmake.sh
  • OpenCV 설치: sudo apt-get install libopencv-dev

설정을 통한 Makefile 생성

Console에서 cmake-gui를 입력

아래와 같은 설정 창이 나온다.

  • where is the source code 부분에 openpose root 디렉토리를 설정
  • where to build the binaries 부분에 build 디렉토리 설정
  • configure버튼을 누르고 Unix Makefile로 선택한다.
  • Finish 버튼을 누르면 아래와 같이 진행된다.

  • generate버튼을 한번 더 누른다. done이 나오면 성공

아래와 같이 처음에 git clone으로 코드만 다운받고 설치만 하면 build디렉토리에 Makefile이 없다. 이제 정상적으로 생성 되어있다.

make -j 8을 실행해서 컴파일 한다. (8은 가능한 process 숫자이다.)

컴파일 성공

데모 실행 결과

quick-start 가이드에 따라서 한번 실행해 본다.

빌드가 성공해야만 build/examples/openpose/openpose.bin파일이 생성되어 있다.

비디오 실행 명령어

# Ubuntu
./build/examples/openpose/openpose.bin --video examples/media/video.avi
# With face and hands
./build/examples/openpose/openpose.bin --video examples/media/video.avi --face --hand

아래는 그냥 포즈만 디텍션한 것으로 1080에서 10 FPS까지 나온다.

아래는 얼굴 을 포함한 것으로 급격히 떨어져서 1.4 FPS가 된다.

두 동영상 예제를 실행 했을 때의 GPU load를 측정한 것이다.
GPU 메모리는 1.7GB 사용하고 GPU-Util 80~90%정도 점유된다.


'AI > Caffe' 카테고리의 다른 글

Faster R CNN Training  (0) 2017.02.27
Faster-R-CNN Install on Ubuntu 16.04(GTX1080 CUDA 8.0,cuDNN 5.1)  (4) 2017.02.26

Faster R CNN Training


실제 해당 과정을 통해서 학습을 수행해 본다.

Prepare dataset and Pre-trained model

VOC-2007 데이터를 다운 받는다.

if [ ! -d data ]; then mkdir data; fi; cd data
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2007.tar
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtest_06-Nov-2007.tar
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCdevkit_08-Jun-2007.tar
tar xvf VOCtrainval_06-Nov-2007.tar
tar xvf VOCtest_06-Nov-2007.tar
tar xvf VOCdevkit_08-Jun-2007.tar
rm -rf *.tar; cd ../

test_format error

error: AttributeError: 'module' object has no attribute 'text_format'
해결을 위해서 train.py에 import google.protobuf.text_format을 추가 한다.

TypeError: slice indices must be integers

(caffe_py2_virtualenv) jemin@jemin-desktop:~/caffe/second/py-faster-rcnn$ TypeError: slice indices must be integers or None or have an __index__ method
TypeError:: 명령을 찾을 수 없습니다

해결을 위해서는 numpy 1.12버전을 down-grade 한다.

pip uninstall numpy
pip install 'numpy==1.11.0'

모델 학습 방법

Training + Testing = 9963

Testing = 4952

학습하는 방법

일단 free training model을 들고 온다.
$ ./data/scripts/fetch_imagenet_models.sh

학습 방법은 총 2가지이다.

  • alternating optimization algorithm
  • approximate joint training

여기선 후자를 선택한다.

# ./experiments/scripts/faster_rcnn_end2end.sh [GPU_ID] [NET] [DATASET]
# Directly run this command might have an error "AssertionError: Selective search data not found at:". For the solution, please refer to Part 4.

$ ./experiments/scripts/faster_rcnn_end2end.sh 0 ZF pascal_voc

테스팅 방법

caffe zoo model

기본제공되는 caffe zoo 모델의 경우 ./data/faster_rcnn_models/ZF_faster_rcnn_final.caffemodel에 있다.
이것을 이용해서 테스팅을 수행해 본다.

./tools/test_net.py --gpu 0 --def models/pascal_voc/ZF/faster_rcnn_end2end/test.prototxt --net ./data/faster_rcnn_models/ZF_faster_rcnn_final.caffemodel --imdb voc_2007_test --cfg experiments/cfgs/faster_rcnn_end2end.yml

위와 같이 caffe zoo 모델은 mAP 0.4518로 그다지 정확도가 높지 않은 것을 알 수 있다.

새로 학습 모델

end2end
0.6116 mAP이다.

testing 데이터를 이용해서 과적합 시켜서 학습

  • testing data
  • end2end
  • 80000

정확도는 mAP = 0.8805

**직접 테스팅 실행 **

  • 정확도: mean AP = 0.8805
./tools/test_net.py --gpu 0 --def models/pascal_voc/ZF/faster_rcnn_end2end/test.prototxt --net ./output/faster_rcnn_end2end/voc_2007_test/zf_faster_rcnn_iter_80000.caffemodel --imdb voc_2007_test --cfg experiments/cfgs/faster_rcnn_end2end.yml


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. 의존성 파일 설치

  • cython 필요

    • sudo apt-get install cython
  • python package 설치, virtual env 활성화 상태에서

    • pip install easydict
    • pip install scikit-learn
    • pip protobuf
  • requirements.txt에 있는 python module 설치

    • cd py-faster-rcnn/caffe-faster-rcnn/python
    • for req in $(cat requirements.txt); do pip install $req | cut -d ">" -f1; done

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


'AI > Caffe' 카테고리의 다른 글

openPose 설치 및 구동 (ubuntu 16.04 + 1080)  (2) 2018.04.12
Faster R CNN Training  (0) 2017.02.27

+ Recent posts