C++ ライブラリについて

TensorFlow Lite for Microcontrollers C++ ライブラリは、TensorFlow リポジトリの一部です。読みやすく、変更しやすく、十分にテストされ、統合しやすく、通常の TensorFlow Lite と互換性があるように設計されています。

このドキュメントでは、C++ ライブラリの基本構造と独自のプロジェクトの作成について説明します。

ファイル構造

micro ルート ディレクトリの構造は比較的シンプルです。ただし、大規模な TensorFlow リポジトリ内にあるため、さまざまな埋め込み開発環境内で関連するソースファイルを単独で提供するスクリプトと事前に生成されたプロジェクト ファイルを作成しました。

キーファイル

TensorFlow Lite for Microcontrollers インタープリタを使用するうえで最も重要なファイルは、テスト付きのプロジェクトのルートにあります。

[`micro_mutable_op_resolver.h`](https://github.com/tensorflow/tflite-micro/blob/main/tensorflow/lite/micro/micro_mutable_op_resolver.h)
can be used to provide the operations used by the interpreter to run the
model.

一般的な使用方法については、マイクロコントローラのスタートガイドをご覧ください。

ビルドシステムは、特定のファイルのプラットフォーム固有の実装を提供します。これらは、プラットフォーム名のディレクトリ(cortex-m など)にあります。

次のようなディレクトリもいくつか存在します。

  • kernel。オペレーションの実装と関連コードが含まれます。
  • tools。ビルドツールとその出力が含まれます。
  • examples: サンプルコードが含まれています。

新しいプロジェクトの開始

新しいプロジェクトのテンプレートには、Hello World の例を使用することをおすすめします。このセクションの手順に沿って操作すると、選択したプラットフォームのバージョンを取得できます。

Arduino ライブラリを使用する

Arduino を使用している場合、Hello World の例は Arduino_TensorFlowLite Arduino ライブラリに含まれています。このライブラリは、Arduino IDE と Arduino Create で手動でインストールできます。

ライブラリが追加されたら、File -> Examples に移動します。リストの下部に TensorFlowLite:hello_world という名前の例が表示されます。これを選択して hello_world をクリックすると、サンプルが読み込まれます。サンプルのコピーを保存して、独自のプロジェクトの基礎として使用できます。

他のプラットフォームのプロジェクトを生成する

TensorFlow Lite for Microcontrollers では、Makefile を使用して、必要なすべてのソースファイルを含むスタンドアロン プロジェクトを生成できます。現在サポートされている環境は、Keil、Make、Mbed です。

これらのプロジェクトを Make で生成するには、TensorFlow/tflite-micro リポジトリのクローンを作成し、次のコマンドを実行します。

make -f tensorflow/lite/micro/tools/make/Makefile generate_projects

依存関係用の大きなツールチェーンをダウンロードする必要があるため、この処理には数分かかります。完了すると、gen/linux_x86_64/prj/ のようなパス内にいくつかのフォルダが作成されます(正確なパスはホスト オペレーティング システムによって異なります)。これらのフォルダには、生成されたプロジェクトとソースファイルが含まれています。

このコマンドを実行すると、gen/linux_x86_64/prj/hello_worldHello World プロジェクトが表示されます。たとえば、hello_world/keil には Keil プロジェクトが含まれます。

テストを実行する

ライブラリをビルドしてすべての単体テストを実行するには、次のコマンドを使用します。

make -f tensorflow/lite/micro/tools/make/Makefile test

個々のテストを実行するには、次のコマンドを使用します。<test_name> はテストの名前に置き換えます。

make -f tensorflow/lite/micro/tools/make/Makefile test_<test_name>

テスト名はプロジェクトの Makefile で確認できます。たとえば、examples/hello_world/Makefile.incHello World の例のテスト名を指定します。

ビルドバイナリ

特定のプロジェクト(サンプル アプリケーションなど)で実行可能なバイナリをビルドするには、次のコマンドを使用します。<project_name> は、ビルドするプロジェクトに置き換えます。

make -f tensorflow/lite/micro/tools/make/Makefile <project_name>_bin

たとえば、次のコマンドは Hello World アプリケーションのバイナリをビルドします。

make -f tensorflow/lite/micro/tools/make/Makefile hello_world_bin

デフォルトでは、プロジェクトはホスト オペレーティング システム用にコンパイルされます。別のターゲット アーキテクチャを指定するには、TARGET=TARGET_ARCH= を使用します。次の例は、汎用の Cortex-m0 のサンプル Hello World をビルドする方法を示しています。

make -f tensorflow/lite/micro/tools/make/Makefile TARGET=cortex_m_generic TARGET_ARCH=cortex-m0 hello_world_bin

target を指定すると、元のコードの代わりに、使用可能なターゲット固有のソースファイルが使用されます。たとえば、サブディレクトリ examples/hello_world/cortex_m_generic には、ファイル constants.ccoutput_handler.cc の SparkFun Edge 実装が含まれています。これらは、ターゲット cortex_m_generic が指定されるときに使用されます。

プロジェクト名は、プロジェクトの Makefile で確認できます。たとえば、examples/hello_world/Makefile.incHello World の例のバイナリ名を指定します。

最適化されたカーネル

tensorflow/lite/micro/kernels のルートのリファレンス カーネルは純粋な C/C++ で実装され、プラットフォーム固有のハードウェア最適化は含まれていません。

最適化されたバージョンのカーネルは、サブディレクトリで提供されます。たとえば、kernels/cmsis-nn には、Arm の CMSIS-NN ライブラリを利用する、最適化されたカーネルがいくつか含まれています。

最適化されたカーネルを使用してプロジェクトを生成するには、次のコマンドを使用します。<subdirectory_name> は、最適化を含むサブディレクトリの名前に置き換えます。

make -f tensorflow/lite/micro/tools/make/Makefile TAGS=<subdirectory_name> generate_projects

最適化のための新しいサブフォルダを作成して、独自の最適化を追加できます。新たに最適化された実装では、pull リクエストを行うことをおすすめします。

Arduino ライブラリを生成する

ライブラリの新しいビルドを生成する必要がある場合は、TensorFlow リポジトリから次のスクリプトを実行できます。

./tensorflow/lite/micro/tools/ci_build/test_arduino.sh

作成されたライブラリは gen/arduino_x86_64/prj/tensorflow_lite.zip にあります。

新しいデバイスに移行する

TensorFlow Lite for Microcontrollers を新しいプラットフォームやデバイスに移植するためのガイダンスについては、micro/docs/new_platform_support.md をご覧ください。