In den letzten Jahren hat sich die Welt der künstlichen Intelligenz rasant weiterentwickelt. Frameworks wie PyTorch, TensorFlow, Keras und scikit-learn bieten leistungsstarke Werkzeuge zum Trainieren von KI-Modellen. Doch ein Problem bleibt: Modelle sind häufig an das Framework gebunden, in dem sie erstellt wurden.
Genau hier kommt ONNX ins Spiel. In den folgenden Abschnitten wird genauer auf ONNX eingegangen und anhand eines konkreten Beispiels gezeigt, wie man mit Hilfe der ONNX-Runtime ein KI- Modell in eine .NET-MAUI-App einbindet und offline nutzen kann.
ONNX (Open Neural Network Exchange) ist ein offenes Format für KI-Modelle, welches bereits seit 2017 besteht. Im Jahr 2019 wurde das Projekt zudem in die Linux Foundation AI aufgenommen.
Bei der Entwicklung des Formates wurden zwei zentrale Ziele verfolgt:
Um KI-Modelle im ONNX-Format anwenden zu können, wird die ONNX-Runtime benötigt. Mit dieser kann man Modelle unabhängig vom ursprünglichen Trainingsframework deployen — ganz nach dem Motto train your model once, run it anywhere.
Die Runtime kann mit diversen Programmiersprachen eingebunden werden (C, C++, Python, C#, JavaScript, Rust, etc.) und ist für verschiedenste Plattformen verfügbar:
ONNX-Runtime unterstützt unterschiedliche Hardware-Beschleunigungen wie CUDA, TensorRT oder DirectML. Dabei ist sie nicht nur für leistungsstarke Systeme interessant, sondern auch für kleiner KI-Modelle auf Edge-Devices und Smartphones.
Einen guten Überblick bietet unten stehende Grafik:

(Quelle: https://onnxruntime.ai/getting-started)
Folgendes Beispiel zeigt, wie die ONNX-Runtime in eine .NET-MAUI-App eingebunden und genutzt werden kann um Simpson-Charakteren auf Bildern zu erkennen. Das Modell wurde mit TensorFlow trainiert und ist relativ trivial (12’288 Parameter und ca. 40MB gross). Es soll nur die Verwendung der Runtime demonstrieren. Der komplette Source Code kann hier eingesehen werden.
Die Einbindung ist mit wenigen Schritten möglich:
dotnet add package Microsoft.ML.OnnxRuntime var assembly = Assembly.GetExecutingAssembly(); using var stream = assembly.GetManifestResourceStream(ModelFileName); using var ms = new MemoryStream(); stream?.CopyTo(ms); return new InferenceSession(ms.ToArray());
Etwas aufwändiger ist die Aufbereitung der Eingangsdaten. Diese müssen das gleiche Format wie die Trainingsdaten haben. In diesem Beispiel handelt es sich um ein Float-Array, das drei Farbkanalwerte pro Pixel enthält. Die Werte müssen normalisiert (0 bis 1) und in der richtigen Reihenfolge vorliegen. Da die Bilder beim Training im BGR-Farbraum verarbeitet wurden, muss die Reihenfolge der Farbkanäle auch bei der Klassifzierung neuer Bilder eingehalten werden (siehe NormalizeImage-Methode). Andernfalls funktioniert die Klassifizierung nicht richtig.
Das resultierende Array kann anschliessend genutzt werden, um einen Tensor zu erzeugen und die Inferenz-Session aufzurufen:
private List<float> Predict(float[] image)
{
if (_session is null) return [];
var input = new DenseTensor<float>(image, [DimBatchSize, ImageSizeX, ImageSizeY, DimNumberOfChannels]);
using var results = _session.Run([NamedOnnxValue.CreateFromTensor(ModelInputName, input)]);
var output = results.First(i => i.Name == ModelOutputName);
var scores = output.AsTensor<float>().ToList();
return scores;
}
Der Rückgabewert ist ebenfalls ein Float-Array, welches die Wahrscheinlichkeit für die verschiedenen Simpson-Charakteren enthält.
ONNX erleichtert den Einsatz von KI-Modellen über verschiedene Frameworks und Plattformen hinweg. Durch das offene Modellformat und die breite Unterstützung unterschiedlicher Umgebungen können Modelle flexibel integriert werden, ohne an das Trainingsframework gebunden zu sein.
Ein wichtiger Anwendungsbereich ist das Edge-Computing: Da ONNX-Modelle auf mobilen Geräten und Edge-Hardware lokal ausgeführt werden können, sind KI-Funktionen auch ohne Cloud-Anbindung möglich — ideal für Anwendungen mit geringen Latenzanforderungen oder zur lokalen Datenverarbeitung.
Das Beispiel mit einer .NET-MAUI-App zeigt, wie ein trainiertes Modell eingebunden und offline genutzt werden kann. Damit wird deutlich, wie sich ONNX in reale Anwendungen integrieren lässt und welche Schritte dafür notwendig sind.
Insgesamt bietet ONNX eine technische Grundlage, um KI-Modelle plattformübergreifend und auch auf Edge-Geräten einzusetzen, ohne dass dafür grosse Anpassungen am Modell selbst erforderlich sind.
Schreiben Sie einen Kommentar