들어가며

지난 시간까지 데이터를 수집하고 Tensorflow Lite 모델을 만드는 과정까지 진행해보았다. 이번에는 이 모델 파일을 Android에 삽입해서 실제 구동까지 진행해보도록 하겠다.

TFlite 모델에 메타데이터 추가하기

이 부분 때문에 필자는 몇 시간동안 삽질을 했다. 이전 장에서 만든 .tflite 파일을 그대로 안드로이드에 사용하게 되면 에러가 발생한다:(. 구글링을 하고 stack overflow에 업로드하는 등 여러 노력을 통해서 솔루션을 찾아냈다. 에러의 내용은 tflite모델에 NormalizationOptions이 추가되어 있어야 한다는 뜻이었다. 이는 메타 데이터의 일종인데 이를 삽입하기 위해선 추가적인 작업이 필요했다.

addMetaData.ipynb
0.01MB

위 코드를 사용하면 필요한 메타 데이터를 추가 할 수 있다. 코드를 보면 아래의 부분을 볼 수 있는데 여기에 자신이 메타데이터를 추가할 tflite 파일과 label.txt의 경로를 지정한 후 그대로 실행시켜주면 된다.

Android Studio Demo APP에 삽입하기

자 이제 마지막 단계이다. github.com/tensorflow/examples/tree/master/lite/examples/object_detection/android이 링크에 들어가게 되면 Android에서 Object Detection 모델을 실행할 수 있는 코드를 다운로드할 수 있다. Readme의 지침을 잘 따라서 모델을 Asset 디렉터리에 삽입하게 되면 비로소 모델을 실행시킬 수 있을 것이다.

 

마무리

예전 코드를 참조해서 그런지 필자는 중간에 여러번 에러가 발생해서 굉장히 힘들었다... 이 글을 본 사람들은 부디 필자처럼 삽질을 하지 않았으면 좋겠다. ㅎㅎ 지금까지 안드로이드에서 동작하는 Object Detection 애플리케이션을 만드는 과정이었다.

Reference

1. www.tensorflow.org/lite/convert/metadata

 

TensorFlow Lite 모델에 메타 데이터 추가

TensorFlow Lite 메타 데이터는 모델 설명에 대한 표준을 제공합니다. 메타 데이터는 모델이 수행하는 작업과 입력 / 출력 정보에 대한 중요한 지식 소스입니다. 메타 데이터는 TensorFlow Lite 호스팅 모

www.tensorflow.org

2. github.com/tensorflow/examples/tree/master/lite/examples/object_detection/android

 

tensorflow/examples

TensorFlow examples. Contribute to tensorflow/examples development by creating an account on GitHub.

github.com

 

들어가며

지난 시간에는 roboflow를 사용해서 데이터를 업로드하여 처리하는 방법에 대해서 알아보았다. 이번에는 데이터와 Tensorflow 프레임워크를 사용해서 모델을 만들어보도록 하겠다. 추가적으로 컨버터를 사용해서 Tensorflow Lite 모델까지 변환하는 방법에 대해서 알아보도록 하겠다. (이 장에서는 필수적으로 수정해야 할 부분에 대해서만 언급하겠다. 코드에 대해서 자세히 알고 싶다면 Colab내부의 주석을 참고하도록 하자)

데이터 다운로드

colab.research.google.com/drive/1aIobwtqWggRbLbe606_WzVGtFiWZT9tr?usp=sharing

 

Roboflow-TFLite-Object-Detection_Bicycle_Helmet.ipynb

Colaboratory notebook

colab.research.google.com

위 링크는 모델을 학습시키고 Tensorflow Lite 모델로 변환하기 위한 모든 코드가 포함되어있다. 

Prepare Data부분에서 위와 같은 코드를 찾을 수 있을 것이다. 여기에 이전 장에서 진행했던 Roboflow 데이터셋의 링크를 삽입해야 한다. Roboflow 튜토리얼을 잘 따랐다면 대시보드에 자신이 만든 버전이 있는 것을 확인할 수 있을 것이다. 

여기에서 Export Your Dataset부분에서 포맷을 정하고 링크를 받을 수 있는 부분이 있을 것이다.

우선 COCO포맷을 정한다음 GetLink를 클릭하게 되면 Jupyter탭에서 아래와 같은 부분이 나올 것이다.

 !curl -L "링크" > roboflow.zip; unzip roboflow.zip; rm roboflow.zip

자신의 링크를 복사하여 colab에 [COCO Json Link Here!]라고 표시된 부분에 복사하도록 하자.

그리고 이번에는 Format을 Tensorflow TFRecord로 변경하여 위 과정을 반복한 후 [Tensorflow TFRecord Link Here!]라고 표시된 부분에 링크를 삽입하도록 한다. 이렇게 하면 데이터를 다운로드할 수 있다.

파일 이름 수정

Prepare tfrecord file 세션 아래의 코드를 보면 다음과 같은 코드가 있을 것이다.

각 roboflow에서 다운로드한 파일의 이름은 데이터셋에 따라서 다르기 때문에 여기에 자신이 설명한 데이터셋 이름을 업데이트해주어야 한다. colab 내부에 해당 경로를 따라가서 자신의 파일이 어떤 이름으로 정해져 있는지 확인 후 업데이트하도록 하자.

마무리

특별한 에로사항이 없다면 위에서 언급한 코드만 바꾸어 주어도 자동으로 모델을 학습하고 Tensorflow Lite로 모델을 변경한 다음 자신의 드라이브에 모델을 업데이트할 것이다. 만약 어떤 에러가 발생한다면 github.com/BEOKS/Bicycle-Helmet-Wearing-Detection 여기에 issue를 써준다면 수정하도록 하겠다.

Reference

1. How to Train a Custom TensorFlow Lite Object Detection Model, https://blog.roboflow.com/how-to-train-a-tensorflow-lite-object-detection-model/

 

How to Train a Custom TensorFlow Lite Object Detection Model

In this post, we walk through the steps to train and export a custom TensorFlow Lite object detection model with your own object detection dataset to detect your own custom objects. If you need a fast model on lower-end hardware, this post is for you. Whet

blog.roboflow.com

2. MobileNet SSD, https://github.com/tensorflow/models/tree/master/research/object_detection

 

tensorflow/models

Models and examples built with TensorFlow. Contribute to tensorflow/models development by creating an account on GitHub.

github.com

 

들어가며

최근에 어떤 프로젝트를 진행하게 되면서 안전모를 착용했는지 확인하기 위한 모바일용 머신러닝 모델이 필요하게 되었다. 3일이라는 짧은 시간 안에 프로토타입을 만들게 되었는데, 진행하면서 알게 된 에러 사항에 대해서 공유하기 위해서 이 글을 작성하니 모바일용 객체 탐지 모델을 만드는 사람들이 참고해서 쉽게 사용했으면 좋겠다.

혹시 결과물이 바로 보고 싶은 사람은 아래의 링크를 참고하란다.

github.com/BEOKS/Bicycle-Helmet-Wearing-Detection

 

BEOKS/Bicycle-Helmet-Wearing-Detection

Tensorflow lite model that detects bicycle helmet wearing and Android demo application - BEOKS/Bicycle-Helmet-Wearing-Detection

github.com

데이터 수집

모든 머신러닝 모델의 시작은 데이터를 확보하는 것이다. Kaggle에서 사용가능한 데이터들이 있는데 나는 이를 참고하였다. 참고로 라이선스가 전부 다르기 때문에 주의하기 바란다. 만약 이미 데이터가 확보되어있다면 이 과정을 넘겨도 된다.

www.kaggle.com/brendan45774/bike-helmets-detection

 

Bike Helmets Detection

764 images in 2 classes

www.kaggle.com

데이터 처리

전처리 프레임워크

머신러닝 모델이 잘 학습 할 수 있도록 데이터를 처리를 해야 한다. 데이터에 따라 몇 가지가 있지만 프로토타입 제작이므로 잘못된 정보가 있는지만 확인하도록 하겠다.

roboflow.com/

 

Roboflow: Everything you need to start building computer vision into your applications

Even if you're not a machine learning expert, you can use Roboflow train a custom, state-of-the-art computer vision model on your own data. Let us show you how.

roboflow.com

위 사이트는 확보한 데이터를 업로드하여 이미지를 육안으로 확인하거나 모델 향상을 위해서 Augmentation 시킬 수 있는 사이트이다. 만약 이미지 보안이 별로 중요하지 않다면 이를 활용하면 좋다. 업로드 및 활용과정은 처음 사이트를 이용할 경우 튜토리얼이 진행되니 순서만 따라간다면 어렵지 않게 사용할 수 있다.

데이터 확인

데이터를 입력하고 나면 위처럼 대시보드가 나오게된다. 여기서 이미지를 클릭하여 어노테이션이 잘 되어있는지 확인할 수 있다. 만약 어노테이션이 되어있지 않은 이미지가 있다면 쉽게 어노테이션을 추가할 수 있다.

데이터 전처리

대시보드 아래에 보면 Preprocessing Option을 볼 수 있다. 여기선 Crop, GrayScale, Tile 등의 전처리를 UI로 손쉽게 다룰 수 있다. (일부 기능은 유료버전에서만 사용 가능한데 돈내기는 싫으니 사이킷런의 전처리 라이브러리를 사용해서 코드에서 진행 후 다시 업로드하도록 하자)

Augmentation

Augmentation은 머신러닝 모델의 정확도 향상을 위해서 데이터를 증식시키는 것을 의미한다. 이 또한 대시보드에서 Augmentation Option을 선택하여 진행 할 수 있다. 여기도 몇 가지 기능은 유료버전에서만 사용 가능하다. 그러니 Albumentation(아래 링크 참고)을 사용해서 코드상에서 구현하도록 하자. 이 라이브러리가 roboflow보다 더욱 다양한 기능을 제공한다.

 github.com/albumentations-team/albumentations

 

albumentations-team/albumentations

Fast image augmentation library and easy to use wrapper around other libraries. Documentation: https://albumentations.ai/docs/ Paper about library: https://www.mdpi.com/2078-2489/11/2/125 - albume...

github.com

마무리

데이터와 모델의 목적에 따라서 위에서 언급한 것들 이외의 전처리 과정이 더 필요할 것이다. 기존의 솔루션을 잘 분석해서 어떻게 데이터를 처리할지 결정하고 이를 추가적으로 작업하여 데이터셋을 완성하자. 다음 장에서는 이 데이터셋을 가지고 tensorflow 프레임 워크를 사용하여 SSD MobileNetv2 모델을 만든 다음 이를 Tensorflwo Lite 모델로 컨버팅 하는 방법에 대해서 알아보자

 

Reference

  1. How to Train a Custom TensorFlow Lite Object Detection Model, https://blog.roboflow.com/how-to-train-a-tensorflow-lite-object-detection-model/
 

How to Train a Custom TensorFlow Lite Object Detection Model

In this post, we walk through the steps to train and export a custom TensorFlow Lite object detection model with your own object detection dataset to detect your own custom objects. If you need a fast model on lower-end hardware, this post is for you. Whet

blog.roboflow.com

+ Recent posts