Konvertieren von ONNX in XML und BML
Im Folgenden wird beschrieben, wie Sie eine oder mehrere ONNX-Dateien in das Beckhoff-spezifische XML- bzw. BML-Format konvertieren können.
Warum ONNX in XML oder BML konvertieren?
Das ONNX-Format kann von der ML-Runtime auf der Zielplattform nicht direkt geladen werden. Daher ist im Engineering ein Konvertierungsschritt notwendig, bevor die ML-Beschreibungsdatei auf das Zielsystem übertragen wird. Die Erstellung einer XML-Datei hat den Vorteil, dass sie offen lesbar ist. So können während der Engineering-Phase alle Informationen in der XML über einen einfachen XML-Editor eingesehen werden. Die BML-Datei ist binär und damit der Inhalt nicht mehr einfach einsehbar. Außerdem wird eine BML-Datei von der ML-Runtime deutlich schneller geladen, sodass die BML-Datei für die Auslieferung empfohlen wird.
Welche TwinCAT-spezifischen Informationen können in der XML- bzw. BML-Datei eingetragen werden?
Erstellen von Multi-Engines
Es ist möglich, mehr als ein ML-Modell in eine Instanz des FB_MllPrediction zu laden. Ein Wechsel zwischen den Modellen, im Folgenden in diesem Zusammenhang Engines genannt, ist ohne Latenz möglich. So kann zum Beispiel ein Set an Modellen für unterschiedliche Arbeitsbereiche der Maschine trainiert werden und während der Inferenzphase latenzfrei die korrekte Engine angesprochen werden.
Voraussetzung für das Zusammenführen von mehreren Modellen ist, dass die Modellstruktur, in der Beckhoff XML der Bereich <Configuration>, für alle Modelle identisch ist. Beispielsweise bedeutet das, dass nur MLPs zusammengeführt werden können, wenn die Struktur (Anzahl der Layer, Anzahl der Neuronen pro Layer und Aktivierungsfunktionen) gleich sind. Nur die Modellparameter, im Beispiel des MLPs also die Gewichte, dürfen unterschiedlich sein.
Vergleiche in der Beckhoff ML XML-Beschreibung: XML Tag Parameters.
Beim Zusammenführen werden also mehrere KI-Modelle mit identischer Struktur, aber unterschiedlichen Parametern in einer Beschreibungsdatei zusammengefasst. Die einzelnen Modelle (=Engines) werden über eine einzige Beschreibungsdatei in der ML Runtime geladen. Der Predict-Methode ist beim Aufruf in der SPS jeweils die Engine-ID zu übergeben, welche adressiert werden soll. Über die PredictRef-Methode kann die Engine über einen String adressiert werden. Ebenso steht eine GetEngineIdFromRef-Methode zur Verfügung, um aus der Referenz die zugehörige ID zu finden.
Multi-Engines sind als Organisationseinheit zu verstehen. Es ist natürlich auch möglich, mehrere Instanzen eines FB_MllPrediction in der SPS zu instanziieren und in jeden FB eine eigene Beschreibungsdatei zu laden.
Mindestversion des Treibers der ML-Runtime
Beim Konvertieren der Beschreibungsdatei werden automatisch zwei Einträge in die XML- bzw. BML-Datei gesetzt. Zum einen wird die Version der konvertierenden Komponente eingetragen und zum anderen wird eine „required version“ des ML-Runtime Treibers hinzugefügt. Beim Laden der Modelldatei in TwinCAT wird die „required version“ geprüft und bei Nicht-Bestehen der Abfrage eine Warnung ausgegeben.
Vergleiche in der Beckhoff ML XML-Beschreibung: XML Tag AuxilliarySpecifictaions.
Welche Anwendungsspezifischen Informationen können in der XML- bzw. BML-Datei eingetragen werden?
Eingangs- und Ausgangsskalierungen
Häufig werden die Eingänge des KI-Modells für den Trainingsprozess skaliert. Für die Inferenz ist diese Skalierung dann ebenfalls durchzuführen. Diese kann entweder von Hand in der SPS implementiert, oder direkt als Information in die XML- bzw. BML-Datei eingetragen werden. Sind die Skalierungseinträge gesetzt, wird die Skalierung automatisch durchgeführt. Zur Skalierung sind ein Scaling und ein Offset anzugeben. Es gilt:
y = x * Scaling + Offset
Werden skalierte Inputs für ein Modell verwendet, ist in der Regel auch eine Rückskalierung der Modell-Outputs notwendig. Daher ist neben der Input-Skalierung auch eine Output-Skalierung verfügbar.
Output Transformation nur für ausgesuchte Modelle Während für alle KI-Modelle eine Input-Transformation möglich ist, können Output-Transformations nur für Modelle vom Typ Regression verwendet werden. |
Vergleiche in der Beckhoff ML XML-Beschreibung: XML Tag AuxilliarySpecifictaions.
Modellname, Modellversion, Modellbeschreibung, …
Zur eindeutigen Identifizierung einer Modellbeschreibungsdatei ist es möglich, diverse Beschreibungen eines Modells hinzuzufügen. Diese sind jeweils als freier String verwendbar:
- Eine Modellversion
- Ein Modellname
- Eine Modellbeschreibung
- Ein Modell Autor
- Weitere optionale Tags
Vergleiche in der Beckhoff ML XML-Beschreibung: XML Tag AuxilliarySpecifictaions.
Freier Custom Attributes Bereich
Custom Attributes sind optional und können vom Anwender frei genutzt werden. Die Anzahl der Attribute und die Anzahl der XML-Tags sind nicht begrenzt. Die Attribute werden in der XML/BML typisiert, sodass die Einträge in der SPS wieder ausgelesen werden können. Dafür stehen die Methoden GetCustomAttribute_array, GetCustomAttribute_fp64, GetCustomAttribute_int64 und GetCustomAttribute_str zur Verfügung. Siehe auch Ausführliches Beispiel.
Beispiele für die Anwendung von Custom Attributes können sein:
- Angabe einer internen Version oder Identifikationsnummer
- Angabe des Input-Bereichs der einzelnen Features
- Beschreibung der Eingänge und Ausgänge
- …
Vergleiche in der Beckhoff ML XML-Beschreibung: XML Tag CustomAttributes.
Wie kann ich Dateien konvertieren und Informationen ergänzen?
Zur einfachen Integration des Konvertier- und Informationsmodellierungs-Schritts in Ihren Arbeitsablauf werden unterschiedliche Interfaces angeboten:
- Eine GUI im TwinCAT XAE „Machine Learning Model Manager“
- Ein CLI „mllib_toolbox.exe“
- Eine API als Python Package „beckhoff.toolbox“
Nicht jedes Interface bietet alle oben beschriebenen Aktionen an. Das CLI ist limitiert auf grundlegende Anwendungen – hauptsächlich Konvertieren. Die Python API und das GUI bieten den größten Funktionsumfang.