Android Developer

Tensorflow Lite for Android - Overview

졸려질려 2023. 1. 30. 13:41
반응형

 Tensorflow Lite 를 사용해야하는 상황이 와서, 이에 대한 기본적인 지식을 공부하기 위해 블로그에 기록하게 되었다. 아무것도 모르는 상태이기에 공식 문서의 Overview 문서를 번역하며 정독해보았다.


 Tensorflow Lite 는 Android 앱 안에서 Tensorflow Machine Learning 모델들을 실행할 수 있게 해준다. Tensorflow Lite 시스템은 Android 에서 ML 모델들을 빠르고 효율적으로 실행시킬 수 있는 실행 환경을 제공한다. 하드웨어 가속화 기능까지도 제공한다.


1. Machine Learning Models

 Tensorflow Lite 가 사용하는 Tensorflow Model 은 더 용량이 작아 옮기기 쉬우며, 더 효율적인 머신러닝(ML) 모델로 변환된 것이다. Tensorflow Lite 가 제공하는 이미 구축된 모델들을 사용할 수도 있고, 또는 자신만의 Tensorflow 모델을 구축하여 Tensorflow Lite 형식으로 변환 시킬 수도 있다.

Key Point: Tensorflow Lite Model 과 Tensorflow Model 은 다른 형식이고 서로 호환이 되지 않는다. Tensorflow Model 은 Tensorflow Lite Model 로 변환이 가능하나, 역변환은 할 수 없다.

 본 글에서는 기존에 구축된 ML Model 을 사용하는 방법에 대해 기술하며, Model 을 생성하거나, 학습하거나, 테스트하거나, 변환하는 방법에 대해서는 기술하지 않는다. Model 관련 정보는 Models 문서를 참고한다.


2. Run Models on Android

 Android 앱 내에서 실행되는 Tensorflow Model 은 데이터를 취합하고, 학습하여, 해당 Model 의 로직에 따라 예측값을 생성한다. Tensorflow Lite Model 은 동작하기 위해 특정 런타임 환경이 필요하며, Model 로 전달된 데이터는 "Tensor" 라 불리는 데이터 형식으로 변환된다. Model 이 데이터를 진행시키는 것을 "inference 를 실행한다" 라고 한다. inference 실행이 완료되면 예측 결과값을 새로운 Tensor 들로 생성하여, Android 앱으로 전달한다. 결과값을 가진 Tensor 들을 전달 받은 Android App 은 결과값을 그대로 사용자에게 보여주거나, 추가적인 비즈니스 로직을 실행하는 등 그에 맞는 액션을 취하게 된다.

출처: https://www.tensorflow.org/lite/android#run_models_on_android

 기능 디자인 단계에서, Android 앱은 Tensorflow Lite Model 을 실행하기 위해 다음 요소들이 필요하다.

  • Model 을 실행할 수 있는 Tensorflow Lite Runtime Environment
  • Tensor 로 데이터를 이동시킬 수 있는 Model Input Handler
  • 출력된 결과 Tensors 를 수신하고, 예측 결과값으로 해석하는 Model Output Handler

 이제 Tensorflow Lite 의 라이브러리와 툴들이 위 요소들을 어떻게 제공하는지에 대해 기술한다.


3. Build Apps with TensorFlow Lite

 이번 파트에서는 Android 앱에서 Tensorflow Lite 를 구현하는 권장되고, 가장 많이 사용되는 방법에 대해 기술한다. 아래에 소차례로 나누어 기술할 예정이며, 그 중에서 "Runtime Environment Options" 와 "Development Libraries" 의 내용들이 가장 중요하다. 만약, Tensorflow Model 을 커스텀하여 개발해보았다면, 다음 파트로 넘어가도 좋다.

3-1) Runtime Environment Options

 Android App 에서 Model 을 동작시킬 수 있는 런타임 환경을 구축하는 몇가지 방법이 존재한다.

 일반적으로, Google Play services 에서 제공하는 런타임 환경을 사용해야 한다. Goole Play services 는 앱 크기는 더 작게 유지하면서, Model 을 동적으로 로드하기 때문에 일반적인 환경보다 더 공간적으로 절약할 수 있기 때문이다. 또한, 가장 최근에 나온 안정적인 버전의 Tensorflow Lite Runtime 을 자동으로 사용할 수 있게 해주기 때문에, 시간이 지날수록 더 향상된 성능과 기능들을 받을 수 있다. 반면에, 앱을 Google Play services 가 포함되지 않은 기기에 설치했거나, ML 실행 환경을 관리하기에 더 좋은 곳에 설치했다면, 표준 TensorFlow Lite 를 사용하는 것이 좋다. 이 경우에는 앱에 ML 실행을 제어할 수 있는 추가적인 코드가 필요하기 때문에, 추후에 앱의 크기를 증가시킬 수도 있다.

 위의 런타임 환경들을 App 에서 접근하기 위해서는 App 개발 환경에 Tensorflow Lite 개발 라이브러리들을 추가해줘야한다. 이제 앱에서 표준 런타임 환경을 사용하는 방법에 대해 기술한다.


3-2) Development APIs and Libraries

 TensorFlow Lite ML Models 를 Android 앱에서 통합적으로 사용할 수 있는 방법은 2가지가 있다.

  1. TensorFlow Lite Task API (recommended)
  2. TensorFlow Lite Interpreter API

 Interpreter API 는 존재하는 TensorFlow Lite Model 로 Inference 를 실행할 수 있는 클래스와 메소드를 제공한다. Task API 는 Interpreter API 가 제공하는 부분을 포함하여, 비주얼, 오디오, 텍스트 데이터를 다루며 공통적인 머신러닝 활동을 행할 수 있는 더 높은 단계의 프로그래밍 인터페이스를 제공한다. 따라서, Task API 에서 원하는 부분의 기능을 제공하지 않는 한, Task API 를 사용하는 것이 좋다.

Libraries

 Task API 와 interpreter API 는 Google Play services 를 통해 접근할 수 있다. 또한, TensorFlow Lite Task 의 독립형 라이브러리들이나 TensorFLow Lite 의 Core 와 Support 라이브러리들을 안드로이드 앱에서 사용할 수 있다. TensorFlow Lite 라이브러리들과 런타임 환경에 대한 프로그래밍적 상세 설명은 다음 링크를 참고하면 된다.


3-3) Obtain Models

 안드로이드 앱에서 Model 을 실행하려면 당연히 TensorFlow Lite 형식의 Model 이 필요하다. TensorFlow Model 을 이미 있는 것으로 사용하거나, 새로 만들어서 사용하고 싶다면, TensorFlow Lite 로 형식 변환을 해줄 수 있다. 이에 대한 더 자세한 설명은 Models 문서에서 확인하면 된다.


3-4) Handle Input Data

 ML Model 로 전달하는 모든 데이터는 특정 데이터 구조를 가진 Tensor 이어야만 한다. 이를 Tensor 의 Shape 라 부른다. Model 을 통해 데이터를 처리하기 위해, 앱 코드는 이미지, 텍스트, 오디오와 같은 기존 형식의 데이터를 Model 에서 필요로 하는 Shape 로 변환하여 Tensor 로 처리해줘야한다. TensorFlow Lite Task library 는 비주얼, 텍스트, 오디오 데이터를 TensorFlow Lite Model 이 처리할 수 있는 올바른 Shape 의 Tensor 로 변환하는 로직을 제공한다.


3-5) Run Inferences

 위에서 언급했듯이, Model 을 통해 데이터를 처리하여 예측 결과값을 생성하는 것을 "Run Inference" 라고 한다. Android 앱에서 Run Inference 를 하기 위해 필요한 것은 TensorFlow Lite 런타임 환경, Model, 입력 데이터가 있다.

 특정 기기에서 Model 이 Inference 를 생성하는 속도는 작업한 데이터의 크기, Model 의 복잡성, 그리고 메모리, CPU(CPU 가속) 와 같은 컴퓨팅 환경에 따라 결정된다. ML Model 은 Delegates 라 불리는 TensorFlow Lite 하드웨어 드라이버를 사용하여 GPU 나 TPU(Tensorflow Processing Units) 와 같은 특정 프로세서에서 더 빠르게 실행할 수 있다. 이에 대한 자세한 정보는 다음 링크를 참고한다.


3-6) Handle Output Results

 Model 은 예측 결과값을 Tensor 로 생성하며, 앱은 이를 사용하여 특정 활동을 진행하거나, 사용자에게 결과값을 보여주게 된다. Model 출력 결과는 이미지 분류에 대한 단일 결과(0 = dog, 1 = cat, 2 = bird) 에 해당하는 숫자처럼 간단할 수 있으며, 하나에 여러 분류된 개체에 대한 박스 형태와 같이 훨씬 더 복잡한 결과로 출력될 수도 있다.


4. Advanced Development Paths

 더 정교하고 커스텀된 TensorFlow Lite Model 을 사용하고 싶다면, 위에서 기술한 것보다 더 깊은 개발 접근법이 필요하다. 아래의 섹션들은 Model 을 실행하는 더 발전된 기술들에 대해 기술한다.

4-1) Advanced Runtime Environments

 TensorFlow Lite 의 표준 런타임과 Google Play services 런타임 환경과 더불어, Android 앱에서 사용할 수 있는 런타임 환경이 더 존재한다. TensorFlow Lite 의 표준 런타임 환경에서 지원하지 않는 ML 동작을 사용하는 ML Model 을 사용해야 하는 상황에 적용할 수 있는 런타임 환경들이다.

  • Flex runtime for TensorFlow Lite
  • Custom-built TensorFlow Lite runtime

 TensorFlow Lite Flex Runtime 은 Model 에서 필요한 특정 동작들을 할 수 있게 해준다. Model 을 실행하는 데에 고급 옵션으로써, TensorFlow ML Model 을 실행 하는데 필요한 동작자들과 다른 기능들을 Android 에서 사용할 수 있는 TensorFlow Lite 로 구축할 수 있게 해준다. 더 자세한 사항은 다음 링크를 참고한다.


4-2) C and C++ APIs

 TensorFlow Lite 는 C, C++ 을 사용하여 Model 을 실행할 수 있는 API 도 제공한다. 만약 앱이 Android NDK 기반으로 실행된다면, TensorFlow Lite 의 C, C++ API 가 필요할 것이다. 그 외에도 다양한 플랫폼에서 코드를 공유하고 싶을 때 사용할 수 있다. 더 자세한 사항은 다음 링크를 참고한다.


4-3) Server-based Model Execution

 보통 더 적은 지연 시간과 사용자를 위한 향상된 데이터 정책의 이점을 챙기기 위해서 Android 기기 위에 동작하는 앱 내에서 Model 을 실행한다. 하지만, 기기를 떠나 클라우드 서버에서 Model 을 실행하는 것이 더 좋은 경우가 존재한다. 예를 들어, Model 의 크기가 너무 커서 압축을 하더라도 Android 기기에 용량이 맞지 않을 때, 혹은 해당 기기에서 합리적인 성능으로 실행할 수 있는 큰 모델이 있는 경우가 있다. 또한, 해당 접근법은 넓은 범위의 기기들을 통틀어 Model 의 성능을 일관적으로 동일하게 하고 싶을 때 선호되기도 한다.

 Google Cloud 는 TensorFlow ML Model 을 실행하기 위한 전체 서비스 제품군을 제공한다. 이에 대한 자세한 내용은 다음 링크를 참고한다.


4-4) Custom Model Development and Optimization

 마지막으로, 더 개선할 수 있는 개발 방법은 ML Model 을 커스텀하여 개발하고, Android 기기에서 사용하기 좋게 최적화를 하는 것이다. 만약 Custom Model 을 구축할 계획이라면, 메모리와 프로세싱 사용을 줄여주는 Quantization Technique 적용을 고려 해볼만 하다. 이에 대한 자세한 내용은 다음 링크를 참고한다.

반응형