Modelle erstellen und umwandeln

Der RAM und der Speicher von Mikrocontrollern sind begrenzt. Größen von ML-Modellen. Außerdem kann LiteRT für Mikrocontroller unterstützen derzeit nur eine begrenzte Teilmenge von Operationen, Modellarchitekturen möglich.

In diesem Dokument wird das Konvertieren eines TensorFlow-Modells für die Ausführung erläutert Mikrocontroller. Außerdem werden die unterstützten Operationen beschrieben und einige Anleitungen zum Entwerfen und Trainieren eines Modells für den begrenzten Speicher.

Ein umfassendes, ausführbares Beispiel für das Erstellen und Konvertieren eines Modells finden Sie in der Hallo Welt Beispiel.

Modellkonvertierung

Um ein trainiertes TensorFlow-Modell für die Ausführung auf Mikrocontrollern zu konvertieren, die Python-API für LiteRT-Converter Dadurch wird das Modell in ein FlatBuffer, wobei die Modellgröße reduziert wird, und ändern Sie es so, dass LiteRT-Operationen verwendet werden können.

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

In ein C-Array umwandeln

Viele Mikrocontroller-Plattformen bieten keine native Dateisystemunterstützung. Die Am einfachsten ist es, ein Modell aus Ihrem Programm als C-Array zu verwenden. in Ihr Programm kompilieren.

Der folgende Unix-Befehl generiert eine C-Quelldatei, die die LiteRT-Modell als char-Array:

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;

Sobald Sie die Datei generiert haben, können Sie sie in Ihr Programm aufnehmen. Es ist Für besseren Arbeitsspeicher ist es wichtig, die Array-Deklaration in const zu ändern Effizienz auf eingebetteten Plattformen.

Ein Beispiel dafür, wie Sie ein Modell in Ihr Programm aufnehmen und verwenden können, finden Sie unter hello_world_test.cc im Beispiel Hello World.

Modellarchitektur und -training

Beim Entwerfen eines Modells zur Verwendung auf Mikrocontrollern ist es wichtig, die Modellgröße, die Arbeitslast und die verwendeten Vorgänge.

Modellgröße

Ein Modell muss so klein sein, dass es in den Arbeitsspeicher Ihres Zielgeräts passt. des Programms, sowohl als Binärprogramm als auch zur Laufzeit.

Wenn Sie ein kleineres Modell erstellen möchten, können Sie immer kleinere Ebenen in Ihrem Architektur. Bei kleinen Modellen ist jedoch die Wahrscheinlichkeit einer Unteranpassung höher. Bei vielen Problemen ist es also sinnvoll, das größte Modell zu verwenden, die in den Speicher passen. Größere Modelle führen jedoch auch zu Prozessorauslastung erhöht.

Arbeitslast

Größe und Komplexität des Modells haben Auswirkungen auf die Arbeitslast. Groß, komplex kann dies zu einem höheren Arbeitszyklus führen. Das bedeutet, dass der Prozessor Ihres Geräts mehr Zeit mit der Arbeit und weniger Zeit mit Inaktivität verbringen. Dadurch wird der Stromverbrauch erhöht. und Wärmeabgabe. Dies kann je nach .

Unterstützung bei Vorgängen

LiteRT für Mikrocontroller unterstützt derzeit eine begrenzte Anzahl von TensorFlow-Vorgänge, die sich auf die Modellarchitekturen auswirken, ausgeführt werden soll. Wir arbeiten daran, die Unterstützung für den Betrieb zu erweitern, auf Implementierungen und Optimierungen für bestimmte Architekturen verweisen.

Die unterstützten Vorgänge sind in der Datei aufgeführt micro_mutable_ops_resolver.h