Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
ss19:eigenfaces [2019/10/04 23:44] Labo [Ausblick] |
ss19:eigenfaces [2021/01/05 23:43] (aktuell) Labo [Ergebnis] |
||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
====== Eigengesichter ====== | ====== Eigengesichter ====== | ||
Analysieren und Generieren von menschlichen Gesichtern mit Hilfe eines Autoencoder-Netzwerkes und einer Hauptkomponentenanalyse. | Analysieren und Generieren von menschlichen Gesichtern mit Hilfe eines Autoencoder-Netzwerkes und einer Hauptkomponentenanalyse. | ||
+ | |||
+ | Code: https://git.tu-berlin.de/labo/eigenfaces | ||
Gruppe: Lars Bonczek | Gruppe: Lars Bonczek | ||
Zeile 53: | Zeile 55: | ||
Ein CNN besteht aus einer Abfolge von je einer oder mehreren Convolutions, gefolgt von je einer Pooling-Schicht. Ist die Größe der Neuronen-Matrix ausreichend reduziert, folgen noch eine oder mehrere Fully-connected-Schichten, um die Daten abschließend auszuwerten und beispielsweise zu kategorisieren. Nach jeder Schicht folgt meist die ReLU-Aktivierungsfunktion, die definiert ist als $f(x)=\text{max}(0,x)$. | Ein CNN besteht aus einer Abfolge von je einer oder mehreren Convolutions, gefolgt von je einer Pooling-Schicht. Ist die Größe der Neuronen-Matrix ausreichend reduziert, folgen noch eine oder mehrere Fully-connected-Schichten, um die Daten abschließend auszuwerten und beispielsweise zu kategorisieren. Nach jeder Schicht folgt meist die ReLU-Aktivierungsfunktion, die definiert ist als $f(x)=\text{max}(0,x)$. | ||
===== Planung/Verlauf ===== | ===== Planung/Verlauf ===== | ||
+ | |||
+ | Protokoll in Stichpunkten: {{:ss19:eigenfaces_protokoll.pdf|}} | ||
Mein erster Schritt war es, eine einfache Hauptkomponentenanalyse von Porträtfotos durchzuführen. Dafür suchte ich mir im Internet einen öffentlich zugänglichen Datensatz von Fotos, die von einer Universität zu Forschungszwecken veröffentlicht wurden. Dann implementierte ich die Hauptkomponentenanalyse in Python. Dabei unterliefen mir einige Fehler, sodass die Ergebnisse zunächst nicht meinen Erwartungen entsprachen. | Mein erster Schritt war es, eine einfache Hauptkomponentenanalyse von Porträtfotos durchzuführen. Dafür suchte ich mir im Internet einen öffentlich zugänglichen Datensatz von Fotos, die von einer Universität zu Forschungszwecken veröffentlicht wurden. Dann implementierte ich die Hauptkomponentenanalyse in Python. Dabei unterliefen mir einige Fehler, sodass die Ergebnisse zunächst nicht meinen Erwartungen entsprachen. | ||
Zeile 240: | Zeile 244: | ||
Außerdem gibt es eine [[eigenfaces#Webanwendung]], die für eine beliebige Gesichts-Kodierung das entsprechende dekodierte Gesicht anzeigen kann. Die Parameter des kodierten Gesichts können mit Schiebereglern angepasst werden, sodass man in Echtzeit den Einfluss der Parameter auf das dekodierte Gesicht sieht. | Außerdem gibt es eine [[eigenfaces#Webanwendung]], die für eine beliebige Gesichts-Kodierung das entsprechende dekodierte Gesicht anzeigen kann. Die Parameter des kodierten Gesichts können mit Schiebereglern angepasst werden, sodass man in Echtzeit den Einfluss der Parameter auf das dekodierte Gesicht sieht. | ||
+ | |||
+ | Der aktuelle Code des Projektes ist auf [[https://git.tu-berlin.de/labo/eigenfaces|GitLab]] zu finden und kann dort auch als ZIP-Datei heruntergeladen werden. | ||
+ | |||
+ | Die zuletzt von mir trainierte Version des Autoencoders (trainiert mit gut 64.000 Bildern) inklusive der Ergebnisse der Hauptkomponentenanalyse kann [[https://tubcloud.tu-berlin.de/s/BgY73PWkQdLSjX3|hier]] heruntergeladen werden. Mit diesem Paket kann die Webanwendung ohne weitere Vorbereitungen (außer der [[eigenfaces#Webanwendung|Anpassung der Konfigurationsdatei]]) verwendet werden. Ein neuer Trainingsdatensatz mit gut 140.000 Bildern kann [[https://tubcloud.tu-berlin.de/s/Tp8tpP757tFP3yy|hier]] heruntergeladen werden. | ||
==== aligner.py ==== | ==== aligner.py ==== | ||
Zeile 504: | Zeile 512: | ||
===== Fazit ===== | ===== Fazit ===== | ||
+ | Insgesamt bin ich mit dem Ergebnis dieses Projektes sehr zufrieden. Ich habe beim Trainieren des Autoencoders schneller gute Ergebnisse erzielt als erwartet. Das, was mich wirklich aufgehalten hat, war, dass mir keine vernünftige Hardware zur Verfügung stand. Google Colab ist für solche Aufgaben eigentlich nicht gedacht, und das merkte man auch. Ich werde sehr wahrscheinlich weiter an dem Projekt arbeiten, falls meine sonstigen Verpflichtungen es zulassen. Dann werde ich mir aber eine bessere Möglichkeit suchen als Google Colab. | ||
+ | |||
+ | Mich hat es sehr begeistert im Laufe dieses Projektes die Funktionsweise eines Autoencoders und von Neuronalen Netzwerken im Allgemeinen besser kennen zu lernen. Besonders spannend fand ich es, zu sehen, welche Korrelationen der Autoencoder in Verbindung mit der Hauptkomponentenanalyse in den Trainingsdaten finden konnte. So hingen manchmal die Haarfarbe einer Person und die Neigung des Gesichtes zusammen. Dies lag höchstwahrscheinlich einfach an den Trainingsdaten, die zufällig diese Korrelation aufwiesen. Manche der Merkmale, die ich ursprünglich trennen wollte, hingen aber offensichtlich zu sehr miteinander zusammen, um getrennt zu werden. So waren lange Haare meist in Verbindung mit einem schmaleren Gesicht und mehr Make-Up zu sehen. Blonde Haare meist im Zusammenhang mit heller Haut. Das Programm kann nichts dafür, es hat keine Vorurteile. Alle Vorurteile, die das Programm zu haben scheint, lassen sich durch die Zusammensetzung der Trainingsdaten begründen. Diese Daten bilden (in diesem Projekt) im Optimalfall einen Querschnitt durch die Promi-Welt. Es wurden also nur Zusammenhänge gelernt, die wirklich existieren. Die Gefahr dabei ist, Randgruppen außen vor zu lassen. Dieses Problem gibt es potentiell immer, wenn Machine Learning eingesetzt wird, um Entscheidungen über Menschen zu treffen. Im Endeffekt ist dies oft ein Zeichen für "underfitting", also eine zu starke Abstraktion der Realität. Vermeiden lässt sich dies nicht wirklich, aber es ist wichtig, sich diese Tatsache vor Augen zu führen. Mir hat dieses Projekt dabei geholfen. | ||
===== Quellen ===== | ===== Quellen ===== | ||