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])
- 読み込み: コンパイル済みの TensorFlow Lite モデル (
*.tflite) を読み込みます。 - 作成: オプション設定 (
InterpreterOptions) を指定してインタープリタを作成します。 - 割り当て: すべてのテンソルのメモリを割り当てます。
- 書き込み: テンソルの型付きスライスヘルパー (
Float32s()) を介して入力値を書き込みます。 - 実行: モデルを呼び出します。
- 読み取り: 出力値を読み取ります。
メモリリークを防ぐため、すべてのリソースは Delete() 呼び出しで手動で解放する必要があります。
はじめに
- C ライブラリのインストール: リリースページから適切な
tflite-buildkit-<tag>-<target>.tar.gzをダウンロードし、/usr/local(Linux/macOS) またはカスタムフォルダ (Windows) に展開します。Linux の場合はldconfigを実行してください。 - CGO フラグの設定: ヘッダーやライブラリを標準以外の場所に配置した場合は、(
CGO_CFLAGS,CGO_LDFLAGS,LD_LIBRARY_PATH) を設定してください。 - Go コードの記述: 上記の API を使用します。リポジトリにはより詳細なサンプルを含む
_exampleディレクトリがあります。 - 実行:
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 から直接引用しています。
関連
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト