본문 바로가기

Back/Deep Learning

[Tensorflow] Tensorflowlite를 이용한 Image classification model maker

다른 게시물들을 통해 딥러닝 모델들을 저장하는 방법에대해 알아보았습니다. 

2020/09/23 - [Python/Deep Learning] - [Keras] 모델 저장하기

2020/09/24 - [Python/Deep Learning] - [Keras] 모델 불러오기

저장된 모델들은 각종 load기능을 이용하여 불러와 사용할 수 있습니다. 하지만 일반 모델을 모바일 기기에서 사용하기엔 지나치게 용량이커 불러오거나, 예측함에 있어서 성능이 떨어지게 됩니다. 

이를 극복하기 위해서 기존의 모델을 모바일용으로 바꾸어서 구성하거나, mobilenet처럼 처음부터 모바일환경에 사용하기 위해 가볍게 만들기도 합니다.

안드로이드에선 이러한 모델들을 tflite형식으로 넣어서 사용할수 있게 API를 제공하며, tensorflow는 이러한 모델을 만들기위한 tool을 제공합니다.

 


TensorFlow Lite Model Maker

 

이하 과정은 다음의 주소를 따라가면 보다 쉽게 실행해볼 수 있습니다.

 

pip install tflite-model-maker

conda prompt를 통해 설치 합니다.

 

import tensorflow as tf
assert tf.__version__.startswith('2')
from tensorflow_examples.lite.model_maker.core.data_util.image_dataloader import ImageClassifierDataLoader
from tensorflow_examples.lite.model_maker.core.task import image_classifier

 

tensorflow와 필요한 함수들을 불러옵니다. tensorflow 버전이 2.0이상이어야 합니다.

data = ImageClassifierDataLoader.from_folder(image_path)
train_data, test_data = data.split(0.9)
model = image_classifier.create(train_data)

위의 세줄만으로 학습모델을 생성할수 있습니다. 

  • ImageClassifierDataLoader.from_folder(image_path) : 학습을 위한 이미지를 폴더째 불러옵니다.
  • data.split() : 불러온 이미지들을 나눕니다. 
  • image_classifier.creat() : 이미지를 입력받아 모델을 생성합니다. 모델은 default로 efficientnet_lite0로 정해져있으며  다른 모델을 사용하려면 model_spec을 통해 모델을 입력하여 줍니다.

 

pycharm 기준으로 Ctrl + click을 통해 함수가 씌여진 py파일에 들어갈수 있고 안쪽에서 model_spec을 포함한 각종 설정값들을 확인할수 있습니다. 또다시 안쪽으로 들어가 사용할수 있는 모델들을 보면 다음과 같습니다.

  • mobilenet_v2_spec 
  • resnet_50_spec 
  • efficientnet_lite0_spec 
  • efficientnet_lite1_spec 
  • efficientnet_lite2_spec 
  • efficientnet_lite3_spec 
  • efficientnet_lite4_spec 

 

loss, accuracy = model.evaluate(test_data)

model.export(export_dir='./exaple', with_metadata=False)

 생성된 모델은 evaluate를 할수있고 model.export를 통해 .tflite 파일과 label.txt 파일을 저장합니다.

 

 

저장된 모델은 다음 링크의 순서대로 예제 애플리케이션을 만들어볼 수 있습니다.

codelabs.developers.google.com/codelabs/recognize-flowers-with-tensorflow-on-android/#0

 

Recognize Flowers with TensorFlow Lite on Android

Our TensorFlow Lite interpreter is set up, so let's write code to recognize some flowers in the input image. Instead of writing many lines of code to handle images using ByteBuffers, TensorFlow Lite provides a convenient TensorFlow Lite Support Library to

codelabs.developers.google.com