도움말 Kaggle에 TensorFlow과 그레이트 배리어 리프 (Great Barrier Reef)를 보호하기 도전에 참여

TensorFlow Lite 변환기

TensorFlow Lite 변환기는 TensorFlow 모델을 사용하고 TensorFlow Lite 모델(.tflite 파일 확장자로 식별되는 최적화된 FlatBuffer 형식)을 생성합니다. 변환기를 사용하는 옵션에는 다음 두 가지가 있습니다.

  1. Python API(권장): 모델 개발 파이프라인의 일부로 모델을 더 쉽게 변환하고 최적화를 적용하며 메타데이터를 추가하는 등 다양한 기능이 많습니다.
  2. 명령줄: 기본 모델 변환만 지원합니다.

TFLite 변환기 워크플로

Python API

도우미 코드: 설치된 TensorFlow 버전을 확인하려면 print(tf.__version__)를 실행하고 TensorFlow Lite 변환기 API에 관해 자세히 알아보려면 print(help(tf.lite.TFLiteConverter))를 실행합니다.

TensorFlow 2.x를 설치한 경우 옵션에는 다음 두 가지가 있습니다. TensorFlow 1.x를 설치한 경우 GitHub를 참고하세요.

다음 예는 저장된 모델을 TensorFlow Lite 모델로 변환하는 방법을 보여줍니다.

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 Lite 모델로 변환하는 방법을 보여줍니다.

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 함수를 TensorFlow Lite 모델로 변환하는 방법을 보여줍니다.

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.
# Notes that for the versions earlier than TensorFlow 2.7, the
# from_concrete_functions API is able to work when there is only the first
# argument given:
# > converter = tf.lite.TFLiteConverter.from_concrete_functions([concrete_func])
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. See instructions: <a href="https://www.tensorflow.org/lite/guide/ops_select">https://www.tensorflow.org/lite/guide/ops_select</a> TF Select ops: ..., .., ...

    해결 방법: 이 오류는 모델에 TFLite 구현에 대응하지 않는 TF 작업이 있기 때문에 발생합니다. TFLite 모델에서 TF 작업을 사용하여 이 문제를 해결할 수 있습니다(권장). TFLite 작업만으로 모델을 생성하려면 GitHub 문제 #21526에 누락된 TFLite 작업 요청을 추가하거나(요청한 적이 있다면 댓글을 남겨야 함) 직접 TFLite 작업을 생성하면 됩니다.

  • 오류: .. is neither a custom op nor a flex op

    해결 방법: TF 작업에 따라 다음과 같이 나누어집니다.

명령줄 도구

가능하면 위에 나열된 Python API를 대신 사용하는 것이 좋습니다.

pip에서 TensorFlow 2.x를 설치한 경우 다음과 같이 tflite_convert 명령어를 사용합니다. 소스에서 TensorFlow 2.x를 설치한 경우 다음 섹션에서 'tflite_convert'를 'bazel run //tensorflow/lite/python:tflite_convert --'로 대체하면 되고 TensorFlow 1.x를 설치한 경우 GitHub(참조, )를 참고하세요.

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.

저장된 모델 변환

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

다음 단계

TensorFlow Lite 인터프리터를 사용하여 클라이언트 기기(예: 모바일, 삽입형)에서 추론을 실행합니다.