CiAgICA8IS0tIExpbmtlZEluIC0tPgogICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgogICAgICAgIF9saW5rZWRpbl9wYXJ0bmVyX2lkID0gIjEyMzUwNzMiOwogICAgICAgIHdpbmRvdy5fbGlua2VkaW5fZGF0YV9wYXJ0bmVyX2lkcyA9IHdpbmRvdy5fbGlua2VkaW5fZGF0YV9wYXJ0bmVyX2lkcyB8fCBbXTsKICAgICAgICB3aW5kb3cuX2xpbmtlZGluX2RhdGFfcGFydG5lcl9pZHMucHVzaChfbGlua2VkaW5fcGFydG5lcl9pZCk7CiAgICA8L3NjcmlwdD48c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CiAgICAgICAgKGZ1bmN0aW9uKCl7dmFyIHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0IilbMF07CiAgICAgICAgICAgIHZhciBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7CiAgICAgICAgICAgIGIudHlwZSA9ICJ0ZXh0L2phdmFzY3JpcHQiO2IuYXN5bmMgPSB0cnVlOwogICAgICAgICAgICBiLnNyYyA9ICJodHRwczovL3NuYXAubGljZG4uY29tL2xpLmxtcy1hbmFseXRpY3MvaW5zaWdodC5taW4uanMiOwogICAgICAgICAgICBzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGIsIHMpO30pKCk7CiAgICA8L3NjcmlwdD4KICAgIDxub3NjcmlwdD4KICAgICAgICA8aW1nIGhlaWdodD0iMSIgd2lkdGg9IjEiIHN0eWxlPSJkaXNwbGF5Om5vbmU7IiBhbHQ9IiIgc3JjPSJodHRwczovL3B4LmFkcy5saW5rZWRpbi5jb20vY29sbGVjdC8/cGlkPTEyMzUwNzMmZm10PWdpZiIgLz4KICAgIDwvbm9zY3JpcHQ+CiAgICA8IS0tIEVuZCBMaW5rZWRJbiAtLT4KICAgIA==
Generic filters
Exact matches only
Search in title
Search in excerpt
Search in content

Bildanalyse: Inhaltsangabe


Die automatisierte Verarbeitung von Bild- und Videoinhalten hat in den letzten Jahren rasante Fortschritte vorzeigen können, hauptsächlich bedingt durch den Einsatz neuronaler Netze. Im heutigen Beitrag schauen wir einmal anhand von Beispielen, welche Aufgaben Algorithmen übernehmen können, und testen, wie gut sie in der Anwendung funktionieren.

Im Gegensatz zu strukturierten Daten, die beispielsweise schön geordnet als Zahlen in Tabellenform vorliegen, gehören Bilder und Videos zu den unstrukturierten Daten. Bei diesen ist das unmittelbare Extrahieren von Informationen, die über Bildgröße und Verteilung von Farbwerten hinausgehen, schwierig.

Konzentrieren wir uns hier auf die Verarbeitung von Bildern, d. h., unser Ziel ist es, Inhalte von Bildern zu erkennen.

Während der Mensch meistens mit Leichtigkeit solche Inhalte erfasst, ist ein Bild für jeden Algorithmus erst einmal nur eine Ansammlung von Pixeln mit einer räumlich angeordneten Struktur. Von hier zu einer Interpretation des Bildinhalts zu kommen, ist keine leichte Aufgabe.

Aber schauen wir zunächst einmal auf das folgende Foto:

Pasola in Wainyapu auf Sumba, Indonesien
Pasola in Wainyapu auf Sumba, Indonesien

Bemerkung: Es handelt sich hier um das Pasola-Fest auf Sumba, bei denen sich die Bewohner zweier Dörfer reitend gegenseitig mit Speeren bewerfen und das Ausmaß an fließendem Blut stellvertretend für den kommenden Ernteertrag steht, und die Stimmung im Publikum ist deshalb nicht heiter, sondern ernst und angespannt.

Was soll ein Algorithmus nun mit dem Bild anstellen? Wäre nur ein Objekt zu sehen, könnte man nach der Identifizierung fragen. So arbeitet beispielsweise Google Lens, seit kurzem nicht nur auf einem Foto, sondern auch mit dem Livebild des Smartphones.

Eine weitere Anwendung ist die semantische Bildsegmentierung (semantic image segmentation). Hier ist das Ziel, für jedes Pixel des Bildes zu sagen, zu welcher Kategorie von Objekten bzw. Lebewesen es gehört. Das Ergebnis sieht dann etwa so aus:

Semantische Bildsegmentierung
Semantische Bildsegmentierung

Hier werden Konturen der Personen und Pferde nicht perfekt, aber doch recht überzeugend erkannt.

Wir haben uns eines bereits trainierten Modells eines Deep Convolutional Neural Networks (DCNN) mit dem Namen DeepLab bedient, das im Web von den Entwicklern unter der Adresse https://github.com/tensorflow/models/blob/master/research/deeplab/README.md präsentiert wird. Eine Demo ist dort auch zu finden.

Es würde jetzt zu weit führen, die genaue Funktionsweise dieser DCNNs erklären zu wollen, aber der Erfolg dieser Ansätze liegt einerseits in der Flexibilität der verwendeten neuronalen Netze begründet und darüber hinaus in der Anwendung von bestimmten Filtern und Operationen, die dafür sorgen, dass es für die Objekterkennung nicht mehr ganz so wichtig ist, wie groß ein Objekt im Bild erscheint, ob es leicht gedreht ist und wo es sich genau befindet.

Dieser zweite Hauptbestandteil ist eher der menschlichen Intelligenz zu verdanken; es werden bestimmte clevere Hilfen eingebaut, damit es der erste Teil, der mehr der künstlichen Intelligenz zuzuordnen ist, einfacher hat.

Ein Wort müssen wir auch noch über das Training verlieren. Hier gilt das Prinzip GIGO (garbage in, garbage out). Ohne eine hinreichend große Anzahl von Trainingsbeispielen kann kein Algorithmus überzeugend funktionieren. In diesem Fall wurde die COCO-Bilddatenbank (COCO wie Common Objects in COntext) verwendet.

Bei COCO wurden über 330.000 Bilder von einem Heer von Crowdworkern angegangen und jedes Mal, wenn eines von 91 vordefinierten Objekten des täglichen Lebens wie Person, Auto, Fahrrad, Hund, Katze, Apfel, Banane usw. auf einem Bild auftauchte, dieses Objekt per Linienzug manuell eingegrenzt und benannt. Die Objekte sind dabei oft nur zum Teil sichtbar und jedes Bild kann durchaus mehrere Objekte enthalten. Weiterhin wurden jedem Bild fünf verbale Beschreibungen zugeordnet.

Der auf der COCO-Homepage angepriesene Übersichtsartikel “Microsoft COCO: Common Objects in Context, Tsung-Yi Lin et al., 2014” verrät, dass insgesamt über 70.000 Arbeitsstunden in diesen Task eingeflossen sind, das wären für eine einzelne Person bei normalen Arbeitszeiten über 30 Jahre Aufwand!

Diese Daten können prinzipiell bei Beachtung der Nutzungsbedingungen von jedermann verwendet werden. Um selbst Vorhersagemodelle zu erstellen, bietet sich beispielsweise Python mit dem bei Deep Learning sehr nützlichen Open-Source-Framework Google TensorFlow an. Für das erfolgreiche Training braucht es allerdings trotzdem Erfahrung und hinreichende Rechnerausstattung und -vernetzung.

Man muss aber das Rad nicht neu erfinden:

Einige Forscher stellen ihre Ergebnisse in Form von bereits trainierten Modellen zur Diskussion und zur Verfügung, häufig in der von Data Scientists beliebten Form von Jupyter-Notebook-Dateien, einem webbasierten Format, in welchem Programmcode, Ergebnisse und kommentierende Texte kompakt zwischen Forschern ausgetauscht werden können. Diese Modelle können entweder direkt oder als Ausgangspunkt für eigene Optimierungen verwendet werden.

Das obige Netz liefert pro Pixel eine Zugehörigkeit zu einer Kategorie (falls sie zu einer vorselektierten Teilmenge von 21 der 91 Kategorien gehört, ansonsten wird keine Kategorie angegeben).

Noch mehr Information liefern die Modelle, die bei der Google-Forschergruppe zur TensorFlow Object Detection API zu finden sind. Hier wird jedes erkannte Objekt mit einer Bounding-Box markiert und ein Score vergeben, wie sicher sich der Algorithmus bei der Erkennung ist. Das Ergebnis sieht dann folgendermaßen aus (klicken Sie bitte auf das Foto für eine vergrößerte Darstellung):

Objekterkennung mit der Tensorflow Object Detection API
Objekterkennung mit der Tensorflow Object Detection API

Hier ist aus Gründen der besseren Überschaubarkeit nur jedes Objekt mit einem Mindestscore von 60 % dargestellt.

Drei der vier Reiter werden sicher erkannt, beim vierten reicht es mit einem Score unter 60 % nicht zu einer Darstellung; der vorher erwähnte Ansatz von DeepLab hatte übrigens bei dieser Person keine Probleme. Dazu kommen eine blau gekleidete Person und ein Schirm im Hintergrund. Weiterhin haben wir drei Pferde, wobei das vierte Pferd auch nur in winzigen Teilen frei sichtbar ist und der menschliche Beobachter eher aus dem Kopf des zugehörigen Reiters in 2 Metern Höhe schließt, dass dieser wohl auch auf einem Pferd sitzen muss.

Hier ist somit der Schritt von unstrukturierten Daten (“Bild”) zu strukturierten Daten (Liste von Objekten mit Lage, Kategorie und Score) vollzogen worden!

Nehmen wir noch ein anderes Beispiel eines Obsttellers her:

Was ist auf dem Obstteller zu sehen?

Was ist auf dem Obstteller zu sehen?

Hier sind wieder alle Objekte mit einem Score über 60 Prozent zu sehen. Eine Frucht wurde nicht erkannt; falls es eine Zitrone sein sollte, gehörte diese auch nicht zu den 91 Kategorien der COCO-Bilddatenbank.

Darstellungen von Lebewesen und Objekten in einer typischen Ausrichtung werden als “iconic” bezeichnet, etwa ein Pferd von der Seite oder ein Apfel von schräg oben, ist dies nicht der Fall, als “non-iconic”. Eine Darstellung einer Zitrone mit direkter Sicht auf eines der spitzen Enden wäre non-iconic.

Der große Rahmen ohne sichtbares Label bezeichnet übrigens einen Esstisch und auch die Schüssel wird erkannt.

Es lassen sich zum Beispiel automatisch Anzahlen schätzen, wobei nur Objekte mit einer gewissen Mindestgröße zählen. Sei etwa jedes Objekt mit einem Score > 80 % sicher erkannt und jedes Objekt mit einem Score > 30 % als mögliches Objekt dieser Kategorie klassifiziert, so lautete eine Zusammenfassung dieses Bildes für die in der COCO-Datenbank vorkommenden Früchte: 4 – 5 Äpfel, 3 – 4 Bananen und 2 Orangen.

So ließen sich beispielweise auch Anzahl und Positionen von Personen zu gewissen Zeiten im Sichtbereich einer Kamera schätzen und in eine relationale Datenbank exportieren. Sei noch ein letztes Beispiel aus dem Straßenverkehr gegeben:

Autos und Ampeln sicher erkannt
Autos und Ampeln sicher erkannt

Wir haben übrigens für die Auswertung aus der Menge von ca. 20 vortrainierten Modellen dasjenige mit der höchsten Vorhersagegüte gewählt. Die Auswertung benötigt auch Rechenpower. Ein handelsüblicher PC braucht ca. 25 Sekunden für die einmalige Initialisierung und dann etwa 32 Sekunden für die Auswertung jedes weiteren Bildes in der Größe 600×600. Die Webseite nennt für Bilder mit diesen Ausmaßen eine Durchschnittszeit von 1.8 sec.

Der Unterschied lässt sich leicht erklären: Die Autoren verwenden zur beschleunigten Berechnung eine spezialisierte GPU-Karte im vierstelligen Eurobereich! Erlaubt man Abstriche bei der Vorhersagequalität, so bieten die Autoren auch ein Modell an, das bei ihnen für die Auswertung nur 26 Millisekunden benötigt; bei unserem Rechner sind es dann etwa 80 Millisekunden.

Nachtrag: Inzwischen (Juli 2019) kann ich mit einer GPU-Karte (Nvidia Quadro RTX 4000) arbeiten. Deren Auswertungszeiten liegen bei 1.2 sec für das gute Modell und beim einfachen Modell sind es die erwähnten 80 Millisekunden geblieben, d. h., hier liegt der Flaschenhals wohl woanders. Im Web zu findende handoptimierte Auswertungsskripte für das einfache Modell ergeben bei mir ca. 20 Millisekunden. Bilder einer Webcam könnten somit mit ausreichenden 50 fps ausgewertet werden – die Weiterverarbeitung einmal vernachlässigt!

Die Algorithmen funktionieren prinzipiell recht gut, können aber auch einmal danebenliegen und beispielsweise in einer Birne, die nicht zu den 91 Objekten gehört, eine Banane erkennen, oder einen Müllmann plötzlich als Hydranten klassifizieren, obwohl in den restlichen Bildern einer Videosequenz der Müllmann mit über 90 % als Person erkannt wird (war etwa die minimale Unschärfe schuld?). Es kann auch passieren, dass sich in einer Videosequenz die Klassifikation eines parkenden Autos ändert, obwohl es sich keinen Zentimeter bewegt hat. Offensichtlich haben hier wohl auch entferntere bewegte Objekte einen Einfluss auf die Vorhersage.

Auch lassen sich solche Algorithmen täuschen: Es ist möglich, ein gegebenes Bild mit einem klar erkennbaren Objekt so zu stören, dass der Mensch keinen Unterschied sieht, aber ein solcher Algorithmus dennoch jede gewünschte Kategorie zuordnen wird. Außerdem ist es machbar, den Algorithmus davon zu überzeugen, in einem völlig verrauschten Bild mit hoher Sicherheit ein beliebig vorgegebenes Objekt zu erkennen. In beiden Fällen muss aber bei der Verfremdung der Bilder systematisch und mit Know-how vorgegangen werden; ein reines Hinzufügen von zufälligem Rauschen wird nicht zum Erfolg führen.

Laufend gibt es weitere Bestrebungen, noch größere Bilddatenbanken aufzubauen, mit noch mehr Bildern und mit noch mehr identifizierbaren Objekten.

Sicherlich gibt es noch eine Vielzahl von weiteren Anwendungen: Erkennung von Text im Bild oder von Verkehrszeichen für das fahrerlose Auto, das Schätzen der Anzahl von Personen bei Demos oder die Verarbeitung von Bildsequenzen aus Videos mit Objektverfolgung.

Besonders interessant ist auch der Versuch, die Richtung der semantischen Bildsegmentierung umzukehren: Hier wird nicht aus einem vorliegenden Bild die Segmentierung gewonnen, sondern aus einer Segmentierung wird ein realistisch wirkendes Bild generiert. Die dazu verwendeten “generative adversarial networks (GAN)” haben entschieden zu einem Fortschritt in Siebenmeilenstiefeln beigetragen und werden noch für einige Zeit ein heißes Thema bleiben.