Kompatibilität mit TensorFlow Lite und TensorFlow-Operatoren

Die in Ihrem Modell verwendeten Operatoren für maschinelles Lernen (ML) können sich auf die Konvertierung eines TensorFlow-Modells in das TensorFlow Lite-Format auswirken. Der TensorFlow Lite-Konverter unterstützt eine begrenzte Anzahl von TensorFlow-Vorgängen, die in gängigen Inferenzmodellen verwendet werden, sodass nicht jedes Modell direkt konvertiert werden kann. Mit dem Konvertierungstool können Sie zusätzliche Operatoren einbinden. Allerdings müssen Sie zum Konvertieren eines Modells auf diese Weise auch die TensorFlow Lite-Laufzeitumgebung ändern, die Sie zum Ausführen des Modells verwenden. Dadurch sind die Möglichkeiten zur Nutzung von standardmäßigen Laufzeitbereitstellungsoptionen wie Google Play-Diensten möglicherweise eingeschränkt.

Der TensorFlow Lite Converter analysiert die Modellstruktur und wendet Optimierungen an, um ihn mit den direkt unterstützten Operatoren kompatibel zu machen. Abhängig von den ML-Operatoren in Ihrem Modell kann der Converter diese Operatoren beispielsweise entfernen oder zusammenführen, um sie seinen TensorFlow Lite-Gegenstücken zuzuordnen.

Selbst bei unterstützten Vorgängen werden aus Leistungsgründen manchmal bestimmte Nutzungsmuster erwartet. Um zu verstehen, wie ein TensorFlow-Modell erstellt wird, das mit TensorFlow Lite verwendet werden kann, sollten Sie sorgfältig überlegen, wie Vorgänge konvertiert und optimiert werden und welche Einschränkungen durch diesen Prozess auferlegt werden.

Unterstützte Operatoren

Die in TensorFlow Lite integrierten Operatoren sind eine Teilmenge der Operatoren, die Teil der TensorFlow Core-Bibliothek sind. Das TensorFlow-Modell kann auch benutzerdefinierte Operatoren in Form von zusammengesetzten Operatoren oder neuen von Ihnen definierten Operatoren enthalten. Das folgende Diagramm zeigt die Beziehungen zwischen diesen Operatoren.

TensorFlow-Operatoren

Aus dieser Reihe von ML-Modelloperatoren gibt es drei Modelltypen, die vom Konvertierungsprozess unterstützt werden:

  1. Modelle nur mit integriertem TensorFlow Lite-Operator. (Empfohlen)
  2. Modelle mit den integrierten Operatoren und ausgewählten TensorFlow-Kernoperatoren.
  3. Modelle mit integrierten Operatoren, TensorFlow-Kernoperatoren und/oder benutzerdefinierten Operatoren.

Wenn Ihr Modell nur Vorgänge enthält, die nativ von TensorFlow Lite unterstützt werden, benötigen Sie keine zusätzlichen Flags für die Konvertierung. Dies ist der empfohlene Pfad, da dieser Modelltyp reibungslos konvertiert wird und einfacher zu optimieren und mit der TensorFlow Lite-Standardlaufzeit auszuführen ist. Sie haben auch mehr Bereitstellungsoptionen für Ihr Modell, z. B. Google Play-Dienste. Informationen zum Einstieg finden Sie in der Anleitung zum Konverter für TensorFlow Lite. Eine Liste der integrierten Operatoren finden Sie auf der Seite "TensorFlow Lite Ops".

Wenn Sie ausgewählte TensorFlow-Vorgänge aus der Kernbibliothek einschließen möchten, müssen Sie dies bei der Konvertierung angeben und dafür sorgen, dass Ihre Laufzeit diese Vorgänge enthält. Eine ausführliche Anleitung finden Sie unter TensorFlow-Operatoren auswählen.

Vermeiden Sie nach Möglichkeit die letzte Option, benutzerdefinierte Operatoren in das konvertierte Modell aufzunehmen. Benutzerdefinierte Operatoren sind entweder Operatoren, die durch die Kombination mehrerer primitiver TensorFlow-Kernoperatoren erstellt wurden, oder durch die Definition eines komplett neuen Operators. Wenn benutzerdefinierte Operatoren konvertiert werden, können sie die Größe des Gesamtmodells erhöhen, da Abhängigkeiten außerhalb der integrierten TensorFlow Lite-Bibliothek anfallen. Benutzerdefinierte Vorgänge, die nicht speziell für die Bereitstellung von Mobilgeräten oder Geräten erstellt wurden, können bei der Bereitstellung auf ressourcenbeschränkten Geräten im Vergleich zu einer Serverumgebung zu einer schlechteren Leistung führen. Wie bei ausgewählten TensorFlow-Kernoperatoren müssen Sie auch bei benutzerdefinierten Operatoren die Modelllaufzeitumgebung ändern, sodass Sie keine Standardlaufzeitdienste wie die Google Play-Dienste nutzen können.

Unterstützte Typen

Die meisten TensorFlow Lite-Vorgänge zielen sowohl auf Gleitkommainferenzen (float32) als auch auf quantisierte Inferenzen (uint8, int8) ab. Für andere Typen wie tf.float16 und Strings sind viele Vorgänge noch nicht verfügbar.

Der andere Unterschied zwischen Gleitkomma- und quantisierten Modellen besteht darin, wie sie konvertiert werden. Dabei werden nicht nur unterschiedliche Versionen der Vorgänge verwendet. Die quantisierte Umwandlung erfordert Informationen zum dynamischen Bereich für Tensoren. Dies erfordert eine "falsche Quantisierung" während des Modelltrainings, das Abrufen von Bereichsinformationen über ein Kalibrierungs-Dataset oder eine "schnelle" Bereichsschätzung. Weitere Informationen finden Sie unter Quantisierung.

Unkomplizierte Conversions, ständiges Falten und Zusammenführen

Eine Reihe von TensorFlow-Vorgängen kann von TensorFlow Lite verarbeitet werden, obwohl es kein direktes Äquivalent gibt. Dies ist bei Operationen der Fall, die einfach aus dem Graphen entfernt (tf.identity), durch Tensoren (tf.placeholder) ersetzt oder in komplexere Operationen (tf.nn.bias_add) zusammengeführt werden können. Manchmal können auch einige unterstützte Operationen durch einen dieser Prozesse entfernt werden.

Hier ist eine nicht vollständige Liste von TensorFlow-Vorgängen, die normalerweise aus der Grafik entfernt werden:

  • tf.add
  • tf.debugging.check_numerics
  • tf.constant
  • tf.div
  • tf.divide
  • tf.fake_quant_with_min_max_args
  • tf.fake_quant_with_min_max_vars
  • tf.identity
  • tf.maximum
  • tf.minimum
  • tf.multiply
  • tf.no_op
  • tf.placeholder
  • tf.placeholder_with_default
  • tf.realdiv
  • tf.reduce_max
  • tf.reduce_min
  • tf.reduce_sum
  • tf.rsqrt
  • tf.shape
  • tf.sqrt
  • tf.square
  • tf.subtract
  • tf.tile
  • tf.nn.batch_norm_with_global_normalization
  • tf.nn.bias_add
  • tf.nn.fused_batch_norm
  • tf.nn.relu
  • tf.nn.relu6

Experimentelle Vorgänge

Die folgenden TensorFlow Lite-Vorgänge sind vorhanden, aber nicht für benutzerdefinierte Modelle bereit:

  • CALL
  • CONCAT_EMBEDDINGS
  • CUSTOM
  • EMBEDDING_LOOKUP_SPARSE
  • HASHTABLE_LOOKUP
  • LSH_PROJECTION
  • SKIP_GRAM
  • SVDF