ONNX Support
Unterstützte ONNX opset Version
Der TwinCAT Machine Learning Server, genauer der Dienst TcMlServer, unterstützt die ONNX Opset Version 21. Eine Abwärtskompatibilität zu jüngeren ONNX Opset Versionen ist in der Regel seitens ONNX gegeben.
Die verwendete Opset Version wird normalerweise im ONNX-File unter imports geführt. Im untenstehenden Bild, visualisiert mit Netron, beispielhaft ONNX Opset Version 18.
Einschränkungen unterstützter ONNX-Eigenschaften
Keine dynamischen Input- oder Output-Shapes
Dynamische Input- oder Output-Shapes werden nicht unterstützt. Nur der führende Batchsize Parameter darf eine dynamische Größe sein (siehe nächster Absatz).
Erlaubt sind beispielsweise:
float32[244, 244, 1]
float32[1, 3, 244, 244]
float32[5, 244, 244, 3]
Nicht erlaubt sind:
float32[244, 244, ?]
float32[244, height, 3]
float32[?, 244, 244, ?]
float32[1, 244, 244, unknown]
Sie können die Shape von ONNX Nodes, z. B. mit Hilfe des onnxruntime pakets in Python, schnell fixieren, siehe Make dynamic input shape fixed | onnxruntime.
Aus einer Shape…
float32[-1, 3, ?, ?]
wird mit…
python -m onnxruntime.tools.make_dynamic_shape_fixed --input_name x --input_shape 1,3,960,960 model.onnx model.fixed.onnx
float32[1, 3, 960, 960]
Batchsize muss führend sein
Der TwinCAT Machine Learning Server unterstützt nur Modelle mit Batchsize als führenden Parameter der Input-Node. Der Batchsize Parameter darf (im Gegensatz zu allen anderen Parametern) dynamisch sein. Erlaubt sind beispielsweise:
float32[batch, 3, 244, 244]
float32[?, 3, 244, 244]
float32[unknown, 244, 244, 3]
Nur, wenn das Modell als führenden Parameter eine dynamische Batchsize enthält, kann mit der Methode PredictBatched() gearbeitet werden.
ONNX-Datei Größe
Aktuell ist das Größenlimit einer ladbaren ONNX-Datei 2 GB. Kontaktieren Sie Beckhoff (siehe Support und Service), falls diese Grenze für Ihre Anwendung eine Herausforderung darstellt.