본문 바로가기
Python

[Python] Tesorflow 모델을 TFLite로 변환하기

by teamnova 2023. 2. 2.
728x90

안녕하세요.

오늘은 Tesorflow 모델을 TFLite로 변환하는 예제를 진행하겠습니다.

 

우선, TFLite를 사용하는 이유는 On Device 환경에서 동작하게 하기위해 - IOS, AOS 같은 기기에 넣기위해 - 사용합니다.

따라서 TFLite로 변환한다면 모델사이즈가 줄어들게 됩니다. 이는 모델에서 기존에 학습된 가중치(weight)를 float32 형식에서 float 16 int 8 등의 형태로 변환시키기 때문에 추론 정확도가 떨어지게 됩니다. 대신 사이즈가 줄어든 만큼 추론속도는 증가할 것 입니다.

추가적으로, 추론속도가 증가하는 것이지 학습속도를 빠르게 하는 것이 아닙니다. 이부분을 염두해 두시고 진행하셔야 합니다.

이러한 과정을 '양자화 (quantizaion)' 한다고 합니다.

 

 양자화 설정 타입은 크게 Dynamic range, Integer , Float 세가지가 있습니다.

Dynamic range와 Float은 가중치(weight)를 타겟으로 양자화 하고, Integer 는 가중치, 레이어 등을 양자화 타겟으로 합니다. 

대표적인 변환타입은 Float이나 사용하는 모델이 어떤 연산을 지원하는지를 확인하신 후, 적용하셔야 합니다.

연산제한이 없다면, 사용한 대표 데이터셋이 있는지 데이터셋 확인을 하셔야 합니다. 

 

이 예제에서는 Float16 연산으로 양자화를 진행하겠습니다.

import tensorflow as tf

#모델이 저장된 폴더 위치로 모델 불러오기
converter = tf.lite.TFLiteConverter.from_saved_model('변환할 모델이 있는 폴더경로')

# 양자화 설정
converter.target_spec.supported_types = [tf.float16]
converter.optimizations = [tf.lite.Optimize.DEFAULT]

# 모델 변환
tflite_model = converter.convert()

# 변환된 모델을 .tflite 파일에 저장
open("저장할경로/저장할 이름.tflite", "wb").write(tflite_model)

 

이렇게 진행하시면 아래 사진과 같이 변환이 완료됩니다.