이 페이지에서는 TensorFlow 모델을 변환하는 방법을 설명합니다.
LiteRT 모델 (최적화된
FlatBuffer 형식:
.tflite
파일 확장자)을 사용합니다.
전환 워크플로
아래의 다이어그램은 Google Cloud의 모델을 다음과 같이 조정합니다.
그림 1. 변환기 워크플로
다음 옵션 중 하나를 사용하여 모델을 변환할 수 있습니다.
- Python API (권장): 이를 통해 전환을 개발 파이프라인에 통합하고, 최적화 적용, 메타데이터 추가 및 확인할 수 있습니다.
- 명령줄: 기본 모델 변환만 지원합니다.
Python API
도우미 코드: LiteRT 변환기 자세히 알아보기
API에서 print(help(tf.lite.TFLiteConverter))
를 실행합니다.
다음을 사용하여 TensorFlow 모델 변환
tf.lite.TFLiteConverter
TensorFlow 모델은 SavedModel 형식을 사용하여 저장되며
상위 수준 tf.keras.*
API (Keras 모델)를 사용하여 생성되거나
하위 수준 tf.*
API (구체 함수 생성)
다음과 같은 세 가지 옵션이 있습니다 (예는 다음 몇 가지
섹션 참조):
tf.lite.TFLiteConverter.from_saved_model()
(권장): 전환 SavedModel입니다.tf.lite.TFLiteConverter.from_keras_model()
: Keras 모델.tf.lite.TFLiteConverter.from_concrete_functions()
: 전환 구체 함수를 사용합니다.
저장된 모델 변환 (권장)
다음 예는 SavedModel을 TensorFlow로 변환합니다. 라이트 모델입니다.
import tensorflow as tf
# Convert the model
converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir) # path to the SavedModel directory
tflite_model = converter.convert()
# Save the model.
with open('model.tflite', 'wb') as f:
f.write(tflite_model)
Keras 모델 변환
다음 예는 Keras 모델을 TensorFlow로 변환 라이트 모델입니다.
import tensorflow as tf
# Create a model using high-level tf.keras.* APIs
model = tf.keras.models.Sequential([
tf.keras.layers.Dense(units=1, input_shape=[1]),
tf.keras.layers.Dense(units=16, activation='relu'),
tf.keras.layers.Dense(units=1)
])
model.compile(optimizer='sgd', loss='mean_squared_error') # compile the model
model.fit(x=[-1, 0, 1], y=[-3, -1, 1], epochs=5) # train the model
# (to generate a SavedModel) tf.saved_model.save(model, "saved_model_keras_dir")
# Convert the model.
converter = tf.lite.TFLiteConverter.from_keras_model(model)
tflite_model = converter.convert()
# Save the model.
with open('model.tflite', 'wb') as f:
f.write(tflite_model)
concrete 함수 변환
다음 예는 concrete 함수를 LiteRT 모델입니다.
import tensorflow as tf
# Create a model using low-level tf.* APIs
class Squared(tf.Module):
@tf.function(input_signature=[tf.TensorSpec(shape=[None], dtype=tf.float32)])
def __call__(self, x):
return tf.square(x)
model = Squared()
# (ro run your model) result = Squared(5.0) # This prints "25.0"
# (to generate a SavedModel) tf.saved_model.save(model, "saved_model_tf_dir")
concrete_func = model.__call__.get_concrete_function()
# Convert the model.
converter = tf.lite.TFLiteConverter.from_concrete_functions([concrete_func],
model)
tflite_model = converter.convert()
# Save the model.
with open('model.tflite', 'wb') as f:
f.write(tflite_model)
기타 기능
최적화를 적용합니다. 일반적인 사용된 최적화는 학습 후 양자화 모델 지연 시간과 모델 크기를 더욱 줄여서 있습니다.
플랫폼을 더 쉽게 만들 수 있는 메타데이터 추가 특정 래퍼 코드가 있는지 확인합니다.
변환 오류
다음은 일반적인 변환 오류와 해결 방법입니다.
오류:
Some ops are not supported by the native TFLite runtime, you can enable TF kernels fallback using TF Select.
해결 방법: 이 오류는 모델에 구현됩니다. 이 문제는 TFLite 모델에서 TF 작업 사용 (권장) TFLite 작업만으로 모델을 생성하려면 누락된 TFLite 작업에 대한 요청을 GitHub 문제 #21526 (요청을 아직 언급하지 않은 경우 댓글 남기기) 또는 TFLite 작업 만들기 확인할 수 있습니다
오류:
.. is neither a custom op nor a flex op
해결 방법: TF 작업이 다음과 같은 경우
TF에서 지원됨: 이 오류는 allowlist (허용 목록에 추가된 허용 목록) TFLite에서 지원하는 TF 작업). 이 문제는 다음과 같이 해결할 수 있습니다.
TF에서 지원되지 않음: TFLite가 사용자가 정의한 맞춤 TF 연산자입니다. 이 문제는 다음과 같이 해결할 수 있습니다.
- TF 작업을 만듭니다.
- TF 모델을 TFLite 모델로 변환합니다.
- TFLite 작업 만들기 TFLite 런타임에 연결하여 추론을 실행합니다.
명령줄 도구
이미
pip에서 TensorFlow 2.x를 설치한 경우
tflite_convert
명령어를 실행합니다 사용 가능한 모든 플래그를 보려면
다음 명령어를 실행합니다.
$ tflite_convert --help
`--output_file`. Type: string. Full path of the output file.
`--saved_model_dir`. Type: string. Full path to the SavedModel directory.
`--keras_model_file`. Type: string. Full path to the Keras H5 model file.
`--enable_v1_converter`. Type: bool. (default False) Enables the converter and flags used in TF 1.x instead of TF 2.x.
You are required to provide the `--output_file` flag and either the `--saved_model_dir` or `--keras_model_file` flag.
이
TensorFlow 2.x 소스
해당 소스에서 변환기를 실행하려는 경우
패키지 설치
'tflite_convert
'을(를) 바꿀 수 있습니다. 다음 코드로 교체합니다.
'bazel run tensorflow/lite/python:tflite_convert --
' 를 입력합니다.
저장된 모델 변환
tflite_convert \
--saved_model_dir=/tmp/mobilenet_saved_model \
--output_file=/tmp/mobilenet.tflite
Keras H5 모델 변환
tflite_convert \
--keras_model_file=/tmp/mobilenet_keras_model.h5 \
--output_file=/tmp/mobilenet.tflite