C++-Bibliothek

Die C++-Bibliothek von TensorFlow Lite for Microcontrollers ist Teil des TensorFlow-Repositorys. Sie wurde so entwickelt, dass sie lesbar, leicht zu ändern, gut getestet, leicht zu integrieren und mit dem regulären TensorFlow Lite kompatibel ist.

Das folgende Dokument enthält eine grundlegende Struktur der C++-Bibliothek und Informationen zum Erstellen Ihres eigenen Projekts.

Dateistruktur

Das Stammverzeichnis micro hat eine relativ einfache Struktur. Da sie sich jedoch im umfassenden TensorFlow-Repository befindet, haben wir Skripts und vorgenerierte Projektdateien erstellt, die die relevanten Quelldateien isoliert in verschiedenen eingebetteten Entwicklungsumgebungen bereitstellen.

Schlüsseldateien

Die wichtigsten Dateien für die Verwendung des TensorFlow Lite for Microcontroller-Interpreters befinden sich im Stammverzeichnis des Projekts, begleitet von Tests:

[`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.

Eine Schritt-für-Schritt-Anleitung für eine typische Verwendung finden Sie unter Erste Schritte mit Mikrocontrollern.

Das Build-System ermöglicht plattformspezifische Implementierungen bestimmter Dateien. Sie befinden sich in einem Verzeichnis mit dem Plattformnamen, z. B. cortex-m.

Es gibt noch weitere Verzeichnisse, z. B.:

  • kernel, die Vorgangsimplementierungen und den zugehörigen Code enthält.
  • tools, das Build-Tools und deren Ausgabe enthält.
  • examples mit Beispielcode.

Neues Projekt starten

Wir empfehlen, das Beispiel Hello World als Vorlage für neue Projekte zu verwenden. Sie können eine Version für Ihre gewünschte Plattform anfordern. Folgen Sie dazu der Anleitung in diesem Abschnitt.

Arduino-Bibliothek verwenden

Wenn Sie Arduino verwenden, ist das Beispiel Hello World in der Arduino-Bibliothek Arduino_TensorFlowLite enthalten, die Sie manuell in der Arduino-IDE und in Arduino Create installieren können.

Rufen Sie File -> Examples auf, nachdem die Bibliothek hinzugefügt wurde. Am Ende der Liste sollte ein Beispiel mit dem Namen TensorFlowLite:hello_world zu sehen sein. Wählen Sie sie aus und klicken Sie auf hello_world, um das Beispiel zu laden. Anschließend können Sie eine Kopie des Beispiels speichern und als Grundlage Ihres eigenen Projekts verwenden.

Projekte für andere Plattformen generieren

TensorFlow Lite for Microcontrollers kann eigenständige Projekte generieren, die alle erforderlichen Quelldateien mithilfe einer Makefile enthalten. Die derzeit unterstützten Umgebungen sind Keil, Make und Mbed.

Um diese Projekte mit Make zu generieren, klonen Sie das TensorFlow/tflite-micro-Repository und führen den folgenden Befehl aus:

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

Dies dauert einige Minuten, da einige große Toolchains für die Abhängigkeiten heruntergeladen werden müssen. Anschließend sollten einige Ordner in einem Pfad wie gen/linux_x86_64/prj/ angezeigt werden. Der genaue Pfad hängt von Ihrem Hostbetriebssystem ab. Diese Ordner enthalten die erstellten Projekt- und Quelldateien.

Nachdem Sie den Befehl ausgeführt haben, finden Sie die Hello World-Projekte in gen/linux_x86_64/prj/hello_world. hello_world/keil enthält beispielsweise das Keil-Projekt.

Tests ausführen

Verwenden Sie den folgenden Befehl, um die Bibliothek zu erstellen und alle zugehörigen Einheitentests auszuführen:

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

Verwenden Sie den folgenden Befehl, um einen einzelnen Test auszuführen. Ersetzen Sie dabei <test_name> durch den Namen des Tests:

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

Sie finden die Testnamen in den Makefiles des Projekts. So gibt examples/hello_world/Makefile.inc beispielsweise die Testnamen für das Hello World-Beispiel an.

Binärdateien erstellen

Verwenden Sie den folgenden Befehl, um eine ausführbare Binärdatei für ein bestimmtes Projekt (z. B. eine Beispielanwendung) zu erstellen. Ersetzen Sie dabei <project_name> durch das Projekt, das Sie erstellen möchten:

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

Mit dem folgenden Befehl wird beispielsweise ein Binärprogramm für die Anwendung Hello World erstellt:

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

Standardmäßig wird das Projekt für das Hostbetriebssystem kompiliert. Verwenden Sie TARGET= und TARGET_ARCH=, um eine andere Zielarchitektur anzugeben. Das folgende Beispiel zeigt, wie Sie das Beispiel Hello World für ein generisches cortex-m0 erstellen:

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

Wenn ein Ziel angegeben ist, werden alle verfügbaren zielspezifischen Quelldateien anstelle des ursprünglichen Codes verwendet. Das Unterverzeichnis examples/hello_world/cortex_m_generic enthält beispielsweise SparkFun Edge-Implementierungen der Dateien constants.cc und output_handler.cc, die verwendet werden, wenn das Ziel cortex_m_generic angegeben ist.

Sie finden die Projektnamen in den Makefiles des Projekts. Mit examples/hello_world/Makefile.inc werden beispielsweise die Binärnamen für das Beispiel Hello World angegeben.

Optimierte Kernel

Die Referenz-Kernels im Stammverzeichnis von tensorflow/lite/micro/kernels werden in reinem C/C++ implementiert und enthalten keine plattformspezifischen Hardwareoptimierungen.

Optimierte Kernel-Versionen werden in Unterverzeichnissen bereitgestellt. kernels/cmsis-nn enthält beispielsweise mehrere optimierte Kernel, die die CMSIS-NN-Bibliothek von Arm nutzen.

Verwenden Sie den folgenden Befehl, um Projekte mit optimierten Kernels zu generieren. Ersetzen Sie dabei <subdirectory_name> durch den Namen des Unterverzeichnisses, das die Optimierungen enthält:

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

Sie können Ihre eigenen Optimierungen hinzufügen, indem Sie einen neuen Unterordner erstellen. Wir unterstützen Pull-Anfragen für neue optimierte Implementierungen.

Arduino-Bibliothek generieren

Wenn Sie einen neuen Build der Bibliothek generieren müssen, können Sie das folgende Skript aus dem TensorFlow-Repository ausführen:

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

Die resultierende Bibliothek finden Sie in gen/arduino_x86_64/prj/tensorflow_lite.zip.

Port zu neuen Geräten

Eine Anleitung zur Portierung von TensorFlow Lite für Mikrocontroller auf neue Plattformen und Geräte finden Sie unter micro/docs/new_platform_support.md.