안드로이드와 텐서플로 라이트 입문 (2) - TensorFlow Lite

Jiyeahhh·2021년 10월 30일
0
post-thumbnail

1. 텐서플로 라이트

  • 모바일과 IoT 기기에 딥러닝 모델을 배포하고 추론하기 위해 구글에서 만든 라이브러리
  • 텐서플로 모델을 안드로이드, iOS 또는 임베디드 기기에서 사용할 수 있는 모델로 변환
  • 딥러닝 모델의 학습 및 추론에는 컴퓨팅 자원이 많이 필요한데, 모바일이나 임베디드 기기는 가용한 컴퓨팅 자원이 제한적이므로 텐서플로 라이트는 모델 경량화에 중점

2. 텐서플로 라이트의 구성과 특징

2-1. 텐서플로 라이트의 구성

  • 컨버터(converter)와 인터프리터(interpreter)로 구성
  • 컨버터 : 텐서플로 모델을 모바일 환경에서 동작 가능하게 변환
  • 인터프리터 : 변환된 모델을 모바일 및 임베디드 환경에서 실제로 동작시킴
    👉 컨버터는 텐서플로 개발 환경과 동일한 파이썬 개발 환경에서 활용하고, 인터프리터는 사용하려는 모바일 및 임베디드 개발 환경과 동일한 환경에서 활용

2-2. 텐서플로 라이트의 특징

  • 컴퓨팅 자원이 제한된 환경에서 딥러닝 모델을 실행해야 하므로 효율성에 초점을 맞추고 있음
  • 컴퓨팅 파워가 부족한 모바일 및 임베디드 환경에서 모델을 로드하고 추론하기 위해 모델의 크기를 줄여서 사용
  • 또한, 구글이 게임과 같이 고성능을 요구하는 앱을 위해 만든 FlatBuffers 라이브러리를 사용하기 때문에 이식성과 효율성이 좋음
  • 성능을 극대화하기 위해 텐서플로 라이트는 다양한 하드웨어 가속을 제공
  • 특히 안드로이드는 GPU 가속 외에도 NNAFI(Neural Networks API) 위임을 지원하기 때문에 기기 환경에 따라 추가적으로 성능 향상 가능
  • 양자화 기술은 더욱 최적화된 모델을 만들 수 있게 도와주는데 Float16 양자화, 정수 양자화, 동적 범위 양자화 등 다양한 옵션을 제공
  • 생산성 측면에서도 뛰어남
  • 안드로이드, iOS, 라즈베리파이 등 다양한 플랫폼 환경과 자바, 파이썬, C++, 스위프트, Objective-C 등 다양한 언어를 지원
  • 또한, MobileNet, Deeplab v3, Mobile BERT 등 이미 학습이 완료된 다양한 최신 모델을 제공하여 안드로이드 앱에 최신 딥러닝 모델을 즉각 적용할 수 있는 환경을 갖추고 있음

2-3. 텐서플로와 텐서플로 라이트의 비교

  • 텐서플로와 텐서플로 라이트는 개발 프로세스에서의 역할, 개발 언어, 지원하는 연산자 범위 등에 차이가 있음
  • 텐서플로는 모델 개발과 학습을 담당하고, 텐서플로 라이트는 모델 변환과 추론을 담당
  • 또한, 텐서플로는 주로 파이썬을 이요하지만 텐서플로 라이트는 파이썬과 기기별 개발 언어를 모두 사용해야 함
    👉 안드로이드는 자바나 코틀린 / iOS는 Objective-C나 스위프트
  • 모델 변환은 파이썬 환경에서, 추론은 자바나 코틀린 환경에서 수행
  • 텐서플로는 행렬 곱셈에 쓰이는 tf.MatMul(), 콘볼루션 연산에 쓰이는 tf.Conv2D() 등 딥러닝 모델 개발을 위해 다양한 연산을 제공
  • 텐서플로 라이트는 텐서플로가 지원하는 모든 연산자를 제공하지 않고, 일반적으로 널리 사용되는 연산자만을 지원
  • 새로운 모델을 개발하려면 텐서플로를 이용해야 하지만, 이미 학습이 완료된 모델을 사용한다면 텐서플로 라이트만으로도 충분

2-4. 텐서플로 라이트의 기술적 제약

1. 연산자 제약

  • 텐서플로 라이트는 텐서플로의 모든 연산자를 지원하지 않으며, 추론 모델에서 널리 사용되는 일부 연산자만 지원
  • 따라서, 직접 개발한 텐서플로 모델이 텐서플로 라이트에서 지원하지 않는 연산자를 사용한다면 모델 변환이 불가능
  • 텐서플로 라이트가 지원하는 연산자 중에도 일부는 성능 문제로 인해 특정 패턴만을 사용하도록 제한하기도 함

2. 학습 제약

  • 딥러닝 모델 개발 및 활용 프로세스는 모델을 개발하는 '학습' 단계새로운 데이터에 적용하는 '추론' 단계로 나뉨
  • 일반적으로 학습은 추론보다 훨씬 더 많은 데이터를 사용하므로 그만큼 많은 컴퓨팅 자원과 시간을 필요로 함
  • 텐서플로 라이트는 현재 기기 내에서 추론만 가능하며 기기 내 학습은 지원하지 않음
  • 따라서, 온라인 학습을 적용하기 어렵고 정적 학습만 가능
  • 정적 학습 : 모델이 주어진 데이터를 이용하여 학습을 완료하면 학습된 상태가 변하지 않고 항상 그대로 유지
  • 온라인 학습 : 동적 학습이 가능하여 모델이 배포된 이후에 발생하는 데이터를 이용하여 추가적으로 학습할 수 있고, 이 때문에 모델이 새로운 데이터에 적응할 수 있음
    👉 동적 학습은 새로운 데이터가 지속적으로 발생하는 모바일 환경에 더 적합한 학습 방식

💡 출처
텐서플로 라이트를 활용한 안드로이드 딥러닝, 임태규, 한빛미디어

profile
람차람차

0개의 댓글