'nvidia-docker'에 해당되는 글 2건

  1. 2017.12.18 [API] Custom Object Detection API Tutorial: KickOff - Part. 0
  2. 2017.12.18 [설치] Object Detection API

Tensorflow의 Object Detection API를 사용하면서, 궁극적인 목표는 나만의 오브젝트들을 학습하여 영상 및 이미지 분석에 이용해 보는것 이었다.


이것을 하는데 여러 시행착오가 있었으며 지금까지 거쳐온 과정은 아래와 같다.


1. Nvidia-Docker 기반으로 tensorflow_gpu를 설치

    [설치] Installing tensorflow-gpu with Docker

2. Tensorflow Object Detection API 설치

    [설치] Object Detection API      

2. 오프라인 및 실시간 영상을 프레임 단위로 분석하기 위해서 Opencv 라이브러리를 설치

    [설치] Installing Opencv with Tensorflow    

3. Object Detection API Tutorial - 이미지 분석

    [API] Object Detection API를 이용한 오브젝트 인식하기 Part 1. - 설정 [펌]

4. Object Detection API Tutorial - 영상분석(실시간 및 녹화 영상)

    [API] Object Detection API를 이용한 오브젝트 인식하기 Part 3. - Web Cam 연동 [펌]

5. Tensorflow 학습 데이터 포맷 TFRecord

    [TFRecord] 텐서플로우 트레이닝 데이타 포맷인 *.tfrecord 파일 읽고 쓰기 [펌]

6.  Custom Object Detection - 동물 사진 학습 ( 실패 )

    [API] Tensorflow Object Detection API를 이용한 물체 인식 #2-동물 사진을 학습 시켜보자[펌]


처음으로 참조한 블로거의 동물 사진 학습하는 포스팅을 보고 시도하였으나 Google CloudML를 이용하여 학습하는 과정을 소개한것이라는 것을 알고 포기 하였다. (돈이 들어서)


국내 블로거들의 포스팅은 이제 크게 도움이 되지 못해서, 해외 블로거들의 글들로 눈을 돌린 시점이기도하다.

처음으로 검색해서 나온 블로거는 Dat Tran 이다.

https://towardsdatascience.com/how-to-train-your-own-object-detector-with-tensorflows-object-detector-api-bec72ecfe1d9

아래 내용을 기반으로 진행해보려 했으나 조금 어려워서 다른 블로거를 찾았다.

블로거: sentdex

블로그:

https://plus.google.com/+sentdex

https://www.youtube.com/watch?v=K_mFnvzyLvc&list=PLQVvvaa0QuDcNK5GeCQnxYnSSaar2tpku&index=3

https://pythonprogramming.net/custom-objects-tracking-tensorflow-object-detection-api-tutorial/


이 사람은 파이썬으로 상당히 다양한 프로젝트를 해본것 같다. 처음으로 찾은 Dat Tran이 포스팅한 내용을 인용하여 Custom Object Detection 하는 방법을 가이드 한다.


Tensorflow 에서 Custom Object Detection을 하기위한 과정은 다음과 같다.


1.학습시킬 이미지 준비

  학습 시킬 이미지는 일반적으로는 적어도 100장 또는 500장 이상의 이미지가 필요하다고 한다.

  하지만 내가 실무자로부터(R업체 솔루션을 개발한 대표)들은 바로는 적어도 2000장 보통은 20000~30000장의 이미지를 확보해야 정확도가 괜찮게 나온다고 들었다.

  ※ TODO 내가 학습 시키고 싶은 이미지를 쉽게 확보 할 수 있는 도구를 찾아보기.(또는 개발해보기)


2. Annotate/label

  Object Detection을 하려면 이미지와 해당 이미지에 대한 정보를 가지고 있는 XML 파일들이 있어야 한다.(이를 레이블링이라함)

  이미지 정보를 들고 있는 XML파일에는 이미지 이름, 이미지 종류, 이미지 내 detection 대상 이름, 좌표(xmin, xmax, ymin, ymax) 등이 포함되어야 한다.

  이렇게 이미지 레이블링을 도와주는 도구가 몇몇 있는것 같다.

   - labelImg: https://github.com/tzutalin/labelImg

   - FastAnnotationTool: https://github.com/christopher5106/FastAnnotationTool

   - ImageMagic: http://imagemagick.org/script/index.php


3. 보유하고 있는 데이터를 train/test sample로 나누기

  보유하고 있는 데이터를 train/test를 나누는 여러 가지가 있지만, 그 중 가장 대표적인 이유는 Overfitting 때문에 그렇다.

  내가 가지고 있는 데이터셋에만 적합한 학습데이터를 가지지 않으려는 노력인것이다.

4. 학습을 위한 TF Records 변환

  [TFRecord] 텐서플로우 트레이닝 데이타 포맷인 *.tfrecord 파일 읽고 쓰기 [펌] 을 참조

5. 학습에 사용할 모델 고르기

   config 파일 설정하기

   https://github.com/tensorflow/models/tree/master/research/object_detection/samples/configs

6. 학습 시키기(Train)

   https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/running_locally.md

   Tensorflow에서 가이드해주는 Config를 보면 학습시키는 단계가 무려 20만이다.. 어떤이가 CPU에서 100step을 돌리는데 1시간이나 걸렸다고한다. 나는 GPU를 사용하여 3만스텝 정도하는데 3시간쯤 걸린거 같다. 이래서 꼭 GPU를 써야 하는거 같다.

7. Export graph from new trained model

8. Detect custom objects in real time


이 블로거의 도움으로 나만의 오브젝트를 학습하여 탐지할 수 있는 방법을 알게 되었고 이제 포스팅을 시작한다.

 

 

 

 

 

 

 

 

 

Posted by 이성윤

필요한 정보를 최대한 인용하여 작성할 생각이다.


아래 글은 블로그(http://bcho.tistory.com/1192) 에서 인용했다.


Tensorflow Object Detection API는, Tensorflow 를 이용하여 이미지를 인식할 수 있도록 개발된 모델로, 라이브러리 형태로 제공되며, 각기 다른 정확도와 속도를 가지고 있는 5개의 모델을 제공한다. 머신러닝이나 텐서플로우에 대한 개념이 거의 없더라도 라이브러리 형태로 손쉽게 사용할 수 있으며, 직접 사용자 데이타를 업로드해서 학습을 하여, 내 시나리오에 맞는 Object Detection System을 손쉽게 만들 수 있다.


Object Detection API를 설치하기 위해서는 텐서플로우 1.x 와 파이썬 2.7x 버전이 사전 설치되어 있어야 한다. 이 글에서는 파이썬 2.7.13과 텐서플로우 2.7.13 버전을 기준으로 하고, 맥에 설치하는 것을 기준으로 한다. 리눅스나 다른 플랫폼 설치는 원본 설치 문서 https://github.com/tensorflow/models/blob/master/object_detection/g3doc/installation.md 를 참고하기 바란다.


2017.6.15에 Google에서 Tensorflow로 구현된Object Detection코드를 공개 했다. 지원하는 모델은 아래와 같다.

  • In addition to our base Tensorflow detection model definitions, this release includes:

    • A selection of trainable detection models, including:
      • Single Shot Multibox Detector (SSD) with MobileNet,
      • SSD with Inception V2,
      • Region-Based Fully Convolutional Networks (R-FCN) with Resnet 101,
      • Faster RCNN with Resnet 101,
      • Faster RCNN with Inception Resnet v2
    • Frozen weights (trained on the COCO dataset) for each of the above models to be used for out-of-the-box inference purposes.
    • Jupyter notebook for performing out-of-the-box inference with one of our released models
    • Convenient local training scripts as well as distributed training and evaluation pipelines via Google Cloud.
    SSD, RCNN 등 object detection 및 segmentation 하는 유명한 모델들이 tensorflow 안으로 들어갔다.

파이썬 라이브러리 설치


Object Detection API를 사용하는데 필요한 라이브러리 입니다. 

  • Protobuf 2.6
  • Pillow 1.0
  • lxml
  • tf Slim (which is included in the "tensorflow/models" checkout)
  • Jupyter notebook
  • Matplotlib
  • Tensorflow

pip install pillow
pip install lxml
pip install matplotlib
sudo yum install tkinter
sudo yum install protobuf
sudo yum install protobuf-compiler

pip install jupyter


Object Detection API 다운로드 및 설치


Object Detection API 설치는 간단하게, 라이브러리를 다운 받으면 된다. 설치할 디렉토리로 들어가서 git clone 명령어를 통해서, 라이브러리를 다운로드 받자

% git clone https://github.com/tensorflow/models

Protocol Buffer 컴파일

다음 프로토콜 버퍼를 사용하기 위해서 protoc로 proto 파일을 컴파일 한데, Object Detection API를 설치한 디렉토리에서 models 디렉토리로 들어간 후에, 다음 명령어를 수행한다.

" 레포지토리가 최신화가 안되어서 소스 설치를 했다. "

# $ sudo pip install protobuf
# $ yum install protobuf-compiler

% git clone https://github.com/google/protobuf.git

$ ./autogen.sh

$ ./configure --prefix=/home/tensorflow/local/protoc

$ make

$ python setup.py build

$ python setup.py test

$ sudo python setup.py install

$ protoc

$ protoc --version

export LD_LIBRARY_PATH=../src/.libs

% protoc object_detection/protos/*.proto --python_out=.


Add Libraries to PYTHONPATH

When running locally, the tensorflow/models/research/ and slim directories should be appended to PYTHONPATH. This can be done by running the following from tensorflow/models/research/:

# From tensorflow/models/research/
% export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim

vi ~/venvs/tensorflow/bin/activate

PATH="$VIRTUAL_ENV/bin:$PATH:/usr/local/cuda-8.0/bin:/home/tensorflow/sylee/src/OBJ_DETECTI
ON_DEMO/models/research:/home/tensorflow/sylee/src/OBJ_DETECTION_DEMO/models/research/slim"
export PATH
PYTHONPATH="/home/tensorflow/sylee/src/OBJ_DETECTION_DEMO/models/research:/home/tensorflow/
sylee/src/OBJ_DETECTION_DEMO/models/research/slim"
export PYTHONPATH


Note: This command needs to run from every new terminal you start. If you wish to avoid running this manually, you can add it as a new line to the end of your ~/.bashrc file.


Testing the Installation

You can test that you have correctly installed the Tensorflow Object Detection
API by running the following command:

% python object_detection/builders/model_builder_test.py



NVIDIA-DOCKER - Ubuntu 16.04 설치 가이드


Tensorflow Object Detection API depends on the following libraries:
•Protobuf 2.6
•Pillow 1.0
•lxml
•tf Slim (which is included in the "tensorflow/models/research/" checkout)
•Jupyter notebook
•Matplotlib
•Tensorflow


For detailed steps to install Tensorflow, follow the Tensorflow installation instructions. A

typical user can install Tensorflow using one of the following commands:

# For CPU
pip install tensorflow
# For GPU
pip install tensorflow-gpu


The remaining libraries can be installed on Ubuntu 16.04 using via apt-get:

sudo apt-get install protobuf-compiler python-pil python-lxml
sudo pip install jupyter
sudo pip install matplotlib

Alternatively, users can install dependencies using pip:

sudo pip install pillow
sudo pip install lxml
sudo pip install jupyter
sudo pip install matplotlib

sudo apt-get install python-tk


Object Detection API 다운로드 및 설치

Object Detection API 설치는 간단하게, 라이브러리를 다운 받으면 된다. 설치할 디렉토리로 들어가서

git clone 명령어를 통해서, 라이브러리를 다운로드 받자

$ git clone https://github.com/tensorflow/models


Protobuf Compilation

The Tensorflow Object Detection API uses Protobufs to configure model and training parameters.

Before the framework can be used, the Protobuf libraries must be compiled. This should be done

by running the following command from the tensorflow/models/research/ directory:

# From tensorflow/models/research/
$ protoc object_detection/protos/*.proto --python_out=.


Add Libraries to PYTHONPATH

When running locally, the tensorflow/models/research/ and slim directories should be appended to PYTHONPATH. This can be done by running the following from tensorflow/models/research/:

# From tensorflow/models/research/$ export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim

''''

PATH="$PATH:/usr/local/cuda-8.0/bin:/home/tensorflow/sylee/src/OBJ_DETECTION/modd
els/research:/home/tensorflow/sylee/src/OBJ_DETECTION/models/research/slim"
export PATH
PYTHONPATH="/usr/local/cuda-8.0/bin:/home/tensorflow/sylee/src/OBJ_DETECTION/modd
els/research:/home/tensorflow/sylee/src/OBJ_DETECTION/models/research/slim"
export PYTHONPATH

''''


Install object_detection

 

 


마지막으로, models디렉토리 에서 다음 스크립트를 실행하여 object_dection 라이브러리를 설치 할 수 있다.

 

sudo python setup.py install


설치도중 이와 같은 에러가 날 경우 


python-setuptools 설치를 통해 해결 할 수 있다.

sudo apt-get install python-setuptools


Testing the Installation

You can test that you have correctly installed the Tensorflow Object Detection
API by running the following command:


$ python object_detection/builders/model_builder_test.py




※ 설치 할 때부터 하나하나 기록해가면서 했어야 하는데.. 그러지 못해서 역시나.. 순서나 이런게 헛갈린다.

나중에 다시 손을 보겠다.


공부한 내용을 그때그때 바로 기록하는 습관이 갖어지길 바라며..

Posted by 이성윤