Modelle erstellen und umwandeln

Mikrocontroller haben einen begrenzten RAM und Speicher, was die Größe der Modelle für maschinelles Lernen einschränkt. Außerdem unterstützt TensorFlow Lite für Mikrocontroller derzeit eine begrenzte Teilmenge von Vorgängen, sodass nicht alle Modellarchitekturen möglich sind.

In diesem Dokument wird die Konvertierung eines TensorFlow-Modells zur Ausführung auf Mikrocontrollern erläutert. Außerdem werden die unterstützten Vorgänge und Anleitungen zum Entwerfen und Trainieren eines Modells für begrenzten Arbeitsspeicher beschrieben.

Ein ausführbares End-to-End-Beispiel für das Erstellen und Konvertieren eines Modells finden Sie im Beispiel Hello World.

Modellkonvertierung

Wenn Sie ein trainiertes TensorFlow-Modell für die Ausführung auf Mikrocontrollern konvertieren möchten, sollten Sie die Python API für den TensorFlow Lite-Converter verwenden. Dadurch wird das Modell in ein FlatBuffer konvertiert, die Modellgröße wird verringert und es wird so geändert, dass es TensorFlow Lite-Vorgänge verwendet.

Sie sollten die Quantisierung nach dem Training verwenden, um die kleinstmögliche Modellgröße zu erhalten.

In ein C-Array konvertieren

Viele Mikrocontroller-Plattformen unterstützen keine native Dateisystemunterstützung. Die einfachste Möglichkeit, ein Modell aus Ihrem Programm zu verwenden, besteht darin, es als C-Array einzuschließen und in Ihr Programm zu kompilieren.

Der folgende Unix-Befehl generiert eine C-Quelldatei, die das TensorFlow Lite-Modell als char-Array enthält:

xxd -i converted_model.tflite > model_data.cc

Die Ausgabe sollte in etwa so aussehen:

unsigned char converted_model_tflite[] = {
  0x18, 0x00, 0x00, 0x00, 0x54, 0x46, 0x4c, 0x33, 0x00, 0x00, 0x0e, 0x00,
  // <Lines omitted>
};
unsigned int converted_model_tflite_len = 18200;

Nachdem Sie die Datei generiert haben, können Sie sie in Ihr Programm aufnehmen. Es ist wichtig, die Array-Deklaration in const zu ändern, um die Speichereffizienz auf eingebetteten Plattformen zu verbessern.

Ein Beispiel für die Aufnahme und Verwendung eines Modells in Ihr Programm finden Sie unter hello_world_test.cc im Hello World-Beispiel.

Modellarchitektur und Training

Beim Entwerfen eines Modells für die Verwendung mit Mikrocontrollern ist es wichtig, die Modellgröße, die Arbeitslast und die verwendeten Vorgänge zu berücksichtigen.

Modellgröße

Ein Modell muss klein genug sein, um zusammen mit dem Rest Ihres Programms in den Arbeitsspeicher Ihres Zielgeräts zu passen, sowohl als Binärprogramm als auch zur Laufzeit.

Um ein kleineres Modell zu erstellen, können Sie weniger und dafür kleinere Ebenen in Ihrer Architektur verwenden. Bei kleinen Modellen kommt es jedoch eher zu einer Unteranpassung. Daher ist es bei vielen Problemen sinnvoll, das größte Modell zu verwenden, das in den Speicher passt. Größere Modelle führen jedoch auch zu einer höheren Prozessorauslastung.

Arbeitslast

Die Größe und Komplexität des Modells haben Einfluss auf die Arbeitslast. Große, komplexe Modelle können zu einem höheren Arbeitszyklus führen, was bedeutet, dass der Prozessor Ihres Geräts mehr Zeit für die Arbeit benötigt und weniger Zeit inaktive Zeit verbringt. Dadurch erhöhen sich der Stromverbrauch und die Wärmeabgabe, was je nach Anwendung ein Problem sein kann.

Betriebsunterstützung

TensorFlow Lite für Mikrocontroller unterstützt derzeit eine begrenzte Teilmenge von TensorFlow-Vorgängen, was sich auf die auszuführenden Modellarchitekturen auswirkt. Wir arbeiten daran, die Betriebsunterstützung zu erweitern, sowohl im Hinblick auf Referenzimplementierungen als auch für Optimierungen für bestimmte Architekturen.

Die unterstützten Vorgänge finden Sie in der Datei micro_mutable_ops_resolver.h.