7. Mai 2020   Matthias Reichinger

Custom Object Detection in der Cloud am Beispiel von Amazon AWS Custom Label Recognition

Benutzerspezifische Label Erkennung in Fotos (oder allgemein ‘Object Detection’) wurde von den Big Playern Microsoft, Google und Amazon als Cloud Service jeweils im Laufe des Jahres 2019 released. Mit diesen Services können Modelle auf benutzerdefinierte Labels trainiert werden. Das ermöglicht es die Objekterkennung spezifisch auf die speziellen Anforderungen von Firmen anzupassen. Ein Anwendungsbereich ist etwa die Erkennung des firmeneigenen Logos in Social Media Posts, Online Stores, oder sonstigen Medien.

Machine Learning Experten können diese Aufgaben freilich schon länger umsetzen, allerdings erledigen die eigentliche Arbeit nunmehr diese Cloudlösungen, wodurch das Skillset, welches benötigt wird, deutlich schrumpft.

Wir testen das Produkt von Amazon AWS – Amazon Custom Label Recognition – anhand des Redlink Logos und des Redlink Schriftzugs. Dazu wird ein AWS Account benötigt und eine Kreditkarte. Im Rahmen von AWS Free Tier sind 3 Trainingsstunden kostenlos.

Trainingsdaten erstellen

Wir verwenden zum Testen 30 Fotos, die das Redlink Logo und den Redlink Schriftzug beinhalten, als Trainingsdaten, die manuell gelabelt werden müssen.  Dazu muss zunächst ein S3 Dataset erstellt und alle Bilder hochgeladen werden. Das funktioniert entweder mit Hilfe eines Manifest-Files, direkt von einem Amazon S3 bucket aus oder man lädt die Bilder einfach über eine UI hoch. 

 

 

Für das Labeling klicken wir in der Datasets Ansicht auf ‘Start Labeling’ und erstellen die beiden Labels “logo” und “schriftzug”. Diese wollen wir den jeweiligen Bildern, in denen das Redlink Logo oder der Redlink Schriftzug vorkommt, zuweisen. Indem wir auf ‘Draw bounding box’ klicken, kommen wir in eine neue Ansicht, in der wir jedem Label einen oder mehrere Bereiche des Bildes zuweisen können, indem wir Bounding Boxes knapp um das Label zeichnen.

 

 

Modell trainieren

Ist das Labeling für alle Fotos erledigt, wechseln wir zum ‘Projects’ tab und erstellen ein neues Projekt. Wir wählen das Dataset aus, welches wir gerade vorbereitet haben, wählen die automatische Teilung in Trainings- und Validierungsset aus und klicken auf ‘Train’. Jetzt heißt es warten…

 

 

Das Training kostet ab der 3. Stunde je einen Dollar pro Stunde. Nach 72 Stunden bricht jedes Training ab. Sollte das Training nach 72 Trainingsstunden abbrechen und das Training war nicht erfolgreich, so wird auch nichts verrechnet. Es wird auch parallel trainiert, sodass diese 72 Trainingsstunden auch schon in weniger Zeit aufgebraucht sein können.

In unserem Fall ist das Training nach ungefähr einer Trainingsstunde fertig und ergibt einen F1 score von 0,883. Die Precision liegt bei 1, es wird also nichts fälschlicherweise erkannt, allerdings werden mit einem Recall von 0,810 19% der Labels nicht erkannt. 

An der Precision von 1 sehen wir schon, dass hier etwas faul ist, denn ein perfekter Wert wird normalerweise nie erreicht. Der Grund dafür ist schlicht und einfach, dass wir viel zu wenig Trainingsdaten haben. Der Algorithmus kann nur schwer die allgemeinen Eigenschaften des Schriftzugs und des Logos mit so wenig Trainingsdaten feststellen. Wie viel Trainingsdaten tatsächlich benötigt werden, hängt immer auch vom Einsatzzweck ab. Zum Beispiel, wenn das Logo auf beliebigem Hintergrund erkannt werden soll, müssen Trainingdaten mit verschiedenem Hintergrund verwendet werden. Ansonsten kann es sein, dass der Algorithmus nicht das Logo sondern den Hintergrund generalisiert. Ein weiters Beispiel ist, dass Trainingsdaten mit verschiedenen Perspektiven dabei sein sollten, außer es ist von vornherein klar, dass der Anwendungszweck nur Bilder mit einer einzigen Perspektive betrifft.

Allgemein gesprochen müssen die Trainingdaten repräsentativ für die späteren Produktivdaten sein, um die es geht. Eine gute Beschreibung dazu, wie die Trainingsdaten gestaltet werden sollten, liefert zum Beispiel die Dokumentation von Microsoft Custom Vision. Dort wird empfohlen mindestens 50 Bilder zu verwenden. Für eine gute Performance für den Einsatz in diffuser Umgebung und verschiedenen Perspektiven könnten allerdings mehrere hundert Bilder erforderlich sein. Dass die verwendeten Bilder ausreichen merkt man daran, dass die Hinzufügung weiterer Bilder keine Verbesserung der Performance bewirkt, sprich Precision und Recall oder der F1-Score sich nicht verbessern.

In der folgenden Übersicht erhält man Informationen über das Training:

 

TEst

 

Um zu sehen, für welche Bilder im Validierungsset welche Labels mit welcher confidence korrekt klassifiziert wurden, steht eine Detailansicht der Ergebnisse zur Verfügung:

 

 

Service starten

Bis hierher sind wir ohne Konsole ausgekommen, aber um das Modell zu starten benötigen wir den aws client. Hier hinkt die Benutzerfreundlichkeit von AWS den anderen beiden Playern Microsoft und Google auch etwas hinterher, denn diese bieten eine Demo UI an, um das trainierte Modell auszuprobieren. Außerdem ist ein Export ihrer Modelle möglich, um eine lokale Ausführung z.B. in einem Docker Container zu ermöglichen. 

Bei Amazon müssen wir also in die Konsole und jetzt ist auch der Moment gekommen, wo es richtig teuer werden kann, wenn man nicht aufpasst. Wird das Modell gestartet, kostet die Uptime 4 Dollar pro Stunde, und zwar unabhängig davon, ob es verwendet wird oder nicht. Das Modell schaltet sich nicht von alleine aus. Wenn man es vergisst, hat man eine Monatsrechnung von ca. 3000 Dollar zu erwarten (https://aws.amazon.com/rekognition/pricing/). Darum sollten auf jeden Fall Kostenwarnungen konfiguriert werden.

In der Ergebnisansicht des Models werden die Befehle für den Start und das Beenden des Modells angezeigt und können per copy/paste in die Konsole eingefügt werden. Die Credentials im aws client müssen allerdings zuerst konfiguriert werden. Sobald das Modell läuft, wird in der UI der Status RUNNING angezeigt

 

 

und mit einem weiteren Befehl kann ein beliebiges Foto bestimmt werden, welches auf einem S3 bucket liegt. Die Antwort ist ein json response und enthält eine Liste von bounding boxes und deren confidence.

Das Hochfahren des Modells kann einige Zeit in Anspruch nehmen. Die maximale Wartezeit war 10 Minuten. Das Herunterfahren ist dagegen in wenigen Sekunden erledigt. Das Verarbeiten eines Bildes dauert zwischen 5 und 7 Sekunden.

Fazit

Mit Amazon Custom Label Recognition, als auch mit Google autoML Vision Object Detection und Microsoft Azure Custom Vision ist es einfach, benutzerdefinierte Modelle auf Objekterkennung zu trainieren ohne ein AI Experte sein zu müssen. Die Angebote von Amazon, Google und Microsoft unterscheiden sich vor allem in Benutzerfreundlichkeit, Dokumentation und der Preisgestaltung. Eine genauere Analyse ist hier nicht möglich, jedoch bietet jede Lösung eine gewisse Anzahl an Freieinheiten an, mit denen man die Services testen kann. Will man die dahinterliegenden Machine Learning Algrithmen auf ihre eigentliche Performance testen, so wird man über ein größeres Trainingsset nicht hinwegkommen, denn sinnvolle Ergebnisse können je nach Schwierigkeit des Problems mehrere hundert Bilder benötigen.

Für alle Anbieter gilt allerdings dasselbe: Das Ergebnis ist zunächst nur ein Modell, welches in der Cloud läuft und isoliert betrachtet noch relativ nutzlos ist. Eine Einbindung der so getesteten Modelle in Software Lösungen für den produktiven Einsatz im Unternehmen sollte dann mit dem richtigen Partner passieren.