Logistic Regression: Der einfachste Weg Kleidungsstücke zu klassifizieren

In der industriellen Produktion, Qualitätskontrolle oder auch in hochkomplexen Roboteranwendungen muss oft die wiederkehrende und grundlegende menschliche Fähigkeit des "Sehens" durch eine Maschine nachgebildet werden. In der Regel werden dabei Objekte klassifiziert oder detektiert (siehe AIAV Video Classifier vs. Detector). Aber was bedeutet denn zu "Sehen"? Mathematisch geschrieben suchen wir folgendes:

Dabei ist x ein Merkmalsvektor von einem Beispielbild und y eine Funktion, welche ausgibt, ob das gesuchte Objekt erkannt wurde oder nicht. Da mit dieser Formulierung nur die wenigsten Interessent*innen etwas anfangen können, schlüsseln wir das Ganze im nächsten Absatz etwas auf.


Wir wollen ein Programm schreiben, das ein Bild lädt (entweder direkt von einer Kamera oder in gespeicherter Form von der Festplatte) und ein bestimmtes Objekt im Bild erkennt. Wie Sie im Zuge anderer Use Cases auf dieser Platform schon gelernt haben, gibt es mehrere Möglichkeiten, diese Funktionalität zu implementieren.


Menschen haben die bemerkenswerte Fähigkeit in einem Augenblick "Dinge" zu erkennen und deren Bedeutung (meistens) sofort zu erahnen. Stellen Sie sich Ihre nächste Shoppingtour vor: Sie gehen an einem Schaufenster vorbei und sehen eine Jacke. Diese Jacke gefällt Ihnen, da Sie so eine noch nicht haben. Sie erkennen sofort den Nutzen dieses "Objekts", da sie das Konzept von Jacken kennen: man kann sie im anziehen und sie halten im Winter warm. Das wissen Sie, obwohl Sie diese Jacke noch nie gesehen haben. Sie haben im Laufe Ihres Lebens bereits gelernt, wie Jacken typischerweise aussehen und welche Eigenschaften sie haben. Im Gegensatz zum Mensch ist diese Fähigkeit aber für Maschinen nur schwer erlernbar.


In diesem Use Case stellen sich folgende Fragen, um die menschliche Fähigkeit der Wahrnehmung für einen sehr speziellen Fall in Software zu implementieren:

  • Visuelle Grundbausteine und Merkmale: Was macht ein Kleidungsstück aus? Was sind die visuellen Grundbausteine, um Kleidungsstücke erkennen zu können?

  • Klassifizieren: Wie können wir diese visuellen Grundbausteine nutzen, um eine Klassifizierungsfunktion für Kleidungsstücke zu schreiben?

In diesem Use Case implementieren wir die Objekterkennung anhand eines vereinfachten Beispiels: Auf einem Förderband werden in einer Produktionsstraße Pullover und Kleider zu einer Verpackungsstation befördert. Ein Roboter soll diese entsprechend der Art des Kleidungsstückes (Pullover oder Kleid) anders verpacken. Die Entscheidung, ob das aktuelle Kleidungsstück ein Pullover oder Kleid ist, wird dabei mittels einer über dem Förderband montierten Kamera getroffen. Unsere Aufgabe ist es, ein Programm zu schreiben, welches aus dem Kamerabild die Art des Kleidungsstückes für den Roboter "berechnet".


Ist das ein weit hergeholtes Beispiel? Ja, das ist es. Sie werden sehen, dass in AI-Tutorials und auch auf dieser Plattform immer wieder stark vereinfachte und etwas realitätsfremde Use Cases präsentiert werden. Diese vereinfachten Use Cases erlauben es uns, uns auf den AI-Teil der Lösung zu konzentrieren und zu zeigen, wie solche Probleme grundsätzlich mit einfachen Modellen gelöst werden können.


Beschaffung der Trainingsdaten und Modellauswahl

Zunächst müssen wir uns entscheiden, aus welcher Quelle wir Daten für das Training unserer Modelle/Algorithmen beziehen. Dabei haben wir drei Möglichkeiten:

  • Wir erstellen unseren eigenen Datensatz.

  • Wir nutzen bestehende Datensätze (es gibt inzwischen sehr gute Bilddatenbanken für unterschiedliche Probleme).

  • Wir nutzen bestehende Datensätze, die unserem Problem ähnlich sind und ergänzen diese mit eigenen Daten.

Wir haben Glück: für unser vereinfachtes Beispiel existiert bereits ein Datensatz! Als Datengrundlage in diesem Use Case nutzen wir den frei zugänglichen Fashion MNIST Datensatz. Abbildung 1 zeigt Beispielbilder aus diesem. Dabei nutzen wir lediglich inkludierte Bilder von Kleidern und Pullovern.


Abbildung 1: Beispielbilder aus dem Fashion MNIST Datensatz (Bildquelle: Fashion-MNIST).


Wie bei jedem Computer-Vision-Projekt stellt sich die Frage, mit welchem Modell die Merkmalsextraktion bzw. Klassifizierung durchgeführt werden soll. Zum Zeitpunkt der Verfassung dieses Artikels stellte sich die Lösung des Problems durch ein convolutional neuronal network (CNN, siehe AIAV Video CNN Detector) als zielführend dar. Dabei könnten bereits bestehende Modelle, wie z.B. VGG16 oder ResNet-50 verwendet werden. Im Sinne dieser Plattform werden wir hier aber einen weitaus simpleren und besser nachvollziehbaren Ansatz vorstellen. Wir gehen einen Schritt zurück zur klassischen Datenverarbeitung und wählen einen zweistufigen (für uns "linearen") Ansatz:


1. Merkmalsextrahierung mittels Principal Component Analysis:

Principal Component Analysis (PCA oder Hauptkomponentenanalyse, siehe AIAV Video Principal Component Analysis) ist eine klassische Methode der Statistik und kann linear unabhängige Merkmale aus einem Datensatz extrahieren. Der Erklärbarkeit und Einfachheit der PCA stehen allerdings zwei signifikante Nachteile gegenüber:

  • PCA gehört zur Familie der unüberwachten Modelle (unsupervised in der Fachliteratur, siehe AIAV Video Unsupervised Learning). Bei der Anwendung von PCA werden Merkmale rein anhand ihrer statistischen Repräsentation der darunterliegenden Daten extrahiert. CNN's lernen hingegen eigenständig Merkmale zu extrahieren, welche "nützlich" für die aktuelle Aufgabe (z.B. Klassifizierung) sind. Das ist ein unwichtig klingender, aber sehr signifikanter Unterschied.

  • PCA ist ein lineares Modell. Derartige Modelle sind zwar leicht interpretierbar, aber in der Praxis häufig zu eingeschränkt.

2. Klassifizierung durch Logistic Regression (LR):

Die LR ist in der angewandten Statistik und im maschinellen Lernen das bekannteste Modell für "simple" Klassifizierungsaufgaben. Wir nutzen dieses Modell, um anhand der extrahierten Merkmale Bilder zu klassifizieren. Wir trainieren die LR mit einem beschrifteten Trainingsdatensatz.


Abbildung 2 zeigt unser Vorgehen. Wir teilen zunächst den Datensatz zufällig in einen Trainings- und einen Testdatensatz und trainieren anschließend die PCA und LR anhand des Trainingsdatensatzes. Dieses Vorgehen ist notwendig, damit die Modelle während des Trainings nicht einfach "auswendig lernen". Anschließend nutzen wir die trainierte PCA, um Merkmale des Testdatensatzes zu extrahieren. Diese werden weiters dann mit der trainierten LR den Klassen "Kleid" und "Pullover" zugeordnet. Um zu evaluieren, wie gut die trainierten Modelle die Problemstellung erfüllen, berechnen wir die Genauigkeit (Accuracy in der Fachliteratur) der Vorhersagen, indem wir die richtig klassifizierten Testbilder durch die Gesamtanzahl der Testbilder dividieren.


Abbildung 2: Vorgehen in diesem Use Case


Grundlagen der Bildverarbeitung

Bevor wir weiter in die technischen Details eindringen, beschäftigen wir uns noch mit den Fragen, was überhaupt digitale Bilder sind und wie wir diese verarbeiten können. Ein Computer verarbeitet Bilder anders als ein Mensch und interpretiert diese in Form von Matrizen. Diese sind vergleichbar mit einer großen Tabelle, wo in jedem Feld ein Zahlenwert steht. Jede dieser Zahlen gibt die Intensität eines Pixels, also eines Bildpunktes, an. Ein Pixel ist daher nichts anderes als ein Eintrag in einer Tabelle. Ein Farbbild besteht so beispielsweise aus drei Tabellen, welche jeweils die Intensität für die roten, grünen und blauen (RGB) Bildpunkte beinhalten. Kombiniert man die Matrizen (Farbaddition), erhält man ein Farbbild, das für den Menschen interpretierbar ist.


Wie Sie vielleicht schon erkannt haben, sind die genutzten Bilder keine RGB-, sondern Graustufenbilder. Der Unterschied hier ist, dass das Bild mit nur einer einzelnen Matrix beschrieben wird. Die Zahlenwerte in dieser Matrix geben die Helligkeit des jeweiligen Pixels an.


Die Bilder im Fashion MNIST Datensatz haben eine Größe von 28 mal 28 Pixeln. Jedes Bild ist demnach durch 784 Werte in einer Tabelle beschrieben. Damit die Bilder/Tabellen von der PCA verarbeitet werden können, müssen sie allerdings noch vorab umgeformt werden.


Schritt 1: Aufarbeiten der Daten

In der Mathematik werden Eigenschaften von Objekten in sogenannten "Vektoren" beschrieben. Ein Bild ist in unserem Fall aber eine Matrix. Um die für die Mathematik nötigen Vektoren aus den Bildern zu generieren, "zerschneiden" wir die Bilder und "kleben" die Streifen wieder zusammen. Diesen Prozess nennt man "Flattening" und ist in Abbildung 3 für ein vier mal vier Bild skizziert.


Abbildung 3: Darstellung der Flattening Prozedur für 16 Pixel


Jedes Bild ist nach dem Flattening nun ein liegender Vektor, also eine Tabelle mit einer Zeile und 784 Spalten. Der Fashion MNIST Datensatz besteht aus 60.000 Trainingsbildern und 10.000 Testbildern, aufgeteilt auf zehn Klassen. Für unser Beispiel beschränken wir uns allerdings auf 2 Klassen (Kleider und Pullover), wodurch wir nur mit 11.976 Bildern arbeiten. Der Trainingsdatensatz ist also nach dem Umwandeln in Vektoren eine Tabelle mit 11976 mal 784 Zahlen.


Diese Tabelle teilen wir zufällig in einen Trainings- und Testdatensatz auf. Wir nutzen dabei einen sogenannten "85% Split", welcher besagt, dass wir 85% der Einträge im Datensatz zum Trainieren und 15% der Einträge ausschließlich zum Testen verwenden. Damit trainieren wir mit 10180 Trainingsbeispielen und Testen mit 1795 Bildern.


Schritt 2: Merkmale Extrahieren

Wir wenden nun PCA auf die Trainingsbilder an, um Merkmale zu extrahieren. Die PCA verringert dabei die Dimension jedes Bildes und versucht über den ganzen Trainingsdatensatz gesehen so viel Information wie möglich trotz Reduktion der Dimensionalität im Datensatz zu behalten. Die Anzahl an Merkmalen, die extrahiert werden sollen, können wir dabei vorgeben. Für diesen Use Case verwenden wir die zehn aussagekräftigsten Merkmale. Das Resultat ist ein neuer Vektor für jedes Bild, der angibt, wie stark jedes der zehn gelernten Merkmale im Bild erkennbar ist.


In der Praxis heißt das, dass unsere Tabelle an Trainingsdaten durch PCA schmäler gemacht wird. Aus der Tabelle mit 10180 Trainingsbeispielen, die je aus 784 Zahlen bestehen, machen wir eine neue und kleinere Tabelle mit 10180 Trainingsbeispielen (Zeilen) mit je zehn Merkmalen (Spalten). Das ist eine Reduktion der Daten auf ca. 1,2%.


Diese abstrakte Prozedur ist in Abbildung 4 graphisch aufgearbeitet.


Abbildung 4: Darstellung der PCA-basierten Dimensionalitätsreduktion. 784 Dimensionen (28 mal 28 Pixel) werden mit der trainierten PCA auf zehn Dimensionen reduziert. Die Visualisierung unten rechts stellt die zehn wichtigsten PCA-Merkmale dar.


Die reduzierte Matrix können wir für die Klassifizierung nutzen. Wenn Sie die PCA-Merkmale in Abbildung 4 betrachten, können Sie die visuellen "Grundbausteine" von Kleidungsstücken erkennen. Die hellen oder dunklen Bereiche sind jene Bereiche, welche die PCA als "relevant" empfunden hat, um die Klassen "Kleid" und "Pullover" trennen zu können. Sie können die reduzierte Matrix folgendermaßen interpretieren: Für jedes Beispielbild wird angegeben, wie stark ein visueller Grundbaustein darin vorkommt. Wir beschreiben die Bilder also nicht mehr über Pixel, sondern über die Ausprägung von gelernten Merkmalen! Zu beachten ist, dass hier bewusst Information verloren geht. Allerdings hoffen wir, dass die zehn extrahierten Merkmale wesentlich genug sind, damit die beiden Klassen trotzdem klar trennbar sind.


Schritt 3: Training der Klassifizierung

PCA hat unseren Datensatz auf wesentlich weniger Zahlen pro Beispiel reduziert. Nun benötigen wir noch ein Modell, welches anhand der Merkmale entscheidet, ob ein Bild ein Pullover oder ein Kleid ist. Dazu verwenden wir Logistic Regression, ein einfaches mathematisches Modell zum Erlernen von Klassifizierungsfunktionen. In unserem Fall nimmt LR die durch PCA extrahierten Merkmale als Eingang und gibt eine Voraussage über die Klasse aus.


LR wird dabei vorab mittels überwachten Lernens (supervised Learning in der Fachliteratur, siehe AIAV Fähigkeit Lernen) basierend auf den Trainingsdaten trainiert. Wichtig ist, dass der Trainingsdatensatz beim überwachten Lernen beschriftet sein muss. Das heißt, dass LR nur lernen kann, wenn wir für jedes Bild, also jede Zeile der Trainingsmatrix, angeben, um welche Klasse (Pullover oder Kleid) es sich tatsächlich handelt. Der Trainingsprozess gibt uns dann eine Funktion zurück, welche den Bildmerkmalen Klassen zuordnet.


Abbildung 5 stellt die Komplette Datenverarbeitung dar.


Abbildung 5: Skizze der kompletten Datenverarbeitungs-Pipeline. Die Rohbilder werden vorverarbeitet, mittels PCA werden Merkmale extrahiert und Merkmale und Beschriftungen werden zum Training einer Logistic Regression Klassifizierungsfunktion eingesetzt.


Schritt 4: Testen der Anwendung

Bei vielen Modellen im Bereich des maschinellen Lernens, ist nicht garantiert, dass wirklich das Lösen der Problemstellung gelernt wird. Dabei ist sogenanntes "Overfitting" ein Problem, das je nach zufällig gesetzten initialen Parametern, Trainingsdaten und Modell vorkommen kann. Beim Overfitting schafft es das Modell nicht zu generalisieren und kann daher bei unbekannten Eingangsdaten (in unserem Fall Bilder) die Problemstellung nicht mehr lösen.


Um zu zeigen, dass kein Overfitting vorliegt, lassen wir den in Schritt 1 beiseite gegebenen Testdatensatz von unseren mittels dem Trainingsdatensatz trainierten Modellen verarbeiten und analysieren den Ausgang. Da der Testdatensatz ebenso beschriftet ist, können wir die Voraussagen der Modelle mit den tatsächlichen Klassen der Bilder vergleichen. Die Genauigkeit der Voraussagen berechnen wir, indem wir die Anzahl der richtigen Voraussagen durch die Anzahl der Bilder im Testdatensatz dividieren.


Abbildung 6 zeigt jeweils ein Beispiel für die richtige Voraussage der Klassen "Kleid" und "Pullover".


Abbildung 6: Vorhersage eines Kleides und eines Pullovers. Beide Bilder werden richtig und mit einer hohen Sicherheit klassifiziert.


Unsere Modelle erreichen eine Genauigkeit von 97% am Testdatensatz. Dieser Wert ist in der Praxis aber häufig nicht gut genug. Stellen Sie sich eine Produktion vor, wo Sie eine Million Produkte am Tag verpacken müssen. Eine Genauigkeit von 97% würde in 30.000 Fehler pro Tag resultieren. Um industriellen Anforderungen gerecht werden zu können, müsste hier noch weiter, gegebenenfalls mit anderen Methoden und Modellen, experimentiert werden. Wenn mehrere Modelle/Verarbeitungs-Pipelines die gesetzten Anforderungen erfüllen, empfehlen wir den folgenden Ansatz: Je einfacher und simpler das Modell, desto besser.


Unsere auf NumPy und scikit-learn basierende Beispielimplementierung finden Sie unter dem unten eingebetteten GitHub Link.



7 Ansichten

Aktuelle Beiträge

Alle ansehen