yongyong-e

[Tensorflow Object Detection API] Training a pet detector 본문

머신러닝/Tensorflow - Models

[Tensorflow Object Detection API] Training a pet detector

Yonghan Kim 2017. 8. 3. 12:20

summary

Google Cloud ML을 사용하여 data traing 및 pet detection하는 방법에 대해 진행


▶ Setting up a Project on Google Cloud

1. Create a GCP project

참고 : https://cloud.google.com/resource-manager/docs/creating-managing-projects


2. Install the Google Cloud SDK

① 환경변수 설정

export CLOUD_SDK_REPO="cloud-sdk-$(lsb_release -c -s)"

② Cloud SDK 배포 URI를 패키지 소스로 추가

echo "deb http://packages.cloud.google.com/apt $CLOUD_SDK_REPO main" | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list

③ Google Cloud 공개 키 가져오기

curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -

④ Cloud SDK 업데이트및 설치

sudo apt-get update && sudo apt-get install google-cloud-sdk

다음 추가 구성 요소 중 하나를 선택하여 설치

      • google-cloud-sdk-app-engine-python
      • google-cloud-sdk-app-engine-java
      • google-cloud-sdk-app-engine-go
      • google-cloud-sdk-datalab
      • google-cloud-sdk-datastore-emulator
      • google-cloud-sdk-pubsub-emulator
      • google-cloud-sdk-cbt
      • google-cloud-sdk-bigtable-emulator
      • kubectl


예를 들어 google-cloud-sdk-app-engine-python는 다음과 같음

sudo apt-get install google-cloud-sdk-app-engine-python

⑤ Run

gcloud init


3. Enable the ML Engine APIs


4. Set up a Google Cloud Storage (GCS) bucket

① Cloud Storage 브라우저 열기

https://console.cloud.google.com/storage/browser


② 버킷 요구사항 설정


③ 환경변수 설정

export YOUR_GCS_BUCKET=버킷이름


④ 환경변수 확인

echo $YOUR_GCS_BUCKET


▶ Installing Tensorflow and the Tensorflow Object Detection API

참고 :  2017/07/28 - [머신러닝/Tensorflow] - (Tensorflow Object Detection API) How to install


Getting the Oxford-IIIT Pets Dataset and Uploading it to GCS

http://www.robots.ox.ac.uk/~vgg/data/pets/


1. images.tar.gz & annotations.tar.gz 다운로드 및 압축 풀기

# models/

wget http://www.robots.ox.ac.uk/~vgg/data/pets/data/images.tar.gz wget http://www.robots.ox.ac.uk/~vgg/data/pets/data/annotations.tar.gz tar -xvf images.tar.gz tar -xvf annotations.tar.gz


2. Tensorflow Object Detection API는 TFRecord 형식의 데이터를 필요로하므로 TFRecords로 변환 하는 스크립트를 실행

# models/

python object_detection/create_pet_tf_record.py \ --label_map_path=object_detection/data/pet_label_map.pbtxt \ --data_dir=`pwd` \ --output_dir=`pwd`


스크립트를 실행 후 몇 가지 표시되는 경고는 무시


*** 다음과 같은 오류 발생 시 ***


Protobuf 컴파일 & 환경변수 설정 :

# models/

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

export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim


이후 스크립트 실행을 하면 다음과 같이 models 디렉토리에 pet_train.record & pet_val.record 파일이 설치 됨


3. 데이터가 생성되었으므로 ML 엔진에서 데이터에 접근 할 수 있도록 다음과 같이 GCS 버킷에 데이터를 업로드

# models/

gsutil cp pet_train.record gs://${YOUR_GCS_BUCKET}/data/pet_train.record gsutil cp pet_val.record gs://${YOUR_GCS_BUCKET}/data/pet_val.record gsutil cp object_detection/data/pet_label_map.pbtxt gs://${YOUR_GCS_BUCKET}/data/pet_label_map.pbtxt


▶ Downloading a COCO-pretrained Model for Transfer Learning

여러 GPU를 사용하는 경우에도 object detection의 state를 처음부터 training하는 것은 오래 걸릴 수 있음

따라서 사전 training된 모델을 다운로드 하여 사용


1. faster_rcnn_resnet101_coco_11_06_2017.tar.gz 다운로드 및 압축 풀기

wget http://storage.googleapis.com/download.tensorflow.org/models/object_detection/faster_rcnn_resnet101_coco_11_06_2017.tar.gz tar -xvf faster_rcnn_resnet101_coco_11_06_2017.tar.gz


2. model.ckpt.* 파일을 GCS 버킷에 복사

gsutil cp faster_rcnn_resnet101_coco_11_06_2017/model.ckpt.* gs://${YOUR_GCS_BUCKET}/data/


▶ Configuring the Object Detection Pipeline

Tensorflow Object Detection API에서 모델 매개 변수, 학습 매개 변수 및 평가 매개 변수는 모두 구성 파일에 의해 정의됨


자세한 내용은 다음을 참고


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


이 자습서에서는 object_detection/samples/configs폴더에서 소스코드와 함께 미리 정의 된 템플릿을 사용  


PATH_TO_BE_CONFIGURED 설정 및 편집 한 템플릿 GCS 버킷으로 복사 :

# models/

sed -i "s|PATH_TO_BE_CONFIGURED|"gs://${YOUR_GCS_BUCKET}"/data|g" \ object_detection/samples/configs/faster_rcnn_resnet101_pets.config

gsutil cp object_detection/samples/configs/faster_rcnn_resnet101_pets.config \ gs://${YOUR_GCS_BUCKET}/data/faster_rcnn_resnet101_pets.config


▶ Checking Your Google Cloud Storage Bucket

다음과 같이 파일들이 버킷에 포함되어있어야 함


▶ Starting Training and Evaluation Jobs on Google Cloud ML Engine

Google Cloud ML 엔진에서 작업을 시작하려면 다음을 수행


1. Tensorflow 개체 검색 코드를 패키지화

# models/

python setup.py sdist (cd slim && python setup.py sdist)


이후 다음과 같이 파일이 존재



2. Google Cloud ML 작업을 위한 클러스터 구성

구성 파일은 object_detection/samples/cloud/cloud.yml 에서 찾을 수 있음

To start training :

# models/

gcloud ml-engine jobs submit training `whoami`_object_detection_`date +%s` \ --job-dir=gs://${YOUR_GCS_BUCKET}/train \ --packages dist/object_detection-0.1.tar.gz,slim/dist/slim-0.1.tar.gz \ --module-name object_detection.train \ --region us-central1 \ --config object_detection/samples/cloud/cloud.yml \ -- \ --train_dir=gs://${YOUR_GCS_BUCKET}/train \ --pipeline_config_path=gs://${YOUR_GCS_BUCKET}/data/faster_rcnn_resnet101_pets.config


Once training has started, we can run an evaluation concurrently :

# models/

gcloud ml-engine jobs submit training `whoami`_object_detection_eval_`date +%s` \ --job-dir=gs://${YOUR_GCS_BUCKET}/train \ --packages dist/object_detection-0.1.tar.gz,slim/dist/slim-0.1.tar.gz \ --module-name object_detection.eval \ --region us-central1 \ --scale-tier BASIC_GPU \ -- \ --checkpoint_dir=gs://${YOUR_GCS_BUCKET}/train \ --eval_dir=gs://${YOUR_GCS_BUCKET}/eval \ --pipeline_config_path=gs://${YOUR_GCS_BUCKET}/data/faster_rcnn_resnet101_pets.config


Training


View Logs


▶ Monitoring Progress with Tensorboard

① GCS 버킷에 엑세스 할 수 있도록 실행 :

gcloud auth application-default login


② 로컬 컴퓨터에서 Tensorboard를 실행하여 Training 및 eval 작업 진행 상황 모니터링 :

tensorboard --logdir=gs://${YOUR_GCS_BUCKET}


③ ML엔진 작업 시작 후 30분 정도가 지나면 텐서보드에서 기록을 확인 할 수 있음


*** 어느 정도 loss값이 수렴하게 되면 구글 클라우드 ML 작업을 중지 ( 요금 절약 ) ***


▶ Exporting the Tensorflow Graph

① GCS 브라우저에서 버킷을 검색

    • model.ckpt-${CHECKPOINT_NUMBER}.data-00000-of-00001
    • model.ckpt-${CHECKPOINT_NUMBER}.index
    • model.ckpt-${CHECKPOINT_NUMBER}.meta

위의 파일에서 CHECKPOINT_NUMBER 확인 후


② 환경변수 설정

export CHECKPOINT_NUMBER=${CHECKPOINT_NUMBER}


③ 다음 명령어 실행

# models/

gsutil cp gs://${YOUR_GCS_BUCKET}/train/model.ckpt-${CHECKPOINT_NUMBER}.* . python object_detection/export_inference_graph.py \ --input_type image_tensor \ --pipeline_config_path object_detection/samples/configs/faster_rcnn_resnet101_pets.config \ --checkpoint_path model.ckpt-${CHECKPOINT_NUMBER} \ --inference_graph_path output_inference_graph.pb


output_inference_graph.pb 확인


Reference

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


Comments