02. Tensorflow2.2 gpu 기반의 TF2 Object Detection API를 활용한 객체 탐지 - pineland/object-tracking GitHub Wiki

<참고>

1. Tensorflow 설치

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

2. Tensorflow 모델 다운로드

$ mkdir ~/tf_object_detection && cd ~/tf_object_detection
$ git clone https://github.com/tensorflow/models.git

3. 필요한 라이브러리 설치

$ pip install --user Cython
$ pip install --user contextlib2
$ pip install --user pillow
$ pip install --user lxml
$ pip install --user jupyter
$ pip install --user matplotlib

4. COCO API 설치

pip install pycocotools를 통해서 간단하게 설치도 가능하나, 아래와 같이 설치한다.

$ cd ~/tf_object_detection
$ git clone https://github.com/cocodataset/cocoapi.git
$ cd cocoapi/PythonAPI
$ make
$ cp -r pycocotools ~/tf_object_detection/models/research/

pycocotools는 Object Detection 모델을 evaluation 할 때 사용하는 evaluation metrics로 사용된다. 이후 COCO evaluation metrics를 사용하지 않더라도, Tensorflow Object Detection API는 내부적으로 COCO evaluation metrics를 기본으로 사용하기 때문에 필수적으로 설치해야 한다.

5. protobuf 3.4 이상 버전 설치

Tensorflow Object Detection API는 Object Detection 모델들의 하이퍼파라미터 설정이나 학습에 적용할 파라미터등을 Protobuf를 사용해서 설정한다. 따라서 API를 사용하기 위해서는 먼저 Protobuf 라이브러리를 아래의 명령어들을 통해 컴파일해야 한다.

5.1 설치

간단하게 sudo apt install protobuf-compiler를 통해 설치하는 방법도 있지만, 여기에서는 아래와 같이 소스를 다운받아 컴파일하여 설치한다.

$ sudo apt-get install autoconf automake libtool curl make g++ unzip -y
$ git clone https://github.com/google/protobuf.git
$ cd protobuf
$ git submodule update --init --recursive
$ ./autogen.sh
$ ./configure         # 컴퓨터의 환경에 맞게 makefile을 생성한다.
$ make                # 컴파일. 컴파일이 끝나면 설치파일(setup파일 같은 것)이 생성된다.
$ make check
$ sudo make install   # make를 통해 만든 설치파일을 통해 프로그램을 설치한다.
$ sudo ldconfig       # 프로그램이 실행되는데 필요한 동적링크라이브러리(.so 파일)를 링크시킨다.
$ protoc --version    # 설치 점검

5.2 실행

$ cd ./models/research
$ protoc object_detection/protos/*.proto --python_out=.
$ cd object_detection/protos/ && ls -l   # 설치확인 : proto 파일에 해당하는 파이썬 파일(*.py)들이 생겼는 지 확인한다.

6. PYTHONPATH에 tensorflow/model/research와 slim 폴더 경로 추가

본인의 로컬 컴퓨터에서 API를 활용하기 위해서는, tensorflow/models/research/ 와 slim 폴더가 PYTHONPATH에 등록되어있어야 한다.

$ cd ~/tf_object_detection/models/research/
$ export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim

6. 설치 확인

$ python object_detection/builders/model_builder_test.py

7. 입력 데이터 준비

7.1 입력 데이터 다운로드

Object Detection을 위한 데이터로 Pascal VOC 2012 데이터셋을 다운로드한다.

$ wget http://host.robots.ox.ac.uk/pascal/VOC/voc2012/VOCtrainval_11-May-2012.tar
$ tar -xvf VOCtrainval_11-May-2012.tar

7.2 입력 데이터 변환

Tensorflow Object Detection API에서는 모든 입력 데이터를 TFRecords로 변환해서 사용합니다. 따라서 다음의 create_pascal_tf_record.py Python 스크립트를 사용해서 다운로드받은 Pascal VOC 2012데이터셋을 TFRecords 파일로 변환해야 한다.

# From tensorflow/models/research/
$ python object_detection/dataset_tools/create_pascal_tf_record.py \
  --label_map_path=object_detection/data/pascal_label_map.pbtxt \
  --data_dir=VOCdevkit --year=VOC2012 --set=train \
  --output_path=pascal_train.record

$ python object_detection/dataset_tools/create_pascal_tf_record.py \
  --label_map_path=object_detection/data/pascal_label_map.pbtxt \
  --data_dir=VOCdevkit --year=VOC2012 --set=val \
  --output_path=pascal_val.record

7. COCO dataset 다운로드

COCO 데이터는 2014 , 2017 로 나뉘어져 있는데, COCO 데이터 세트 종류는 다음과 같다.

  • 이미지
    • 2014 Train images [83K/13GB]
    • 2014 Val images [41K/6GB]
    • 2014 Test images [41K/6GB]
    • 2015 Test images [81K/12GB]
    • 2017 Train images [118K/18GB]
    • 2017 Val images [5K/1GB]
    • 2017 Test images [41K/6GB]
    • 2017 Unlabeled images [123K/19GB]
  • 주석(annotations : bounding boxes and labels)
    • 2014 Train/Val annotations [241MB]
    • 2014 Testing Image info [1MB]
    • 2015 Testing Image info [2MB]
    • 2017 Train/Val annotations [241MB]
    • 2017 Stuff Train/Val annotations [1.1GB]
    • 2017 Panoptic Train/Val annotations [821MB]
    • 2017 Testing Image info [1MB]
    • 2017 Unlabeled Image info [4MB]

# COCO dataset 다운로드
$ mkdir COCO && cd COCO 

# images 다운로드
$ mkdir images && cd images
$ wget http://images.cocodataset.org/zips/train2017.zip
$ wget http://images.cocodataset.org/zips/val2017.zip
$ wget http://images.cocodataset.org/zips/test2017.zip
$ wget http://images.cocodataset.org/zips/unlabeled2017.zip

$ unzip train2017.zip
$ unzip val2017.zip
$ unzip test2017.zip
$ unzip unlabeled2017.zip

$ rm train2017.zip
$ rm val2017.zip
$ rm test2017.zip
$ rm unlabeled2017.zip 

# annotation 다운로드
$ cd ../
$ mkdir annotations && cd annotations
$ wget http://images.cocodataset.org/annotations/annotations_trainval2017.zip
$ wget http://images.cocodataset.org/annotations/stuff_annotations_trainval2017.zip
$ wget http://images.cocodataset.org/annotations/image_info_test2017.zip
$ wget http://images.cocodataset.org/annotations/image_info_unlabeled2017.zip

$ unzip annotations_trainval2017.zip
$ unzip stuff_annotations_trainval2017.zip
$ unzip image_info_test2017.zip
$ unzip image_info_unlabeled2017.zip

$ rm annotations_trainval2017.zip
$ rm stuff_annotations_trainval2017.zip
$ rm image_info_test2017.zip
$ rm image_info_unlabeled2017.zip