Verstehen Sie die C++-Bibliothek

Die TensorFlow Lite für Mikrocontroller C ++ Bibliothek ist Teil des TensorFlow Repository . Es ist so konzipiert, dass es lesbar, leicht zu modifizieren, gut getestet, einfach zu integrieren und mit regulärem TensorFlow Lite kompatibel ist.

Das folgende Dokument skizziert die Grundstruktur der C++-Bibliothek und gibt Hinweise zum Erstellen eines eigenen Projekts.

Dateistruktur

Das micro - Stammverzeichnis hat eine relativ einfache Struktur. Da es sich jedoch innerhalb des umfangreichen TensorFlow-Repositorys befindet, haben wir Skripte 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 Microcontrollers-Interpreters befinden sich im Stammverzeichnis des Projekts, begleitet von Tests:

  • all_ops_resolver.h oder micro_mutable_op_resolver.h kann verwendet werden , um die Operationen , die durch den Interpreter verwendet , um das Modell auszuführen. Seit all_ops_resolver.h zieht in jedem verfügbaren Betrieb, verwendet es eine Menge Speicher. In Produktionsanwendungen, die Sie verwenden sollten micro_mutable_op_resolver.h nur die Operationen Ihr Modell Bedürfnisse zu ziehen in.
  • micro_error_reporter.h Ausgänge Debug - Informationen.
  • micro_interpreter.h enthält Code zum Griff und führen Modelle.

Siehe Lassen Sie sich mit Mikrocontrollern begann für einen Durchlauf der typischen Nutzung.

Das Build-System sieht plattformspezifische Implementierungen bestimmter Dateien vor. Diese werden in einem Verzeichnis mit dem Namen Plattform befindet, zum Beispiel sparkfun_edge .

Es gibt mehrere andere Verzeichnisse, darunter:

  • kernel , die den Betrieb Implementierungen und den damit verbundenen Code enthält.
  • tools , die enthalten Build - Tools und dessen Ausgang.
  • examples , die Beispielcode enthält.

Starten Sie ein neues Projekt

Wir empfehlen die Hallo Welt Beispiel als Vorlage für neue Projekte verwenden. Sie können eine Version davon für die Plattform Ihrer Wahl erhalten, indem Sie die Anweisungen in diesem Abschnitt befolgen.

Verwenden Sie die Arduino-Bibliothek

Wenn Sie Arduino verwenden, ist das Hallo Welt Beispiel in der mitgelieferten Arduino_TensorFlowLite Arduino Bibliothek, die Sie von dem Arduino IDE und in herunterladen Arduino erstellen .

Sobald die Bibliothek hinzugefügt wurde, gehen Sie zu File -> Examples . Sie sollten ein Beispiel in der Nähe der Unterseite der Liste mit dem Namen sehen TensorFlowLite:hello_world . Wählen Sie es aus und klicken Sie auf hello_world das Beispiel zu laden. Anschließend können Sie eine Kopie des Beispiels speichern und als Grundlage für Ihr eigenes Projekt verwenden.

Projekte für andere Plattformen generieren

TensorFlow Lite für Mikrocontroller in der Lage , eigenständige Projekte zu generieren , die alle notwendigen Quelldateien enthalten, unter Verwendung eines Makefile . Die derzeit unterstützten Umgebungen sind Keil, Make und Mbed.

Um diese Projekte mit Make klonen das generieren TensorFlow Repository und den folgenden Befehl ausführen:

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. Sobald es fertig ist, sollten Sie einige Ordner in einem Pfad wie geschaffen sehen tensorflow/lite/micro/tools/make/gen/linux_x86_64/prj/ (der genaue Pfad hängt von Ihrem Host - Betriebssystem). Diese Ordner enthalten die generierten Projekt- und Quelldateien.

Nach dem Ausführen des Befehls, werden Sie in der Lage sein , die Hallo Welt Projekte finden tensorflow/lite/micro/tools/make/gen/linux_x86_64/prj/hello_world . Zum Beispiel hello_world/keil das Keil - Projekt enthalten.

Führen Sie die Tests durch

Verwenden Sie den folgenden Befehl, um die Bibliothek zu erstellen und alle Komponententests auszuführen:

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

Um einen einzelnen Test ausführen, verwenden Sie den folgenden Befehl ein , ersetzen <test_name> mit dem Namen des Tests:

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

Sie finden die Testnamen in den Makefiles des Projekts. Zum Beispiel examples/hello_world/Makefile.inc gibt die Testnamen für das Hallo Welt Beispiel.

Binärdateien erstellen

Um ein lauffähiges binäre für ein bestimmtes Projekt (wie eine Beispielanwendung) zu bauen, verwenden Sie den folgenden Befehl ein , ersetzen <project_name> mit dem Projekt , das Sie bauen möchten:

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

Zum Beispiel wird der folgende Befehl eine binäre für die Hallo Welt Anwendung erstellen:

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

Standardmäßig wird das Projekt für das Host-Betriebssystem kompiliert. Um eine andere Zielarchitektur festzulegen, verwenden TARGET= . Das folgende Beispiel zeigt , wie das Hallo Welt Beispiel für den SparkFun Rand bauen:

make -f tensorflow/lite/micro/tools/make/Makefile TARGET=sparkfun_edge hello_world_bin

Wenn ein Ziel angegeben wird, werden alle verfügbaren zielspezifischen Quelldateien anstelle des Originalcodes verwendet. Zum Beispiel kann das Unterverzeichnis examples/hello_world/sparkfun_edge enthält SparkFun Edge - Implementierungen der Dateien constants.cc und output_handler.cc , die verwendet werden , wenn das Ziel sparkfun_edge angegeben ist.

Sie finden die Projektnamen in den Makefiles des Projekts. Zum Beispiel examples/hello_world/Makefile.inc gibt die binären Namen für das Hallo Welt Beispiel.

Optimierte Kernel

Die Referenzkerne in der Wurzel von tensorflow/lite/micro/kernels wird in reinen C / C ++ implementiert, und umfasst nicht plattformspezifische Hardwareoptimierungen.

Optimierte Versionen von Kerneln werden in Unterverzeichnissen bereitgestellt. Zum Beispiel kernels/cmsis-nn enthält mehrere optimierten Kernel dass nutzt Arms des CMSIS-NN - Bibliothek.

So generieren Projekte optimierte Kernel, verwenden Sie den folgenden Befehl ein , ersetzen <subdirectory_name> mit dem Namen des Unterverzeichnisses die Optimierungen enthalten:

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 dafür erstellen. Wir empfehlen Pull-Requests für neue optimierte Implementierungen.

Generieren Sie die Arduino-Bibliothek

Ein nächtlicher Build der Arduino-Bibliothek ist über den Bibliotheksmanager der Arduino-IDE verfügbar.

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 tensorflow/lite/micro/tools/make/gen/arduino_x86_64/prj/tensorflow_lite.zip .

Portierung auf neue Geräte

Anleitung für die Portierung TensorFlow Lite für Mikrocontroller auf neue Plattformen und Geräte finden Sie in micro/README.md .