이전에 탐지할 객체가 담긴 이미지를 라벨링하고, 학습을 진행했었다.
이제 학습 결과를 바탕으로 모델을 추출하고, 실제 detection까지 진행해보자
모델 추출(Export)
학습을 시작했을때 결과물들이 저장될 경로인 model_dir을 실행인자로 넣어주었다.
학습이 진행됨에 따라 해당 경로에 ckpt라는 파일이 점차 쌓이는데, 이를 체크포인트(checkpoint)라고 한다.
체크포인트는 Tensorflow를 통해 학습된 모델의 구조를 제외한 변수(가중치)만을 담고있는 파일이다.
그렇기 때문에 체크포인트를 바탕으로 재학습이 가능하고, 파일 크기가 크다는 특징이 있다.
이러한 체크포인트는 크기가 커 공유하거나 Tensorflow Serving과 같은 다른 환경으로 배포하기가 힘들다.
즉, 체크포인트를 모델로 변환하는 과정이 필요하다.
Checkpoint → Saved_model
python exporter_main_v2.py --input_type=image_tensor \
--trained_checkpoint_dir=[학습 결과물들이 저장될 경로] \
--output_directory=[결과 model이 저장될 경로] \
--pipeline_config_path=[pipeline.config의 경로]
exporter_main_v2.py는 models > research > object_detection경로에 존재한다.
위와 같이 4개의 파라미터값을 넣어줘야하고 내용은 아래와 같다.
- input_type : 모델 생성시 input값의 타입을 지정해주는 파라미터, image_tensor/encoded_image_string_tensor/tf_example/float_image_tensor 중 하나를 넣는데, 우리가 학습한 모델에서는 image_tensor를 사용했다.
- trained_checkpoint_dir : 학습된 checkpoint 파일들이 위치하고 있는 경로
- output_directory : 추출한 모델이 저장될 경로
- pipeline_config_path : 모델 학습시 사용했던 pipeline.config 파일의 경로
추출이 완료되면 output_directory에 saved_model 디렉토리가 다음과 같은 구조로 파일들이 생성된다.
생성된 saved_model.pb 파일이 추출된 모델파일이다.
객체 추론(detection)
추출된 모델(saved_model.pb)을 바탕으로 이미지에 대해 객체를 추론해보자
예시 코드는 colab_tutorials의 object_detection_tutorial.ipynb에 존재한다.
PATH_TO_LABELS를 라벨맵의 경로로 수정, PATH_TO_TEST_IMAGES_DIR를 실제 detection에 사용할 이미지 경로로 수정
detection_model의 경로를 학습하고 모델로 export한 경로(exported_model) 수정
이후의 코드를 쭉 실행하면 결과를 볼 수 있다.
해당 부분들만 뽑아와서 학습한 모델기반의 detection 코드를 작성할 수 있다.