본문 바로가기
A.I./구현

TensorFlow Lite 공식예제)꽃 인식 안드로이드 앱 -(1)

by 채소장사 2020. 5. 10.

참고) Recognize Flowers with TensorFlow Lite on Android

 

텐서플로라이트에서는 직접 모델을 생성하거나 훈련시킬 수 없다.

따라서 로컬에서 훈련시킨 텐서플로 모델을 텐서플로라이트 포맷으로 변환하여 사용한다.

 

위 예제에서는 꽃을 인식하기 위하여,

  1. 사전훈련된 MobileNetV2를 베이스 모델로 훈련
  2. 파인 튜닝(fine-tuning)을 적용하여 훈련

한 뒤에 텐서플로라이트 포맷으로 변환하는 Google Colab 노트북을 제공한다.

(flowers_tf_lite.ipynb)

코드에서 살펴볼만한 몇 가지 사항들은 아래와 같다.

케라스의 ImageDataGenerator를 이용해서 데이터를 전처리해준다.

이미지의 크기는 224 x 224로 리사이즈하고, 배치크기는 64로 한다.

훈련셋에서 20%를 검증셋으로 둔다.

분류하려는 꽃의 종류는 총 5가지이고,

레이블을 기록한 labels.txt 파일은 변환된 텐서플로라이트모델과 함께 복사되게 된다.

 

사전훈련모델로 선택한 MobileNetV2를 베이스모델로 불러온다. 

이미지넷과 달리 예제는 5개의 꽃만 분류할 것이므로, 분류기(classifier)에 해당하는 마지막 레이어 층은 불러오지 않는다. 

예제에서 구성한 모델은 위와 같다. 베이스모델은 훈련이 되지 않도록 동결(freezing)시킨 후, 추가적인 컨볼루션 레이어, 풀링 레이어를 거쳐서 크로스 엔트로피 오차함수를 사용하였다.

성능이 그렇게 좋지는 못하다. 하지만 어디까지나 모델의 성능향상이 목표가 아닌 안드로이드용 텐서플로모델 적용을 위한 예제여서 간단하게 파인 튜닝을 거친 후, 다음 단계로 넘어간다.

파인 튜닝을 위한 단계는 다음과 같다.

예제에서는 MobileNetV2에서 100번째 이후의 레이어들은 훈련데이터를 통해 학습되도록 하였다.

최종적으로 가장 중요한 부분이다. 훈련된 모델을 저장한 뒤 텐서플로라이트 컨버터를 이용해서 변환한다.

앞서 말한 labels.txt와 변환된 model.tflite 파일은 안드로이드 프로젝트에 복사되어야 한다.

댓글