Technologische Neuigkeiten, Bewertungen und Tipps!

Unterwasserobjektsegmentierung mit MonkAI – Auf dem Weg zur KI

Hinweis: Der folgende Artikel hilft Ihnen dabei: Unterwasserobjektsegmentierung mit MonkAI – Auf dem Weg zur KI

Computer Vision

Inhaltsverzeichnis

  1. Über das Projekt
  2. Mönch-Toolkit
  3. Segmentierung
  4. Unet
  5. Schlussfolgerung basierend auf einem bereits trainierten Modell
  6. Ausbildung
  7. Schlussfolgerung (nach dem Training)
  8. Abschluss
  9. Verweise

1. Über das Projekt

Dieses Projekt konzentriert sich auf die Segmentierung verschiedener Objekte wie z Tiere, Pflanzen, Plastik und ROV (Ferngesteuertes Fahrzeug) unter Verwendung eines Low-Code-Wrappers Monk [2]Toolkit über Unet[1]. Es ist wichtig, die Sammlung von Meeresmüll zu verstehen. Für den Einsatz eines automatischen Fluss- oder Meeresabfallreinigungssystems sollte ein angemessenes Verständnis der verschiedenen im Wasser vorhandenen Objekte vorhanden sein. Dieses Projekt hilft, ein solches System im kleinen Maßstab zu entwickeln. In diesem Blog werde ich einige Einblicke in MonkAI geben und wie es verwendet werden kann, um den Prozess der Objektsegmentierung zu vereinfachen und andere Computer-Vision-Anwendungen zu erstellen.

Tutorial verfügbar auf Github

2. Funktion der Mönchs-KI[6]

  • Schnellmodus für Anfänger
  • Es ist möglich, mit einer gemeinsamen Syntax auf PyTorch, MXNet, Keras, TensorFlow usw. zuzugreifen.
  • Standard-Workflows für einfache Transfer-Lernanwendungen
  • Für Wettbewerbs- und Hackathon-Teilnehmer: Die problemlose Einrichtung macht das Prototyping schneller und einfacher

3. Segmentierung[4]

Durch Segmentierung können wir die Kategorie jedes Pixels verstehen, was uns helfen kann, die Position des Objekts in einem Bild und die Form eines Objekts zu verstehen. Die Bildsegmentierung hilft dabei, eine pixelweise Maske des Bildes auszugeben. Die Bildsegmentierung findet Anwendung in der medizinischen Bildgebung, in selbstfahrenden Autos und in der Satellitenbildgebung.

A. Semantische Segmentierung

Die semantische Segmentierung hilft dabei, jedes Pixel eines Bildes mit einer entsprechenden Klasse dessen zu kennzeichnen, was dargestellt wird. Das folgende Bild kann uns helfen, den Unterschied zwischen Objekterkennung, semantischer Segmentierung und Instanzsegmentierung zu verstehen.

B. Instanzsegmentierung

Im Bild oben gibt es beispielsweise drei Personen, technisch gesehen drei Instanzen der Klasse „Person“. Die semantische Segmentierung unterscheidet jedoch nicht zwischen den Instanzen einer bestimmten Klasse.

4. Unet

Das Unet[1] wurde von Olaf Ronneberger et al. entwickelt. für die biomedizinische Bildsegmentierung. Die Architektur enthält zwei Pfade. Der erste Pfad, dh Encoder oder Kontraktionspfad, wird verwendet, um den Kontext des Bildes zu erfassen. Der Encoder besteht aus einem traditionellen Stapel von Faltungs- und Max-Pooling-Schichten. Der zweite Pfad, dh Decoder oder symmetrische Erweiterung, wird verwendet, um eine präzise Lokalisierung mithilfe transponierter Faltungen zu ermöglichen.

Im Originalpapier wird das UNET wie folgt beschrieben:

5. Schlussfolgerung basierend auf einem bereits trainierten Modell

A. Installationsanweisungen

Für das Training des Netzwerks ist eine CUDA-GPU vorzuziehen (die auch von Google Colab bereitgestellt wird); aber man kann ein lokales Gerät oder ein Kaggle-Notebook verwenden. Jetzt richten wir das MonkAI-Toolkit und die Abhängigkeiten vom Colab ein

B. Inferenz (vorab trainiertes Modell)

Wir müssen die erforderlichen Bibliotheken für die Inferenz und einige Hyperparameter sowie ein Klassenwörterbuch festlegen.

Herunterladen des vorab trainierten Modells.

Jetzt definieren wir das Modell, das Rückgrat und den Pfad für das vorab trainierte Modell.

Aus dem entpackten Ordner verwenden wir einige Bilder für Rückschlusszwecke.

Schlussfolgerung-1

Schlussfolgerung-2

6. Ausbildung

Wir verwenden einen Datensatz aus dem Datenrepository[3]

Zeit, unseren Datensatz herunterzuladen.

Monk-Verzeichnis

Bevor wir die Mak-Bilder erstellen, müssen wir prüfen, ob der Datensatz ausgeglichen ist oder nicht

„Jeder möchte perfekt sein. Warum sollte unser Datensatz also nicht perfekt sein? Machen wir es perfekt“

Im gegebenen Datensatz können wir leicht erkennen, dass die Daten stark unausgewogen sind, was einer besseren allgemeinen Genauigkeit schadet. Um für alle Klassen ungefähr die gleiche Genauigkeit zu erreichen, sollten wir eine gleiche Anzahl von Objekten aus jeder Klasse haben.

Aus den obigen Statistiken können wir ersehen, dass die Daten stark unausgeglichen sind, insbesondere bei Objekten der Kategorien „Rov“ und „Trash“ im Vergleich zu den anderen Klassen. Zu Demonstrationszwecken verwenden wir 4 Klassen, nämlich Pflanze, Rov, Tier, Müll

Wir wählen aus jeder Kategorie 20 Objekte aus und gruppieren sie nach der Hauptkategorie

Die obige Diskussion wird durch Code auf Github implementiert.

4 Hauptkategorien

  1. ROV
  2. Anlage
  3. Tier-animal_eel, animal_crab, animal_etc, animal_fish, animal_shells, animal_starfish
  4. Müll-trash_etc, trash_fabric, trash_fishing_gear, trash_metal, trash_paper,trash_plastic,trash_rubber,trash_wood

In der Endzählung haben wir also etwa 150 Objekte für jede Hauptkategorie. Basierend auf ausgewogenen Daten erstellen wir nun Maskenbilder ausgewählter Bilder. Wir weisen Pixelwerte zu.

0- Hintergrund

1- ROV

2- Pflanze

3- Tier

4- Müll

Wir haben 443 Bilder mit insgesamt 580 trainierbaren Objekten, was bedeutet, dass wir in einigen Bildern mehr als ein Objekt haben.

Jetzt erstellen wir Maskenbilder basierend auf den oben ausgewählten Bildern. (Code) Für das Segmentierungstraining benötigen wir einen Pfad für Originalbilder sowie Maskenbilder. Im Klassenwörterbuch haben wir 5 Kategorien mit Pixelwerten, aus denen wir den Hintergrund für das Training ausschließen, da wir an den Hauptkategorien interessiert sind.

Monk stellt eine breite Palette von Backbones bereit, die wir verwenden zusammen mit Modell, das zu den empfohlenen und Bildgröße (384.384) gehört. Wir legen die Lernrate auf 0,0001 und 120 Epochen fest. (Für eine detaillierte Implementierung überprüfen Sie bitte die Datei).=0,45 wird erreicht

7. Schlussfolgerung (nach dem Training)

Jetzt sind wir daran interessiert, die Ergebnisse unseres trainierten Modells zu verstehen. Es ähnelt dem vorab trainierten Modell, aber jetzt verwenden wir unser eigenes trainiertes Modell, sodass der Modellpfad anders ist.

  1. Inferenz-Engine festlegen
  2. Klassen definieren

3. Stellen Sie einige Bilder zum Testen bereit.

Testbild-1

Testbild-2

Anhand der obigen Testbilder können wir gute Ergebnisse erkennen. Weitere Ergebnisse finden Sie auf Github.

8. Fazit

Im Vergleich zu anderen Kategorien abgedeckter Bereich in Bildern ist mehr, daher haben wir mehr Pixel für das Training, sodass das Ergebnis leicht verzerrt ist Wir haben diese Ergebnisse erhalten, indem wir eine große Anzahl von Hyperparametern gleichzeitig angepasst haben – was normalerweise viel Zeit in Anspruch nimmt. Dank Monk konnten wir diese anspruchsvolle Aufgabe jedoch innerhalb eines beträchtlich kurzen Zeitrahmens bewältigen. Mit Monk haben wir mit nur wenigen Codezeilen Segmentierungspipelines erstellt. Auch das Ausprobieren mehrerer Backbone- und Modellpaare kann helfen, bessere Ergebnisse zu erzielen. Gesamt, Monk AI ist eine großartige Bibliothek, die die Ausführung von Computer-Vision-Aufgaben erheblich vereinfacht. Den Code in diesem Artikel finden Sie hier.

Weitere Beispiele zur Erkennung und Segmentierung finden Sie im Anwendungsmodell-Zoo.

Danke fürs Lesen! Ich hoffe, Sie finden diesen Artikel informativ und nützlich. Teilen Sie Ihr Feedback im Kommentarbereich!

9. Referenzen

  1. Unet-https://arxiv.org/abs/1505.04597
  2. Mönch-KI – https://github.com/Tessellate-Imaging/Monk_Object_Detection
  3. Datensatz – https://conservancy.umn.edu/handle/11299/214865
  4. Segmentierung-https://towardsdatascience.com/computer-vision-instance-segmentation-with-mask-r-cnn-7983502fcad1
  5. Funktionen von Monk AI – https://devpost.com/software/monkai

Die Segmentierung von Unterwasserobjekten mit MonkAI wurde ursprünglich in Towards AI auf Medium veröffentlicht, wo die Leute die Konversation fortsetzen, indem sie diese Geschichte hervorheben und darauf antworten.

Veröffentlicht über Towards AI