Wie kann man einen eigenen Datensatz aus den Google Bildern erstellen?

4 min read

Wie kann man einen eigenen Datensatz aus den Google Bildern erstellen?

Die Daten stellen einen Betriebsstoff dar, der das Deep Learning voranbringt. Der Datenumfang im Internet vergrößert sich ständig. Große Datensätze mit Bildern, wie Pascal VOC, ImageNet und Google Open Images haben die Präzision der Erkennung stark entwickelt. Es gibt auch viele fachspezifische Datensätze.

Aber was tun, wenn es für eine Aufgabe keinen Datensatz gibt? Eine der Lösungen dieses Problems besteht darin, einen Grabber zu erstellen, der den Datensatz aus den Ergebnissen der Bildersuche bei Google oder Bing sammelt. Er befindet sich auf AWS Lambda unter Einsatz der Architektur ohne Server.

Wir testen diese Methode an dem Beispiel des Trainingsprojekts «Kunst oder nicht?» Dieses Projekt versucht die ewige Frage zu beantworten: was ist Kunst?

Der Datensatz zum Thema Kunst

Zum Lehren des Klassifikators, der weiß, ob etwas zu Kunst gehört, benötigt man zwei Arten von Bildern:

  • Bilder von Kunst (positive Beispiele)
  • Bilder von anderen Dingen (negative Beispiele)

Das Grabbing von Google Bildern

Nach dem Googeln kann man Listen von verschiedenen Kunstarten finden, die als Suchanfragen für die Suchmaschine verwendet werden. Dies sind einige Beispiele:

  1. die abstrakte Kunst
  2. die Akrylmalerei
  3. die antike Dichtkunst
  4. die Animation
  5. die Architektur
  6. Art Deco
  7. Art nouveau

Das Erstellen der Applikation

Man kann die Applikation mit Hilfe der Bibliothek Serverless erstellen. Das Skript für den Gebrauch erfüllt viele verschiedene Aufgaben: generiert Lambda-Funktionen, lädt ihren Kode in die Cloud herunter, stimmt Privilegien ein, schafft Tabellen DynamoDB, verbindet Triggers miteinander. Dazu gebraucht man den Befehl:

sls deploy

Dann lädt man Kunstkategorien in die Tabelle DynamoDB herunter. Wenn in dieser Tabelle ein Element hinzugesetzt wird, beginnt das Skript die URLs von Bildern für diese Kategorie zu sammeln. Dieses Skript nennt man «der Grabber von Anfragen».

Was ist AWS Lambda?

AWS Lambda stellt einen Service dar, der den Kode in der serverless Umgebung aktiviert. Man braucht der Applikation keinen Server zuweisen und muss ihn nicht verwalten. All das macht AWS. Man zahlt Amazon nur für die Zeit, während die Applikation funktioniert. Die Lambda-Funktion tritt in Aktion als Antwort auf verschiedene Ereignisse im Cloud von Amazon.

Sobald das Ereignis vorkommt, das von der Lambda-Funktion erwartet wird, generiert AWS den Server und treibt den Funktionskode im Container an.

Der Grabber von Anfragen übergibt die Suchanfragen der Suchmaschine (Google Images oder Bing Image Search API) mit Hilfe von Phantom.js und Selenium. Dann scrollt die Lambda- Funktion die Seite bis zum Ende, damit alle Bilder geladen werden. Alle Links zu den Bildern auf der Seite werden gesammelt und gespeichert.

Jede Funktion sollte höchstens 5 Minuten funktionieren. Wenn man so viele Bilder jeder Kategorie wie möglich herunterladen will, sollte man das Sammeln von URLs und das Herunterladen in einer Funktion nicht antreiben.

Die zweite Tabelle in DynamoDB wird angewandt, wo der Grabber von Anfragen Links auf Bilder einbringt. Die Addition in die Tabelle aktiviert die andere Lambda-Funktion, die das Bild herunterlädt und in S3 speichert.

Der Preis von DynamoDB

Es ist ungünstig, DynamoDB lange Zeit zu verwenden. Für einmalige Projekte ist es genau richtig. AWS erlaubt 25 Anforderungen pro Sekunde auf das Lesen und die Eintragung kostenfrei. Das Limit für jede Tabelle kann sich bis 1.000 Anforderungen pro Sekunde steigern und danach reduzieren. Soweit der Betrag der gesonderten Kapazität im Laufe eines Monats 25 nicht übersteigt, sollte alles kostenlos sein.

Nachdem die Lambda-Funktionen ihre Arbeit beendet haben, erhält man rund 1.000 Bilder für jede Kategorie — insgesamt 120 Tausend Bilder.

Hier sind einige Beispiele von Bildern. Die meisten von ihnen stellen wirklich Kunst dar.

Probleme dieses Datensatzes

In diesem Stadium können 2 Fragen entstehen.

Lernt man auf solche Weise den Fehler (bias) der Suchmaschine?

Man lernt, was die Suchmaschine von dieser Kategorie weiß. Gewissermaßen ist das ein Austrieb von Kenntnissen (Knowledge Distillation). Man nimmt alle Daten und Metadaten über Bilder, die  Google enthält, Kenntnisse, die von seinen Modellen gesammelt wurden, und transformiert diese Kenntnisse in ein Modell. Falls Google meint, dass etwas nicht zur abstrakten Kunst gehört, wird das Modell das ebenso meinen.

Erhält man sehr verrauschte Daten?

Ja, das stimmt. Das kann ein Problem sein, wenn es keine Methode zur Reinigung gibt. Falls man einen Datensatz mit verschiedenen Maschinenmodellen sammelt, sollte man die Angaben durch den Detektor von Maschinen durchlaufen und die Bilder entfernen, wo es keine Maschinenmodelle gibt.

Man sollte die Gruppe von negativen Beispielen sammeln

Um Kunst von Nichtkunst zu unterscheiden, sollte das Modell Beispiele von Dingen sehen, die nicht zur Kunst gehören. Es gibt den Datensatz ImageNet, wo viele Bilder von solchen Dingen gesammelt wurden.

Um nicht noch mehr Rausch dem Datensatz hinzuzufügen, sollte man die Klassen von ImageNet abfiltern, die mit den Kategorien nicht verbunden sind.

Dazu verwendet man die Vektordarstellungen von Worten (word embeddings) aus dem Paket Gensim. Mit ihrer Hilfe kann man Klassen von ImageNet und Kategorien in word2vec-Versionen transformieren.

Word2vec

Word2vec — stellt das Modell dar, das das Wort in der Form des 300-dimensionalen Vektors darstellt. Dieses Netzwerk setzt Wörter nebeneinander in diesem Raum, die in ähnlichen Kontexten   vorkommen— zum Beispiel, die Wörter der König und der Zar. Solche Wortdarstellungen lassen arithmetische Operationen auf den Wortsinnen durchführen. Zum Beispiel:

word2vec(der König) — word2vec(der Mann) + word2vec(die Frau) = word2vec(die Königin)

Viele Kategorien werden mit einigen Wörtern beschrieben, deshalb sollte man für ihre Vektordarstellungen addieren. 

Dann sollte man die Cosinus-Distanz zwischen den Vektoren für Klassen von ImageNet und allen Kategorien berechnen.

In bestimmten Bedingungen können manche nicht eindeutigen Klassen, wie «die Vase » verloren werden. Nun sieht das Modell schwere negative Beispiele nicht, Dinge,  die der Kunst ähnlich sind, aber nicht zu ihr gehören. 

Aus den ausgewählten Klassen sollte man so viele Bilder wählen, wie es positive Beispiele gibt.

Das Lehren und die Bewertung

Als Modell kann man das auf ImageNet gelehrte Modell Inception ResNet V2 optimieren.

Zur Vergrößerung des Datensatzes kann man die Augmentation verwenden: die Drehung, das Schneiden, die Vergrößerung und die horizontale Widerspiegelung.

Man sollte die letzte Schichte entfernen und durch das Dropout mit der Wertezahl 0,8 und die vollvermaschte two-input Schichte ersetzen.

Nach dem Lehren von den letzten 10 Convolutional-Schichten des Modells auf dem Validation Sample aus 30 Tausend Bildern wird die Präzision von mehr als 0,99 erreicht.

Hier sind die Vorhersagen des Modells auf dem Validation Sample (das zweite Bild in der dritten Reihe wurde falsch klassifiziert).

Die Ergebnisse auf dem Validation Sample (nur die letzte Schichte wurde gelehrt)

Man kann den Testabruf aus den Bildern sammeln.

Die Ergebnisse der Testproben (nur die letzte Schichte wurde gelehrt) 

Man kann mehr Daten hinzufügen

Dieser Klassifikator der Kunst funktioniert am besten, wenn das Objekt (das Gemälde, das Standbild usw.) das Hauptobjekt auf dem Bild ist. Google zeigt in der Regel Bilder, die der Anfrage direkt entsprechen und keinen Rausch enthalten.

Um dieses Problem zu lösen, kann man die zweite Gruppe von Kategorien sammeln. Wenn man die Bilder von folgenden Objekten herunterlädt, kann man Hintergrundgeräusche erhalten:

  • die Kunstgalerie
  • das Kunstmuseum
  • Menschen im Museum
  • die Installation

Man kann außerdem bestimmte Kategorien hinzufügen, die in der ersten Liste nicht vorhanden waren:

  • das Graffiti
  • die Performance
  • die angewandte Kunst

Das hat die Präzision auf den Bildern verbessert, wo es Menschen gibt. Dieses Beispiel hat die wesentlichen Vorteile dieses Ansatzes anschaulich gemacht: man schaffte es, neue Objekte einfach und günstig hinzuzufügen.

Das Modell erlernte die Wahrscheinlichkeitsverteilung von Bildern aus Google. Aber vermutlich sehen wahre Bilder ein wenig anders aus und können das Modell zerstören. Man kann das mit Hilfe von typischen Bildern optimieren, mit denen man es anwenden möchte. Man braucht viel weniger Bilder. 

Trotz aller Stolpersteine ist es eine wertvolle Methode zur Erstellung eines Datensatzes in den Situationen, wenn andere Varianten unzugänglich oder zu teuer sind.

Quelle

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.