Modelle erstellen und konvertieren

Mikrocontroller haben begrenzten RAM und Speicher, was die Größe von Modellen für maschinelles Lernen begrenzt. Darüber hinaus unterstützt TensorFlow Lite für Mikrocontroller derzeit eine begrenzte Teilmenge von Operationen, sodass nicht alle Modellarchitekturen möglich sind.

In diesem Dokument wird der Prozess der Konvertierung eines TensorFlow-Modells zur Ausführung auf Mikrocontrollern erläutert. Es beschreibt auch die unterstützten Operationen und gibt einige Anleitungen zum Entwerfen und Trainieren eines Modells, das in begrenzten Speicher passt.

Für eine End-to-End, runnable Beispiel für den Aufbau und ein Modell Umwandlung finden Sie in der folgenden Colab , die Teil der Hallo Welt Beispiel ist:

train_hello_world_model.ipynb

Modellumwandlung

Um ein ausgebildetes TensorFlow Modell konvertiert auf Mikrocontrollern laufen, sollten Sie die Verwendung TensorFlow Lite Konverter Python API . Dadurch wird das Modell in eine umwandeln FlatBuffer , die Verringerung der Modellgröße, und ändern Sie es TensorFlow Lite - Operationen zu verwenden.

Um eine möglichst kleine Modellgröße zu erhalten, sollten Sie prüfen , mit nach dem Training Quantisierung .

In ein C-Array konvertieren

Viele Mikrocontroller-Plattformen bieten keine native Dateisystemunterstützung. Der einfachste Weg, ein Modell aus Ihrem Programm zu verwenden, besteht darin, es als C-Array einzubinden und in Ihr Programm zu kompilieren.

Der folgende UNIX - Befehl wird eine C - Quelldatei erzeugen, die das TensorFlow Lite Modell als enthalten char Array:

xxd -i converted_model.tflite > model_data.cc

Die Ausgabe sieht wie folgt aus:

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 einbinden. Es ist wichtig , die Array - Deklaration zu ändern , um const für eine bessere Speichereffizienz auf Embedded - Plattformen.

Ein Beispiel dafür , wie ein Modell in Ihr Programm aufnehmen und verwenden, finden Sie model.cc in der Hallo Welt Beispiel.

Modellarchitektur und Training

Beim Entwerfen eines Modells für die Verwendung auf Mikrocontrollern ist es wichtig, die Modellgröße, die Arbeitsbelastung und die verwendeten Operationen zu berücksichtigen.

Modellgröße

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

Um ein kleineres Modell zu erstellen, können Sie immer weniger Layer in Ihrer Architektur verwenden. Kleine Modelle leiden jedoch eher unter Underfitting. Dies bedeutet, dass es für viele Probleme sinnvoll ist, das größte Modell zu verwenden, das in den Speicher passt. Die Verwendung größerer Modelle führt jedoch auch zu einer erhöhten Prozessorauslastung.

Arbeitsbelastung

Die Größe und Komplexität des Modells wirkt sich auf die Arbeitsbelastung aus. Große, komplexe Modelle können zu einem höheren Arbeitszyklus führen, was bedeutet, dass der Prozessor Ihres Geräts mehr Zeit mit Arbeiten und weniger Leerlauf verbringt. Dies erhöht den 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-Operationen, was sich auf die Modellarchitekturen auswirkt, die ausgeführt werden können. Wir arbeiten daran, die Betriebsunterstützung sowohl in Bezug auf Referenzimplementierungen als auch in Bezug auf Optimierungen für bestimmte Architekturen auszubauen.

Die unterstützten Operationen können in der Datei zu sehen all_ops_resolver.cc