해당 글은 Tensorflow 2 Object Detection API tutorial을 참고했습니다.
이전글 - Tensorflow2로 Custom Object Detecter 학습하기 1 - 설치
workspace
와 training_demo
폴더를 아래와 같이 만든다.training_demo
하위 폴더는 다음과 같다.각 폴더에 대한 자세한 설명을 알고싶다면 여기에서 확인 가능하다.
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/train
와 training_demo/images/test
에 저장
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'
}
앞에서 만든 *.xml
파일을 *.record
로 변환하는 작업이 필요하다.
본인작업폴더/scripts/preprocessing/
에 이 script 저장 (출처)pandas
패키지 설치conda install pandas
혹은 pip install pandas
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
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.record
와 test.record
가 저장된다.스크래치부터 작성하는 것은 시간이 많이 소요되기 때문에 Transfer Learning을 이용할 것이다. 또한 공식 튜토리얼에서는 SSD ResNet50 V1 FPN 640X640
을 이용했지만, 나는 Tensorflow.js에서도 사용가능한 모델을 만드는 것이 목적이므로 SSD MobileNet v2 320x320
을 사용하겠다.
.tar.gz
파일을 training_demo/pre-trained-models/
에 다운로드 후 압축해제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
파일을 복사한다.training_demo/models/
에 복사한 pipeline.config
파일에서 본인에 맞게 수정해야 한다. 여기에 나와있는 것 처럼 노란색 부분들을 수정하면 된다.num_classes: 3
, batch_size: 5
, fine_tune_checkpoint_type: "detection"
등을 수정했다.드디어 학습할 준비가 됐다.
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