mattn/go-tflite

Go binding for TensorFlow Lite

概要

go-tflite は、TensorFlow Lite C API の Go 言語バインディングです。Go プログラムから .tflite モデルの読み込み、テンソルの割り当て、入力データの供給、推論の実行、結果の読み取りを行うことができ、TensorFlow ライブラリ全体をコンパイルする必要はありません。主要な OS/CPU 向けの事前ビルド済み TensorFlow Lite 「buildkits」を提供しており、異なる TensorFlow バージョンが必要な場合のために C ライブラリを自分でビルドする手順も用意されています。

主な機能

機能 メリット
Go ネイティブ API NewModelFromFile、NewInterpreter、AllocateTensors、GetInputTensor、Invoke、GetOutputTensor といったシンプルな Go 関数が、基盤となる C 呼び出しをラップします。
事前ビルド済みバイナリ リリース tarball には libtensorflowlite_c.so (Windows では .dll) と XNNPACK デリゲートライブラリが含まれており、数コマンドでインストール可能です。
Edge-TPU サポート Google Coral Edge-TPU デリゲートをリンクする手順が提供されており、対応デバイスでハードウェアアクセラレーションによる推論が可能です。
Docker / Binder デモ Binder 上で実行可能な Jupyter ノートブック (iris.ipynb) がホストされており、ブラウザ上で go-tflite を使用して Iris 分類器をトレーニングする方法を確認できます。
クロスプラットフォーム Linux (amd64/arm64)、macOS (amd64/arm64)、Windows (amd64-mingw) 用の buildkits が利用可能です。
MIT ライセンス 商用プロジェクトでの使用、修正、組み込みが自由です。

一般的なワークフロー (README の例より)

model := tflite.NewModelFromFile("sin_model.tflite")
interpreter := tflite.NewInterpreter(model, tflite.NewInterpreterOptions())
interpreter.AllocateTensors()

// Fill the first input tensor
v := float64(1.2) * math.Pi / 180.0
interpreter.GetInputTensor(0).Float32s()[0] = float32(v)

// Run inference
interpreter.Invoke()

// Read the first output tensor
result := float64(interpreter.GetOutputTensor(0).Float32s()[0])
  1. 読み込み: コンパイル済みの TensorFlow Lite モデル (*.tflite) を読み込みます。
  2. 作成: オプション設定 (InterpreterOptions) を指定してインタープリタを作成します。
  3. 割り当て: すべてのテンソルのメモリを割り当てます。
  4. 書き込み: テンソルの型付きスライスヘルパー (Float32s()) を介して入力値を書き込みます。
  5. 実行: モデルを呼び出します。
  6. 読み取り: 出力値を読み取ります。

メモリリークを防ぐため、すべてのリソースは Delete() 呼び出しで手動で解放する必要があります。

はじめに

  1. C ライブラリのインストール: リリースページから適切な tflite-buildkit-<tag>-<target>.tar.gz をダウンロードし、/usr/local (Linux/macOS) またはカスタムフォルダ (Windows) に展開します。Linux の場合は ldconfig を実行してください。
  2. CGO フラグの設定: ヘッダーやライブラリを標準以外の場所に配置した場合は、(CGO_CFLAGS, CGO_LDFLAGS, LD_LIBRARY_PATH) を設定してください。
  3. Go コードの記述: 上記の API を使用します。リポジトリにはより詳細なサンプルを含む _example ディレクトリがあります。
  4. 実行: go build を実行します (TensorFlow Lite を XNNPACK 込みでビルドした場合は -tags xnnpack_builtin を追加してください)。

go-tflite の用途

  • デバイス上での推論が必要な Go サービスや CLI を構築する場合 (エッジデバイス、IoT、低遅延サーバーなど)。
  • 重い TensorFlow ランタイムを組み込みたくない場合。TensorFlow Lite の C API は軽量で高速です。
  • Go から XNNPACK や Google Edge TPU などのハードウェアデリゲートを活用したい場合。

制限事項

  • バインディングは薄いラッパーです。テンソルメモリの手動管理や、モデルが期待する形状/型の理解が必要です。
  • トレーニングはサポートされていません。TensorFlow Lite と同様、推論専用です。
  • 互換性のある libtensorflowlite_c ライブラリを提供する必要があります。バージョンが一致しないとランタイムエラーが発生する可能性があります。

リソース

  • Binder ノートブック: インタラクティブな Iris 分類器デモ。
  • Docker イメージ: ノートブック用の ghcr.io/mattn/go-tflite/gophernotes。
  • Edge-TPU ガイド: Google Coral リポジトリへのリンクとインストール手順。
  • ソース例: リポジトリ内の _example フォルダを参照してください。

上記のすべての情報は、リポジトリの README から直接引用しています。

関連

  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト