본문 바로가기
컴퓨터 사이언스/딥러닝

[딥러닝 뉴비의 좌충우돌 일기] Tensorflow Object Detection API로 동물의 행동 분류하기 - 본론 1 : 컴퓨터 환경 세팅과 API 사용방법, 프로젝트 Overview

by 제크와 죠세핀 2020. 6. 3.
반응형

연관된 포스트 : 서론을 보고 오십시오.

컴퓨터 환경 세팅

TOD API 를 쓰기 위해서 먼저 컴퓨터 환경 세팅을 해야한다. API를 쓸 때 코드를 내가 안 짜는 것이지 API 내부적으로는 딥러닝 모델을 돌리는 것이기 때문에 기본적인 딥러닝 컴퓨터 환경 세팅을 진행해주면 된다.

- Python, CuDNN, CUDA, Tensorflow 설치하기 : GPU 모델에 호환되는 cudnn, cuda 버전을 구글링해서 확인하고 깔기

환경 세팅과 관련해서는 내가 포스팅을 아직 덜 했으니 다음의 블로그(1, 2)들 참고해서 깔길 추천한다.

- 그 당시 학교 서버 컴퓨터에 내가 깔았던 버전들 공유(OS는 Windows 10)

python : 3.7.3

cuda : release 10.1, V10.1.168

cudnn : 7.6.3

tensorflow-gpu 1.13.1

사실 API를 쓸 때(2019.7) 그 당시에 최신 tensorflow-gpu 버전이랑 호환이 안되서 downgrade해서 설치했었다. 이 환경에서 실행을 하면 매번 코드를 실행할 때마다 텐서플로우 버전 때문에 곧 deprecated 된다며 경고가 엄청 많이 뜨는데 일단 돌아는 간다.

 

Tensorflow Object Detection API 설치와 기본적인 사용방법

사실 내가 API 쓰는 기본적인 방법 자체를 설명하기엔 너무 좋은 자료가 있어서 그냥 이 부분은 링크로 대체한다.

- 설치 방법(Windows)

- API 깃허브 주소에서 API 다운받기

- API 사용 방법과 관련한 아주 좋은 자료(사실 나도 이거에서 변형해서 씀)

ENG KOR

step-by-step으로 설명되어 있어서 따라하기만 해도 아주 쉽게 할 수 있다. 어떤 친절하신 분이 한국어로 번역해서 똑같이 따라하기 쉽게 포스팅 해두셨다. 영어버전에서 사용한 코드는 여기서 확인하면 된다.

 

Project Overview

영상에서 동물을 detection하고 추가로 그 행동을 분류하는 task를 수행하기 위해  다음의 과정을 진행했다.

1) Train / Test 이미지를 나눈 후 LabelImglabeling하기

2) Annotation .xml 파일을 tfrecord 파일로 변환하기

generate_tfrecord.py 파일의 class_text_to_int() 함수를 사용하는 클래스에 맞게 수정하기

 

3) pre-trained model 준비 : 기존에 pre-trained model의 압축파일과 해당 모델의 config 파일 다운로드

(1) tar.gz로 압축된 모델은 압축풀기 : pre-trained weightgraph가 저장되어 있음

(2) 모델의 config 파일은 다운로드 받은 후 수정

필수적으로 수정해야 할 것 : num_classes, label_map_path, input data, output data path, fine_tune checkpoint 수정

** config 파일에는 학습 과정과 관련한 정보가 모두 들어가 있다. 크게 model, train_config, train_input_reader, eval_config, eval_input_reader로 이루어져 있는데 여기에서 필수적으로 수정해야하는 것 외에 learning rate, optimizer, step size, image resize 비율, augmentation 방법, 그 외 모델 정보 등 다양한 것을 수정할 수 있다.

** API에서는 한 번 batch 돈 것을 하나의 step으로 정의하며, 여기에 step size를 곱한 후 전체 이미지 개수로 나누면 epoch 수를 구할 수 있다.(ex) 전체 500개 이미지, batch size 5, step size 20000이라면 5*20000/500 = total 200 epochs)

** faster_rcnn_inception_v2_pets.configdefault batch size1인데, 이를 다른 값으로 수정 시 에러가 발생한다. 이는 config 파일 내의 keep_aspect_ratio_resizer에서 이미지 사이즈를 dynamic하게 설정하기 때문에 batching이 되지 않는다. batch size를 수정하려 한다면 config 파일에서 keep_aspect_ratio_resizer 대신 fixed_shape_resizer를 사용하면 된다.

 

4) 3)에서 label_map_path에 입력한 파일(object-detection.pbtxt)을 열어 label을 필요한 클래스로 수정

5) Train 코드 실행(legacy/train.py)

6) 학습한 모델 inference graph 생성

7) Evaluation 코드 실행(legacy/eval.py), detection 결과 visualization하기(test.py)

 

 

반응형

댓글