Viele Daten und dazu passende Labels sind sehr wichtig für das Training von neuronalen Netzen. Daher sind Label-Tools ein wesentlicher Bestandteil in der Aufbereitung von Daten. Funktioniert das Labeling einfach und schnell umso mehr Zeit spart man sich beim Aufbereiten der Daten und später beim Training der neuronalen Netze. Seit Anfang 2023 gibt es als OpenSource von META veröffentlicht das  Segment Anything Model (SAM) Wechsel das Potential bietet Labeling Tools zu realisieren die schnell völlig unbekannte bzw. neue Objekte mit Labeln versehen können. Lösungen wie das hier in meinen Beitrag vorgestellte AnyLabeling welches in Kombination mit einem YOLO neuronalen Netz kombiniert wird bieten das Potential Label schneller zu setzen. Daher freue ich mich dieses Tool einmal auszuprobieren.

AnyLabeling - screen

AnyLabeling – screen

Vorbereitung der Installation

Um AnyLabeling auch testen und ausprobieren zu können habe ich dieses auf einem frisch aufgesetzten Ubuntu 22.04 Rechner mit einer NVIDIA A6000 installiert. Der Rechner verfügt über eine Leistungsstarke AMD CPU und 64 GB Hauptspeicher. Nachfolgend werden entsprechend erst einmal ein paar Tools installiert die benötigt werden um AnyLabeling installieren und laufen lassen zu können.

CUDA – Installation

Als erstes habe ich CUDA von NVIDIA installiert um die GPU der Grafikkarte optimal nutzen zu können. Ich bin der NVIDIA Anleitung gefolgt wie von NVIDIA im nachfolgenden Link beschrieben.

URL: https://developer.nvidia.com/cuda-downloads?target_os=Linux&target_arch=x86_64&Distribution=Ubuntu&target_version=22.04&target_type=deb_network

Dann habe ich noch ein paar weitere Tools installiert die benötigt werden um z. B. die virtuelle Umgebung einrichten zu können.

Befehl: sudo apt install -y python3-pip

Befehl: pip3 install --upgrade pip

Virtuelle Umgebung einrichten

Damit alles sauber installiert werden kann und hier eine Trennung von anderen Installationen erfolgen kann habe ich eine virtuelle Umgebung mit dem Namen AnyLabeling eingerichtet. Das genaue Vorgehen habe ich nachfolgend erläutert.

Befehl: pip3 install virtualenv

Befehl: python3 -m virtualenv -p python3 AnyLabeling --system-site-packages

Befehl: source AnyLabeling/bin/activate

Für den Fall das AnyLabeling öfters genutzt wird ist es die bessere Variante die virtuelle Umgebung automatisch zu starten sobald ein Terminal Fenster geöffnet wird. Dazu bitte den nachfolgenden Befehl ausführen.

Befehl: echo "source ~AnyLabeling/bin/activate" >> ~/.bashrc

Befehl: source ~/.bashrc

AnyLabeling Installation

Da ich auf dem Rechner mehrere Installationen verschiedener Anwendungen installiert habe verwende ich immer CONDA um virtuelle Umgebungen zu erstellen in denen ich dann wieder ein neues Tool ausprobiere. So bin ich auch hier für meinen Test von AnyLabeling vorgegangen. Ich bin dann der Anleitung bzw. der Beschreibung der Installation von AnyLabeling wie unter der folgenden URL beschrieben gefolgt.

URL: https://github.com/vietanhdev/anylabeling

Wichtig ist jetzt, dass Du in der aktiven virtuellen Umgebung AnyLabling bist und dort jetzt AnyLabling installierst.

Der folgende Befehl installiert AnyLabeling mit GPU Unterstützung.

Befehl: pip install anylabeling-gpu

Der folgende Befehl installiert AnyLabeling mit CPU Unterstützung.

Befehl: pip install anylabeling

Die Installation der GPU Version war bei mir nach wenigen Minuten installiert. Es wurde einiges an Daten herunter geladen und die Installationszeit hängt dann wohl eher von der Geschwindigkeit der Internetverbindung ab und weniger von dem Rechner.

AnyLabeling - installation terminal

AnyLabeling – installation terminal

Nach der erfolgreichen Installation wird AnyLabeling in der aktiven virtuellen Umgebung über den nachfolgenden Befehl gestartet.

Befehl: anylabeling

Nach dem Du den Befehl im Terminal Fenster ausgeführt hast startet AnyLabeling. Die Oberfläche von Anylabeling sieht dann wie folgt aus und ist recht übersichtlich gestaltet.

AnyLabeling - start screen

AnyLabeling – start screen

AnyLabeling – Übersicht

Jetzt möchte ich eine kurze Einführung in das Programm AnyLabeling geben. Sehr viel muss man hier nicht erklären denn es lässt sich wirklich alles recht einfach bedienen. Das Menü oben ist recht Umfangreich von seinen angebotenen Funktionen.

Das Menü links bietet die wichtigsten Funktionen um Label setzen zu können. Diese führe ich hier kurz alle nacheinander auf.

  • Bilder öffnen
  • Bild vor
  • Bild zurück
  • Label speichern
  • aktuelle Label löschen
  • Polygon zeichnen
  • Recheck zeichen (Bonding Box)
  • Kreis zeichnen
  • eine Linie zeichnen
  • Punkte zeichnen
  • Linie mit mehreren Punkten zeichnen
  • Anpassen der Linien / Polygone
  • aktuelle Polygon Selektion löschen
  • Rückgängig machen
  • Zoom
  • Zoom past sich der Fenstergröße an
  • Auto Labeling (z. B. Segment Anything Unterstützung)
AnyLabeling - Menu oveview

AnyLabeling – Menu oveview

Rechts im Bild sind die Labels zu sehen sowie die Objekte die mit Labeln versehen wurde als auch die Pfade zu den einzelnen Bildern. Damit ist das Programm auch schon erklärt und man kann loslegen seine Bilder mit den Labeln zu versehen so wie man dies eben möchte.

Video – AnyLabeling

In dem folgenden Video wird die Funktionsweise und die Möglichkeiten gezeigt wie AnyLabeling funktioniert. Es sind sehr schön die verschiedenen Modi zu sehen und wie schnell das Labeling von komplexen Objekten in Bildern funktioniert.

AnyLabeling v0.2.22 Segment Anything Demo

AnyLabeling v0.2.22 Segment Anything Demo

Zusammenfassung

Mir hat die Lösung AnyLabeling für das Labeling von Bildern  gut gefallen. Es ist jetzt nichts total Neues oder das im Gegensatzu zu anderen Lösungen die Zeit für das Labeling deutlich reduziert. Das Labeling von Bildern ist und bleibt ein manueller Aufwand der auch mit dieser Lösung manuelle Optimierungen der Boundingbox erforderlich macht. Je genauer die Bounding Boxen oder Polygone gesetzt werden sollen so mehr Zeit muss investiert werden. Ich sehe deutlich das Potential von der Integration von Segment Anything von META aber da man immer bestimmte Informationen in einem Bild mit Labeln versehen möchte wie z. B. eine Pflanzenart oder andere Objekte wie eine Schere bietet die Integration von SegmentAnything nicht so den großen Vorteil. Das wird erst interessanter wenn man viele gleiche Objekte hat wie z. B. Reiskörner einer bestimmten Sorte und abhängig von der Größe der Körner die Label setzen möchte. Dann könnte SegmentAnything seine Vorteile die es bietet optimal einbringen.