mit ML .NET Bild Objekte benennen oder erkennen

In früheren Blog Beiträgen habe ich beschrieben wie Bilddaten generiert (Kreis, Dreieck, Viereck) und per Label kategorisiert werden. Je nachdem ob ich eine Bild Klassifizierung oder Bild Erkennung bauen möchte, per Datei Order oder zb VoTT Tagging.

Für letzteres habe ich das Microsoft Vott Tool genutzt und in Visual Studio Modelbuilder “trainiert”. Das klappte nicht, es wurden keine oder falsche Objekte erkannt

Also das kleinere Ziel die Klassifizierung. Man startet mit einem Command Line Projekt in Visual Studio und fügt per Rechtsklick auf die Solution ein “Machine Learning Modell” hinzu.

Aus den Szenarien wird Maschinelles sehen- Bildklassifzierung ausgewählt

Der Pfad zu den Bildern in den Unterverzeichnissen mit den Trainingsdaten

bildklassifzierung1

Wir erkennen die handgezeichneten Figuren als PNG Dateien und die Labels dazu

bildklassifzierung2

Das Training dauert 30 Sekunden und liefert von den Kennzahlen und den eigenen Test sehr gute Vorhersage Ergebnisse:

bildklassifzierung3

Mit wenigen Zeilen C# Code aus dem letzten Schritt des Wizards kann das Modell direkt benutzt werden.

Aber wir wollen Untersuchen wie ich das Modell transportierten kann in ein weiteres existierendes Projekt.

Im Visual Studio werden Nuget Pakete eingebunden durch ändern der Projekt Datei

   1:   <PackageReference Include="Microsoft.ML" Version="3.0.0-preview.23266.6" />
   2:   <PackageReference Include="Microsoft.ML.ImageAnalytics" Version="3.0.0-preview.23266.6" />
   3:   <PackageReference Include="Microsoft.ML.TorchSharp" Version="0.21.0-preview.23266.6" />
   4:   <PackageReference Include="Microsoft.ML.Vision" Version="3.0.0-preview.23266.6" />
   5:   <PackageReference Include="SciSharp.TensorFlow.Redist" Version="2.3.1" />
   6:   <PackageReference Include="TorchSharp-cpu" Version="0.99.5" />

Dann werden die Dateien in das Projektstammverzeichnis  kopiert.

ml2

Um das Model zu nutzen, fehlen nur noch wenige Zeilen Code. Hier in program.cs. Auch das kopiert aus dem Visual Studio Model Builder Wizard. Schon ist die eigene App mit Machine Learning ausgestattet und kann so handgezeichnete Figuren erkennen.

testdreieck

   1:  //Load sample data
   2:  var imageBytes = File.ReadAllBytes(@"C:\temp\testdreieck.png");
   3:  MLModel1.ModelInput sampleData = new MLModel1.ModelInput()
   4:  {
   5:      ImageSource = imageBytes,
   6:  };
   7:  //Load model and predict output
   8:  var result = MLModel1.Predict(sampleData);
   9:  //0  viereck    1  kreis     2  dreieck
  10:  Console.WriteLine($"{result.PredictedLabel}:{result.Score.Max()}");

 

.

Kommentare sind geschlossen