
해당 글은 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 pandaspython generate_tfrecord.py -x [PATH_TO_IMAGES_FOLDER]/train -l [PATH_TO_ANNOTATIONS_FOLDER]/label_map.pbtxt -o [PATH_TO_ANNOTATIONS_FOLDER]/train.recordpython generate_tfrecord.py -x [PATH_TO_IMAGES_FOLDER]/test -l [PATH_TO_ANNOTATIONS_FOLDER]/label_map.pbtxt -o [PATH_TO_ANNOTATIONS_FOLDER]/test.recordtraining_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 wgetwget http://download.tensorflow.org/models/object_detection/tf2/20200711/ssd_mobilenet_v2_320x320_coco17_tpu-8.tar.gztraining_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