Wenn Kinder ihre Muttersprache erlernen, hören Sie zunächst Beschreibungen dessen, was sie sehen. Dadurch lernen sie als erstes, das Gesehene – also Bilder – mit Worten zu beschreiben. Aus einfachen Einwortzsätzen wie „Teddy“ entwickeln sich dabei mit der Zeit komplexe Beschreibungen wie „Die schwarze Katze sitzt auf dem runden Tisch.“ Für das maschinelle Lernen ist die Beschreibung von Bildinhalten ebenfalls ein sehr spannendes und herausforderndes Problem, bei dem in den letzten Jahren große Fortschritte ezielt wurden.
Zu der hier vorgestellten Demo bin ich durch die Bachelorarbeit von Timo Neuhaus inspiriert worden. Die Anwendung basiert auf dem Paper Show and Tell: A Neural Image Caption Generator der Google-Mitarbeiter Oriol Vinyals et al. sowie auf Code von Trang Nguyen.
Der benutzte Ansatz zerlegt die Aufgabe in zwei Teilschritte:
- Das Bild wird zunächst – ähnlich wie im visuellen Kortex – in eine interne Repräsentation übersetzt. Dabei kommt ein Convolutional Neuronal Network (CNN) zum Einsatz, konkret eine vortrainierte Instanz von ResNeXt 101_32x8d.
- Anschließend wird aus der internen Bildrepräsentation eine sprachliche Beschreibung erzeugt. Hier wird ein Recurrent Neural Network (RNN) mit einer Gated Recurrent Unit (GRU) verwendet.
Beide neuronalen Netwerke wurden mit annotierten Bildern aus dem COCO (Common Objects in Context) Datensatz von Microsoft trainiert. Dieser Datensatz besteht aus gut 80.000 annotierten Trainingsbildern und weiteren gut 40.000 Bildern für die Validierung. Die Zahlen geben ein Gefühl dafür, welch große Trainigsdatensätze für Deep-Learning-Verfahren benötigt werden.
In der folgenden Maske können Sie Bilder per Drag & Drop bzw. über einen Upload-Button hochladen, die Anwendung zeigt anschließend die generierte Beschreibung an.
Die Bilder werden dabei nicht gespeichert, sondern unmittelbar nach der Verarbeitung gelöscht.
Beispielbilder aus der Validierungsmenge
Die folgenden Bilder können (per Drag & Drop) oben als Beispiele verwendet werden. Die hier angegebenen Bildbeschreibungen sind die – von Menschen erzeugten – Referenzannotationen. Hier sieht man sehr schön, dass der Algorithmus nur das lernt, was er schon einmal gesehen hat: Auf Parmesandosen gestapelte Schnabeltassen bringen ihn aus dem Konzept.
Quellcode der Anwendung
Den vollständigen Quellcode dieser Anwendung finden Sie auf GitHub.