티스토리 뷰

Study/EmbeddedSystem

[Embedded][DL] Tensorflow Lite - Introduction

생각많은 소심남 2019. 11. 15. 00:30

 보통 Deep Learning을 생각하면, 엄청 복잡한 모델, 예를 들면 Image Classification을 할 때 CNN으로 구성한다던지, 뭔가 예측을 할때 LSTM같은 특정 기능을 하는 모델을 생각할 것이다. 이런 것들을 실제 폰이나 전자 제품에 올라가있는 Microcontroller 같은데에서도 동작할까? 기본적으로 Deep Learning 모델을 학습시키는 PC를 생각하면, 일반적으로 x86 cpu를 쓰고 별도로 GPU같은 가속기를 달기도 하며, 모델을 읽어오거나 저장할 공간이 충분하고, Windows나 Linux같은 OS가 올라가 있겠지만, 폰에는 ARM cpu가 들어있고, PC에 비해서는 상대적으로 저성능이고, 심지어 Microcontroller에는 OS도 없는 환경이 대부분일 것이다. 이럴 경우에는 학습 모델을 inference로 사용하는데 있어, system이 제공하는 memory나 power, 저장공간도 제한적이기 때문에 이 부분을 고려해야 할 것이다. 

 보통 이런 제한된 환경에서 deploy시킬 모델을 얼마나 최적화할 수 있느냐가 관건이 된다. Tensorflow Lite는 이부분에서 강점을 두고 기존 Tensorflow에서 학습시킨 모델을 embedded 환경이나 모바일 환경에서 돌릴 수 있도록 최적화시켜준다. 일단 홈페이지에서 제공하는 주요 기능은 다음과 같다.

  • on-device ML에 맞는 inference 기능 제공 (on-device application에 맞게끔 최적화시켜주고, 모델 binary size도 작게 만들어줌)
  • Android, iOS, embedded Linux, microcontroller에서도 inference를 가속시켜주기 위한 API들을 제공함
  • JAVA, Swift, Objective-C, C++, Python 등 다양한 개발 언어 지원
  • 모바일에 붙어있는 GPU나 edge TPU와 같은 Hardware Acceleration을 사용해서 고성능을 나타낼 수 있음
  • Quantization을 활용한 Model Optimization tool 제공
  • FlatBuffer를 사용한 효율적인 모델 포멧 제공
  • Computer Vision이나 NLP를 위한 Pre-trained Model 제공
(2019년 11월 기준) 나도 그렇고, 제일 처음 Tensorflow Lite를 접하는 사람은 막상 접하고 나서 "이걸 사용하면 on-device training을 할 수 있겠지?" 라고 생각할 수 있는데, 해당 기능은 지원하지 않는다. 현재까지는 Model Deploy와 Model Optimization 기능만 제공하고 있다. 하지만 Roadmap에 따르면 올해안으로는 on-device training을 지원한다고 하니 참고하면 좋을거 같다.

그림 1. Tensorflow Lite를 사용했을 때, model deploy 과정 (출처: udacity 강의)

우선 Tensorflow를 사용하기 위해서는 일단 Host PC든 Server에서든 Tensorflow 환경 상에서 개발되고, 해당 환경상에서 training까지 이뤄져야 한다. 이때 Tensorflow 자체에서 제공하는 Keras API같은 high-level API도 사용할 수 있고, C++내에 구현된 Low Level API도 사용할 수 있다. 이렇게 training까지 진행되면 나오는 output이 model이 될텐데, 이제 여기서부터 Tensorflow Lite가 사용된다. Tensorflow Lite에서 제공하는 Converter를 사용하면, 원래 Tensorflow 상에서 저장된 model을 FlatBuffer이라는 Serialization library형태로 바꿔준다. (해당 모델은 xxxx.tflite라는 확장자를 가진다.) Tensorflow를 많이 다뤄본 사람이라면 Protocol Buffer (Protobuf)가 아니고 왜 FlatBuffer를 쓴건지 궁금해 할수 있는데, 궁금하면 링크를 살펴보면 좋을 듯 하다.

댓글