Neural Network Compatibility Check
Dieses Tool bietet die Möglichkeit die Kompatibilität von ONNX-Modellen zu den Funktionen des Produkts „TF7810 | TwinCAT 3 Vision Neural Network“ zu prüfen. Das „TF7810_NeuralNetworkSupplements.zip“ kann direkt von der Beckhoff Webseite heruntergeladen werden.
Das Paket beinhaltet die ausführbare Datei „OnnxCompatibilityCheck.exe“, zur vereinfachten Anwendung das Power Shell Skript „CheckModelCompatibility.ps1“ und einen Ordner „ONNX_Samples“ mit Beispielmodellen.
Ausführung des Power Shell Skripts
Nach dem Ausführen des Skripts werden zunächst die Versionsinformationen ausgegeben. Zuerst von der Anwendung selbst und dann zu den TwinCAT 3 Vision Bibliotheksversionen, auf die sich die Kompatibilität bezieht. Als Anwender werden Sie aufgefordert, einen Ordner oder Modellpfad anzugeben. Wird ein Ordner angegeben, in dem sich mehrere ONNX-Modelle befinden, werden diese in alphabetischer Reihenfolge getestet. Es ist auch möglich, explizit ein Modell anzugeben, wie z.B. "C:\ONNX_Samples\LemonModel.onnx“.

Eine erfolgreiche Ausführung sieht, z.B. anhand des Lemon Sample Models, wie folgt aus:

Am Ende wird die Ausführung pausiert, um sich die Ausgaben anschauen zu können.
Optionen des Power Shell Skripts
Wenn der Anwender das Skript zum Bearbeiten öffnet, findet er die Parameter $modelPath und $inputShape in Zeile 2 und 3. Der erste Parameter $modelPath ist per Default leer, so dass der Anwender zur Eingabe des Pfads aufgefordert wird. Alternativ kann im Skript ein Ordner- oder ein Modell-Pfad fest hinterlegt werden. Dann erhält der Anwender keine Aufforderung zur Eingabe und es wird direkt der hinterlegte Pfad verwendet.

Per Default ist für den zweiten optionalen $inputShape Parameter das Wort „skip“ hinterlegt, so dass diese Abfrage nicht erscheint und die Anwendung ohne die Option ausgeführt wird. Hier kann ebenfalls ein fester Wert, wie in dem Kommentar mit „1 3 224 224“ angegeben werden. Alternativ kann das Wort „skip“ gelöscht werden, so dass der Anwender zur Eingabe aufgefordert wird. Diese Eingabeaufforderung zum „Model Input Shape“ kann bei der Ausführung des Skripts mit „Enter“ ebenfalls übersprungen werden.
Anwendung der „OnnxCompatibilityCheck.exe“
Die „OnnxCompatibilityCheck.exe“ kann direkt ohne Power Shell Skript ausgeführt werden. In der Windows Eingabeaufforderung sieht der erfolgreiche Test des Lemon Sample Modells z.B. wie folgt aus:

Wird nur der Name der Anwendung angegeben oder zusätzlich -?, -h, -help hinzugefügt und dann mit Enter bestätigt, werden die folgenden Informationen und Hinweise zur Anwendung ausgegeben.

Ergebnisausgaben
Im Folgenden sind die Ergebnisausgaben beschrieben, die bei unterschiedlichen Szenarien ausgegeben werden können:
- Zu Beginn der Ausführung wird geprüft, ob der Pfad gültig ist und die Datei im ONNX-Format vorliegt. Ist dies nicht der Fall, bricht die Ausführung ab und es wird eine entsprechende Meldung ausgegeben.
- Wenn das ONNX-Modell erfolgreich geladen werden konnte, wird dies als erste Information inklusive des Dateinamens ausgegeben.
- Danach folgen Informationen zu den Eingabe- und Ausgabeschichten des Modells, die aus der ONNX-Datei ausgelesen werden:
- Für die Eingabe- und Ausgabeschichten wird in eckigen Klammern die Form des Tensors angegeben. Angezeigt wird die Anzahl der Elemente in der jeweiligen Dimension.
- Wenn die Eingabeschicht mehr als zwei Dimensionen hat, wird zusätzlich noch der ETcVnElementType für die Konvertierung (F_VN_ConvertDataLayout), von einem 2D-Bild zu dem jeweiligen Eingangsformat des Modells, ausgegeben. Als Vorrausetzungen für die korrekte Erkennung des ETcVnElementType wird angenommen, dass N (Sampleanzahl bzw. Batchgröße) = 1 ist und die Anzahl der Kanäle kleiner als die Breite oder Höhe ist.
- Für die Eingangsschicht des Lemon Sample Models sieht das z.B. so aus: „Model input shape: [1, 3, 224, 224], TCVN_DL_4D_NCHW“.
- Wenn es mehr als eine Eingabeschicht gibt, wird deren Anzahl und die jeweilige Form des Tensors ausgegeben. Da die Ausführung von Modellen mit mehr als einer Eingabeschicht nicht unterstützt wird, folgt diese Meldung: „Not supported: Only models with a single input can be executed.“.
- Für die Ausgabeschichten wird zunächst die Anzahl ausgegeben, gefolgt von einer Aufzählung der Schichten mit der jeweiligen Bezeichnung und der Form des Tensors.
- Für die Ausgabeschicht des Lemon Sample Models sieht das z.B. so aus:
„Model outputs: 1
Layer: '367' [1, 3]“ - Neuronale Netze können entweder für ein festes (static) Eingangsformat ausgelegt sein oder die Möglichkeit bieten, mehrere unterschiedliche Eingangsformate (dynamic) verarbeiten zu können. Bei den meisten Modellen ist die Eingabeschicht fest definiert und die Werte des Tensors sind in der ONNX-Datei hinterlegt.
Dann können die Werte ausgelesen, angezeigt und direkt zum Test verwendet werden. - Wenn Modelle mehrere Eingangs- / Bildgrößen unterstützen, fehlen in diesen Fall die Angaben zu den Dimensionen wie z.B. Breite und Höhe des Bildes in der ONNX-Datei. Dann spricht man von einer dynamischen Form der Eingabeschicht. Wenn diese Form der Eingabeschicht erkannt wird, wird folgende Meldung ausgegeben:
„Model input shape: dynamic
To test the execution, please provide the optional [ModelInputshape]
(e.g. OnnxCompatibilityCheck.exe DynamicShape.onnx 1 3 224 224).” - Um ein Modell mit dynamischer Eingabeschicht testen zu können, können ergänzend beim Aufruf der Anwendung die Werte für den „Model Input Shape“ übergeben werden. Ein Beispiel für den Aufruf und die Übergabe der Werte wird mit ausgegeben oder ist in der Hilfe zu sehen.
- Es gibt Modelle, bei denen die Eingabeschicht in der ONNX-Datei fest definiert ist, die aber auch mit anderen Werten ausgeführt werden können. Wenn der Anwender diese Information hat bzw. die weiteren Werte kennt, kann er ebenfalls den Aufruf mit der zusätzlichen Angabe des „Model Input Shape“ verwenden.
- Die Informationen zu den unterstützten Eingangsformaten können in der Regel in der Dokumentation des Modellanbieters, der Quelle des Modells oder im zugehörigen Forschungsartikel gefunden werden. Falls diese Informationen nicht explizit angegeben sind, können diese auch durch die Untersuchung der Modellarchitektur oder durch die Verwendung von Tools zur Inspektion der ONNX-Datei abgeleitet werden.
- Für den Fall, dass ein Modell nicht ausgeführt werden kann, wird neben der grundsätzlichen Information versucht, eine mögliche Ursache auszugeben. Falls die Ursache nicht eindeutig ist, wird keine zusätzliche Information ausgegeben. Mögliche Ursachen sind z.B. nicht bekannte oder unterstützte Operatoren / Datentypen oder eine neuere ONNX „opset number“. Wenn ein Operator als Ursache genannt wird, kann das auch ein Folgeproblem sein. Daher sollten auch die Operatoren der vorherigen Schicht analysiert werden.