- 텐서플로를 이용하여 개발한 모델을 안드로이드에서 활용하려면 텐서플로 라이트 모델로 변환하여 배포해야 함
- 모델 전체를 직접 개발할 필요는 없으며, 사전 학습된 다양한 모델을 이용하면 생산성을 높일 수 있음
1. 텐서플로 라이트 모델 개발 워크플로
모델 선택 → 모델 변환 → 기기 배포 → 모델 최적화

1-1. 모델 선택
- 안드로이드 앱에서 이용할 딥러닝 모델을 선택하는 프로세스
- 주어진 문제를 해결하는 데 적합한 모델을 선택해야 하는데, 여기서 문제는 개발하고자 하는 솔루션이나 서비스에 의해 결정
ex) 손글씨 분류 앱 ⇒ 이미지 분류(image classification) 문제를 해결해야 함
영화 리뷰 분석 ⇒ 감성 분석(sentiment analysis)이 필요
- 모델은 텐서플로를 이용하여 직접 개발할 수도 있고, 이미 개발된 모델을 사용할 수도 있음
- 모델 개발에는 텐서플로를 이용하고 모델 변환 및 최적화에는 텐서플로 라이트를 이용
- 또한, 이미 개발된 모델은 텐서플로나 텐서플로 허브에서 찾아볼 수 있음
1-2. 모델 변환
- 개발한 모델을 텐서플로 라이트 모델로 변환하는 프로세스
.tflite 라는 별도의 포맷을 사용
- 텐서플로 모델을 tflite로 변환하는 과정에서 자동으로 최적화를 하는데, 이때 정확도 손실을 최소한으로 하면서 모델의 크기를 줄임
TensorFlow Lite Converter에 의해 변환이 완료되면 tflite 파일이 생성되고, 이를 안드로이드 프로젝트에 배포하여 사용

1-3. 기기 배포
tflite 파일을 안드로이드 스튜디오의 프로젝트에 배포하고, 이를 이용하여 안드로이드 앱을 만들어 기기에 배포하는 프로세스
- 앱 개발 단계에서 안드로이드 스튜디오에 모델을 포함하면 됨
- 그 다음, 이 모델을 활용하는 앱을 만들어 기기에 설치하면 모델도 앱에 포함되어 기기에서 이용할 수 있음
1-4. 모델 최적화
- 모델이 안드로이드 기기에서 최적의 성능을 발휘하도록 튜닝하는 프로세스
- 최적화를 거치면 모델의 정확도 손실을 최소화하면서 모델의 크기가 줄어듦
- 모델 변환 단계에서 텐서플로 라이트가 자동으로 최적화를 수행하지만, 실행 속도나 정확도를 더욱 개선하기 위해 직접 최적화할 수 있음
- 모델의 정확도와 크기는 서로 트레이드오프 관계이므로 최적화의 목표는 정확도와 크기 사이에서 이상적으로 균형을 맞추는 것
- 모델을 기기에 배포한 뒤 모델의 성능을 측정하고, 이를 바탕으로 모델을 다시 최적화하고 변환하여 기기에 배포하는 과정을 반복하면서 점진적으로 최적의 모델로 발전시킬 수 있음
2. 모델 선택
- 주어진 문제를 해결할 수 있는 딥러닝 모델을 선택

2-1. 모델 직접 개발
- 텐서플로를 이용하여 딥러닝 모델을 직접 개발하고 이를 변환하여 안드로이드 앱에 배포
- 모델 설계, 모델 훈련, 모델 변환까지 모든 과정을 직접 할 수도 있고, 모델 설계만 텐서플로에서 제공하는 모델 아키텍처를 이용하는 방법을 대체할 수도 있음
- 모델 개발 방법 중 가장 많은 시간과 노력이 필요하지만 자유도가 가장 높기때문에 문제에 최적화된 모델을 만들 수 있음

2-2. 사전 학습 모델 이용
- 이미 훈련이 완료된 모델로, 복잡하고 오래 걸리는 학습 절차 없이 바로 이 모델을 이용하여 추론 가능
- 텐서플로는 이미 학습이 완료된 몇 가지 모델을 제공하므로 학습 데이터가 필요 없고, 많은 컴퓨팅 자원을 이용하여 오랜 시간 모델을 학습시킬 필요도 없음
- 그러나 아직은 널리 사용되는 몇 가지 모델만 사전 학습 모델로 제공되기 때문에 해결해야 할 문제에 딱 맞는 모델을 찾기 어려울 수 있음
- 사전 학습 모델은 텐서플로 라이트 모델로 제공되기도 하고, 텐서플로 모델로 제공되기도 함
- 텐서플로 라이트 모델은 설계, 학습, 변환, 최적화가 모두 완료되어
tflite 파일로 제공
👉 따라서 필요한 모델이 tflite 파일로 제공된다면 복잡한 모델 개발 과정을 모두 건너뛰고 바로 안드로이드 앱 개발 단계로 넘어갈 수 있음
- 텐서플로 모델은 TFLite 모델로 변환해야 안드로이드에서 사용할 수 있음
👉 텐서플로 모델은 케라스(Keras) 애플리케이션 모듈에서 제공하는 모델을 이용하거나 텐서플로 허브에서 제공하는 모델을 이용할 수 있음


2-3. 전이 학습
- 직접 모델을 개발하는 방법과 사전 학습 모델을 이용하는 방법의 장점을 결합한 방법
- 학습이 완료된 모델을 다른 문제에 다시 학습시키는 방식으로 모델을 개발
- 전이 학습은 학습에 소요되는 시간을 줄일 수 있고, 훈련 데이터가 부족한 상황에서도 비교적 정확도가 높은 모델을 얻을 수 있음
- ex) 개와 고양이를 분류하는 모델 → 사자와 호랑이 데이터로 다시 학습 → 사자와 호랑이를 분류하는 모델

2-4. 텐서플로 허브
- 머신러닝 모델을 업로드하고 공유하는 저장소
- 딥러닝은 가장 활발하게 연구되는 분야 중 하나이브로 계속해서 새롭게 등장하는 SOTA(State-Of-The-Art) 모델을 적시에 프레임워크에서 제공하는 데 한계 有
- 따라서, 텐서플로 허브를 이용하면 더욱 다양한 최신 사전 학습 모델을 이용할 수 있음
https://tfhub.dev
💡 출처
텐서플로 라이트를 활용한 안드로이드 딥러닝, 임태규, 한빛미디어
