Tensorflow2로 Custom Object Detecter 학습하기 2 - 학습

jwhan·2021년 1월 24일
0
post-thumbnail

섬네일 출처

해당 글은 Tensorflow 2 Object Detection API tutorial을 참고했습니다.

이전글 - Tensorflow2로 Custom Object Detecter 학습하기 1 - 설치


Training

Workspace 만들기

  • workspacetraining_demo폴더를 아래와 같이 만든다.
    본인 폴더명/
    ├─ addons/ (Optional)
    │ └─ labelImg/
    ├─ models/
    │ ├─ community/
    │ ├─ official/
    │ ├─ orbit/
    │ ├─ research/
    │ └─ ...
    └─ workspace/
    └─ training_demo/
  • training_demo 하위 폴더는 다음과 같다.
    training_demo/
    ├─ annotations/
    ├─ exported-models/
    ├─ images/
    │ ├─ test/
    │ └─ train/
    ├─ models/
    ├─ pre-trained-models/
    └─ README.md

각 폴더에 대한 자세한 설명을 알고싶다면 여기에서 확인 가능하다.

데이터셋에 주석 달기

LabelImg 설치

LabelImg는 이미지에 주석을 다는 도구다. 여러 가지 방법이 있지만 git clone을 이용했다.

  • addons 에서 git clone https://github.com/tzutalin/labelImg.git
    본인 폴더명/
    ├─ addons/
    │ └─ labelImg/
    └─ models/
    ├─ community/
    ├─ official/
    ├─ orbit/
    ├─ research/
    └─ ...

  • 아래 커맨드 실행

cd addons/labelImg/
conda install pyqt=5
pyrcc5 -o libs/resources.py resources.qrc

이미지 주석 달기

  • 이미지를 workspace/training_demo/images 폴더에 저장한다.

  • labelImg를 실행한다.
    python labelImg.py ../../workspace/training_demo/images

  • Create RectBox를 이용해서 라벨링 후 이미지에 맞는 label이름을 입력하고 OK 버튼 클릭. Save버튼을 눌러 .xml 파일을 저장하고 Next Image로 다음 이미지로 넘어가면 된다. (더 자세한 사용방법 보기)

  • 이미지 파일과 .xml파일을 train:test=9:1 비율로 training_demo/images/traintraining_demo/images/test에 저장

Label Map 만들기

  • training_demo/annotations/ 에서 .pbtxt파일 만든다.(예: label_map.pbtxt) 나는 go, stop, person 세 가지 label이 있으므로 아래와 같이 작성했다.
item {
    id: 1
    name: 'go'
}

item {
    id: 2
    name: 'stop'
}

item {
    id: 3
    name: 'person'
}

Create Tensorflow Records

앞에서 만든 *.xml 파일을 *.record로 변환하는 작업이 필요하다.

  • 본인작업폴더/scripts/preprocessing/ 에 이 script 저장 (출처)
  • pandas 패키지 설치
    conda install pandas 혹은 pip install pandas
  • Train data 만들기
    python generate_tfrecord.py -x [PATH_TO_IMAGES_FOLDER]/train -l [PATH_TO_ANNOTATIONS_FOLDER]/label_map.pbtxt -o [PATH_TO_ANNOTATIONS_FOLDER]/train.record
  • Test data 만들기
    python generate_tfrecord.py -x [PATH_TO_IMAGES_FOLDER]/test -l [PATH_TO_ANNOTATIONS_FOLDER]/label_map.pbtxt -o [PATH_TO_ANNOTATIONS_FOLDER]/test.record
  • 제대로 실행되었다면 training_demo/annotations/ 폴더에 train.recordtest.record가 저장된다.

Pre-Trained Model 다운로드

스크래치부터 작성하는 것은 시간이 많이 소요되기 때문에 Transfer Learning을 이용할 것이다. 또한 공식 튜토리얼에서는 SSD ResNet50 V1 FPN 640X640을 이용했지만, 나는 Tensorflow.js에서도 사용가능한 모델을 만드는 것이 목적이므로 SSD MobileNet v2 320x320을 사용하겠다.

  • 여기에서 사용하고자 하는 모델의 .tar.gz 파일을 training_demo/pre-trained-models/에 다운로드 후 압축해제
  • (Optional) 위 링크에서 다운로드가 안되는 경우, Anaconda를 이용하면 wget을 설치하여 사용 할 수 있다.
    conda install -c menpo wget
    설치후
    wget http://download.tensorflow.org/models/object_detection/tf2/20200711/ssd_mobilenet_v2_320x320_coco17_tpu-8.tar.gz
  • training_demo/models/ 하위에 새로운 폴더를 만들고(예: my_ssd_mobilenet_v2) pre-trained model 폴더 내의 pipeline.config 파일을 복사한다.

pipeline.config 수정

  • training_demo/models/에 복사한 pipeline.config 파일에서 본인에 맞게 수정해야 한다. 여기에 나와있는 것 처럼 노란색 부분들을 수정하면 된다.
  • 나는 num_classes: 3, batch_size: 5, fine_tune_checkpoint_type: "detection" 등을 수정했다.

Training the Model

드디어 학습할 준비가 됐다.

  • models/research/object_detection/model_main_tf2.py 파일을 training_demo/ 폴더로 복사한 후 아래 커맨드를 실행한다.
    python model_main_tf2.py --model_dir=models/my_ssd_mobilenet_v2 --pipeline_config_path=models/my_ssd_mobilenet_v2/pipeline.config

0개의 댓글