.tflite — TFLiteモデル形式の本質、構造、応用

著者: IT Sectr 公開日: 2026-07-18 読了時間: 6 分

.tfliteは、GoogleのFlatBuffers技術に基づくTensorFlow Liteモデルのバイナリファイル形式です。この形式は、リソースが限られたモバイル、組み込み、エッジデバイスでの効率的な推論のために最適化されています。他のシリアライズ形式とは異なり、FlatBuffersは解析やコピーなしでデータに直接アクセスできるため、モデルの高速起動に重要です。TensorFlow Lite Converter Guide、2025によると、.tfliteファイルには計算グラフ、量子化または完全精度の重み、インタープリターのメタデータが含まれています。.tfliteはGoogleエコシステムにおけるオンデバイスMLの標準形式です。

重要なポイント

  • .tflite — モバイル推論のためのFlatBuffersベースのTensorFlow Liteモデルのバイナリ形式。
  • ファイルには単一のバイナリコンテナに計算グラフ、モデルの重み、メタデータが含まれています。
  • FlatBuffersは解析やメモリ割り当てなしでデータへの直接アクセスを提供します。
  • INT8、FP16量子化および動的量子化をサポートします。
  • .tfliteはAndroid、iOS、LinuxでTFLite Interpreterと共に使用されます。

.tflite形式とは

.tfliteは、メモリと計算能力が限られたデバイスでの推論用に最適化された機械学習モデルのシリアライズ表現です。グラフをprotobufに保存し、読み込みに多大なリソースを必要とするSavedModel形式とは異なり、.tfliteはFlatBuffers(コピーなしでデータアクセスが可能なシリアライズライブラリ)を使用します。

.tflite形式は、モバイルプラットフォームの特性を考慮して設計されています。読み込み時のメモリ消費が最小限、起動が高速、量子化された重みをサポートします。.tfliteファイルはトレーニングをサポートしておらず、推論のみ可能です。これは完全なTensorFlow形式との根本的な違いであり、ランタイムサイズを大幅に削減できます。

Google Research、2024によると、INT8量子化の.tflite形式のモデルは、同等のFP32モデルよりも60%速く読み込まれ、推論中のRAM消費が40%少なくなります。

.tfliteファイルの内部構造

.tfliteファイルは、FlatBuffersスキーマに従って編成された複数のセクションで構成されています。メインセクションはModelで、計算グラフ(SubGraph)、演算子のリスト(OperatorCodes)、重みバッファが含まれます。各SubGraphには、テンソル、演算子、入出力インデックスが含まれます。

OperatorCodesセクションには、モデルで使用されるすべての演算子の識別子(Conv2D、DepthwiseConv2D、FullyConnected、Softmaxなど)が含まれています。各演算子には、事前定義されたBuiltinOperatorリストからのコードがあります。モデルにリストにない演算が含まれている場合、それらはCustomとしてマークされ、デリゲートまたはカスタム演算子による実装が必要です。

Buffersセクションには、モデルの重みのバイナリデータが含まれています。量子化モードに応じて、重みはFP32、FP16、INT8、またはスケーリングパラメータ付きの量子化形式で保存できます。バッファはmmapを介してメモリに直接マッピングされ、余分なコピーを排除します。

.tfliteファイルの主要セクション

セクション目的
Modelルート構造、バージョン、説明
SubGraph計算グラフ:テンソル、演算子、入力/出力
OperatorCodes使用される演算子のリスト
Buffersモデルの重みのバイナリデータ
Metadataメタデータ:バージョン、作者、説明
SignatureDefAPIのための名前付き入力と出力

量子化と形式の最適化

.tfliteは3つの量子化モードをサポートしています。完全整数INT8量子化:重みと活性化は8ビット整数で表現されます。変換には、活性化範囲を調整するための代表的なデータセットが必要です。モデルサイズは4分の1に縮小されます。

FP16量子化:重みは16ビット浮動小数点数に変換されます。このモードは調整が不要で、精度の低下は最小限です。活性化はFP32のままです。モデルサイズは2分の1に縮小されます。GPUおよびNPUでFP16をサポートするデバイスに推奨されます。

動的量子化:重みはINT8に変換されますが、活性化はFP32で計算されます。モデルサイズは4分の1に縮小され、精度は完全なINT8よりも高く維持されます。Google ML Performance Benchmarksによると、このモードはNLPモデルや精度感度の高いモデルに最適です。

TensorFlowモデルから.tfliteを作成

モデルを.tfliteに変換するには、TFLite Converterを使用します。これはPython API tf.lite.TFLiteConverterを介して利用可能なTensorFlowコンポーネントです。コンバーターは3つのソース(SavedModel、Keras H5、ConcreteFunction)をサポートしています。Kerasモデル変換の最小限の例:

python
import tensorflow as tf

# ファイルからトレーニング済みKerasモデルを読み込む
model = tf.keras.models.load_model("my_model.h5")

# 動的量子化で.tfliteに変換する
converter = tf.lite.TFLiteConverter.from_keras_model(model)
converter.optimizations = [tf.lite.Optimize.DEFAULT]
tflite_model = converter.convert()

# 変換されたモデルを.tfliteファイルに書き込む
with open("model.tflite", "wb") as f:
    f.write(tflite_model)

完全なINT8量子化での変換には、キャリブレーションデータセットが必要です。活性化範囲を決定するためにrepresentative_datasetを指定します:

python
converter = tf.lite.TFLiteConverter.from_saved_model("saved_model")
converter.optimizations = [tf.lite.Optimize.DEFAULT]
converter.representative_dataset = representative_dataset
converter.target_spec.supported_ops = [
    tf.lite.OpsSet.TFLITE_BUILTINS_INT8
]
converter.inference_input_type = tf.uint8
converter.inference_output_type = tf.uint8
tflite_quant_model = converter.convert()

.tfliteを扱うツール

Googleは.tfliteモデルの分析と最適化のためのツールセットを提供しています。TFLite Benchmark Toolはデバイス上の推論時間を測定し、各演算子の統計を表示します。TFLite Model Inspectorは計算グラフを可視化し、テンソルサイズを表示します。

Netronはクロスプラットフォームのモデルビジュアライザーで、ONNX、Core ML、PyTorchと共に.tfliteをサポートしています。Netronはグラフ構造、各演算子のパラメータ、テンソル間の接続を表示します。変換時のデバッグに役立ちます。

TFLite Metadata APIを使用すると、.tfliteファイルにメタデータ(モデルの説明、入力データ形式、測定単位、作成者情報)を追加できます。メタデータはTask Libraryによって自動的な前処理および後処理の設定に使用されます。

.tfliteの読み込みと実行例

iOSでSwift APIを使用した.tfliteモデルの読み込み例。TFLite Swift APIは、バンドルからモデルを読み込んで推論を実行するためのInterpreterを提供します。Core ML Delegateを介してハードウェアアクセラレーションのデリゲートを指定します:

swift
import TensorFlowLite

guard let modelPath = Bundle.main.path(
    forResource: "model", ofType: "tflite"
) else { return }

let interpreter = try Interpreter.init(modelPath: modelPath)
try interpreter.allocateTensors()

// モデルの入力データを準備する
let inputData = Data.init(count: 1 * 224 * 224 * 3)
try interpreter.copy(inputData, toInputAt: 0)

// モデル推論を実行する
try interpreter.invoke()

// 出力テンソルデータを読み取る
let outputTensor = try interpreter.output(at: 0)
let results = outputTensor.data.withUnsafeBytes {
    Array($0.bindMemory(to: Float32.self))
}

よくある質問

.tfliteファイルをテキストエディタで開けますか?

.tfliteファイルはバイナリFlatBuffers形式であり、テキストエディタで読むことはできません。表示するには、モデル構造を可視化するNetronまたはTFLite Model Inspectorを使用してください。

.tfliteで使用されている演算子を確認するには?

Pythonでtf.lite.experimental.Analyzer.analyze(model_path)を使用するか、--print_model_detailsフラグを付けてTFLite Benchmark Toolを使用します。これらのツールはパラメータ付きの完全な演算子リストを表示します。

.tfliteとONNXの違いは?

.tfliteはモバイルデバイスでの推論用に最適化されており、FlatBuffersを使用します。ONNXはprotobufシリアライゼーションを使用してフレームワーク間でモデルを交換するためのユニバーサル形式です。TFLiteには量子化サポートが組み込まれています。

.tfliteをTensorFlowに戻せますか?

いいえ、量子化と最適化による情報損失のため、逆変換は存在しません。元のTensorFlowモデルは、将来のトレーニングや変更のために別途保存する必要があります。

.tfliteファイルにメタデータを追加するには?

PythonでTFLite Metadata Writer APIを使用します。このAPIを使用すると、Task Library用の説明、入出力形式、測定単位、サンプルデータを追加できます。

まとめ

  • .tflite — モバイル推論のためのFlatBuffersベースのTensorFlow Liteモデルのバイナリ形式。
  • ファイルには単一のコンテナに計算グラフ、重み、メタデータ、SignatureDefが含まれています。
  • FlatBuffersは解析や余分な割り当てなしでデータへのmmapアクセスを提供します。
  • INT8、FP16、動的量子化によりサイズが最大4分の1に削減されます。
  • 変換にはSavedModel、Keras、またはConcreteFunctionからTFLite Converterを使用します。
  • 可視化とデバッグはNetron、TFLite Inspector、Benchmark Toolを介して利用できます。
  • Task Library統合のためにメタデータはMetadata Writer APIを介して追加されます。

ターンキー方式のモバイルアプリケーションを開発します

IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。

プロジェクトについて相談

こちらもお読みください