3D morphable Model von Blanz und Vetter, 1999

Eine kleine Geschichte über 3DMM’s und Deep-Learning

Die Erstellung von 3D Modellen auf Basis von einzelnen Bildern ist ein in den letzten Jahren immer populärer werdendes Themengebiet, hilfreich hierbei sind sog. 3DMM’s (3D morphable models). Für die Gesichtserkennung ist es eine enorme Erleichterung ein 3D Modell des Gesichtes zu haben um dies in der Orientierung zu verändern und mit anderen Bildern besser vergleichen zu können. Oder anhand des Modells bessere Schätzungen für Position von Facial Feature Points[1] zu machen, was besonders bei verdeckten Gesichtsteilen oder stark gedrehter Haltung hilfreich ist.
Die Erstellung von Neuralen Netzen zur Lösung des Problems, der Rekonstruktion von 3D Modellen, wurde erst im letzten Jahr eine mögliche Option. Der Weg dorthin wird in diesem Beitrag beschrieben.

Das erste 3DMM

Im Jahr 1999 haben Blanz und Vetter[2] den Grundstein gelegt für die Generierung von lebensechten 3D Repräsentationen von Gesichtern. Diese Arbeit ist auch noch 17 Jahre nach der ersten Veröffentlichung eine der am häufigsten zitierten bei aktuellen Papern in diesem Themengebiet. In der Arbeit wurde ein 3DMM vorgestellt, das anhand von 200 Gesichtern erstellt wurde. Es handelt sich hierbei um 100 Frauen und 100 Männern von denen 3D Modelle erstellt und die Textur abgetragen wurde, die Scans wurden von CyberwareTM bereitgestellt. Die Firma vertrieb Geräte mit denen 3D-Scans von Personen erstellt werden konnten. Das Unternehmen existiert seit 2011 nicht, mehr Informationen gibt es unter cyberware.com . Eine Java-Implementierung des Modells von Blanz und Vetter kann hier heruntergeladen werden. Das Modell ermöglicht es mit mehreren Parametern eine vielzahl von unterschiedlichen realistischen Gesichtern zu erstellen. In dem Modell enthalten ist ein Algorithmus der für ein gegebenes Eingabebild, eines Gesichts, eine Rekonstruktion ausgibt. Diese Rekonstruktion wird über 105 Iterationen optimiert bis das Endergebnis dem Orginal verblüffend ähnlich sieht. Die Berechnung dieser Näherung dauerte damals knapp 50min.

Das 3D morphable model von Blanz und Vetter

Das Basel Face Model

Der erste Ansatz von Blanz und Vetter war gut aber hatte noch einige Nachteile, zum einen mussten die Bilder alle das Gesicht frontal zeigen und zum anderen waren nur gleichmäßig beleuchtete Gesichter gut rekonstruierbar. 10 Jahre nach dem ersten 3DMM hat dann Vetter[3] ein neues Modell erstellt das ohne diese Einschränkungen auf Bilder anwendbar war. Zur Erstellung dieses Modells wurden eigenst Aufnahmen getätigt und es wurden wie bereits im ersten 3DMM 200 Personen (100 weibl. 100 männl.) erfasst. Die Aufnahmen wurden mit dem Gerät ABW-3D getätigt, es entstehen zugleich 3 Bilder aus verschiedenen Posen. Die Auflösung des Gerätes übertrifft die anderer Vorrichtungen um das 3 (Cyberware) bis 8 (3Dmd) fache. Nach eigenen Aussagen sollte dieses Modell nun den Bedarf an Lerndaten für neuronale Netze decken. Das Modell wurde in Matlab entwickelt und steht
hier zur freien Verfügung.

Das verbesserte 3DMM von Vetter 2009

Erste CNN’s für 3D Gesichts Rekonstruktion

Lange passierte nichts auf dem Gebiet bis 2016 von Blanz und Piotraschke[4] eine Methode vorgestellt wurde die das 3DMM zusammen mit riesigen Datensätzen kombinierte um einen synthetischen Datensatz von Lerndaten zu generieren. Die Datensätze bestehen aus Bildern von Personen, wobei für jede Person mehrere Bilder zur Verfügung stehen. Diese Methode hat den Vorteil, dass durch unterschiedliche Fotos der gleichen Person eine gemittelte (bessere) Version der 3D Rekonstruktion möglich wurde.
Nur 3 Monate später veröffentlichte Richards et al.[5] ein CNN das auf einen ähnlich wie Blanz und Piotraschke erstellten Lerndatensatz 3D-Rekonstruktionen erstellte. Diese Technik in Kombination mit einem shape-from-shading Algorithmus war nun in der Lage effizient 3D Modelle zu erschaffen.

CNN von Richards et al. 2016

Im Dezember wurde von Tran et al.[7] eine weitere Arbeit vorgestellt die die Berechnungszeit nun noch um einiges verringerte. So können Parameter für ein 3DMM innerhalb von durchschnittlich 88ms errechnet werden. Das Modell ist nicht nur schnell sondern auch sehr genau, laut den Verfassern ist es das bisher beste Verfahren für Gesichtserkennung das ihnen bekannt ist.

Very Deep Neural Network, Tran, 2016

Ein neues 3DMM basierend auf dem MeIn3D Dataset

Auf der gleichen Konferenz auf der auch Blanz und Piotraschke ihr Paper, über Lerndaten Generierung, vorstellten wurde ein weiterer Beitrag veröffentlicht. In dem Beitrag von Booth et al.[6] wurde ein 3DMM vorgestellt das auf dem MeIn3D Datensatz basierte. Dieser Datensatz wurde bereits im Beitrag Lerndatensätze erwähnt. Der Datensatz beruht auf ca 10.000 Gesichtern die 2012 im Londoner Science Museum von Besuchern aufgenommen wurden. Das Modell ist ab Januar 2017 für medizinische Forschung freigegeben, ob eine breitere Veröffentlichung geplant ist, ist bisher nicht bekannt. Ein großer Vorteil dieses 3DMM ist das wesentlich mehr verschieden Gesichtsausprägungen vorliegen, so sind zum Beispiel alle Ethnien vertreten. In vielen Arbeiten ist der Mangel an Diversifikation häufig ein Grund für fehlerhafte generierte 3D-Modelle.

Fazit

Die Entwicklung von CNN’s für single image 3d face reconstructions hat seit 2016 bereits erste Früchte getragen. Wichtig für die Entwicklung von Deep Neural Networks sind einerseits die 3DMM’s und zum anderen die Algorithmen zum Fitting der Parameter. Die Hürden die bis zu diesem Zeitpunkt unüberwindbar schienen, Lerndaten Knappheit und zu viele Output Knoten, sind augenscheinlich durch 3DMM’s genommen worden. Die Erstellung von Lerndaten mittels 3DMM’s und Schätzung von Parametern als Output Knoten machen die Methode nun schließlich durchführbar.

Die Ergebnisse in den letzten Beiträgen sind erstaunlich und veranschaulichen welches große Potential Deep-Learning, im Bereich Genauigkeit und Schnelligkeit, bietet. Das Thema ist enorm gefragt und wird in den nächsten Monaten, auf Grund der enormen Erfolge, wohl noch mehr Aufwind erfahren. Man kann gespannt sein auf die nächsten Arbeiten in dem Bereich.

Referenzen

[1] Jun 2016, Large-pose Face Alignment via CNN-based Dense 3D Model Fitting, Jourabloo, Liu http://cvlab.cse.msu.edu/pdfs/Jourabloo_Liu_CVPR2016.pdf
[2] 1999, A Morphable Model For The Synthesis Of 3D Faces, Volker Blanz, Thomas Vetter, http://www.cs.cmu.edu/~efros/courses/AP06/Papers/Blanz-siggraph-99.pdf
[3] 2009, A 3D Face Model for Pose and Illumination Invariant Face Recognition, Vetter et al, http://gravis.dmi.unibas.ch/publications/2009/BFModel09.pdf
[4] Jun 2016, Automated 3D Face Reconstruction from Multiple Images Using quality Measures, Blanz, Piotraschke, http://www.cv-foundation.org/openaccess/content_cvpr_2016/papers/Piotraschke_Automated_3D_Face_CVPR_2016_paper.pdf
[5] Sep 2016, 3D Face Reconstruction by Learning from Synthetic Data, Richards et al., https://arxiv.org/pdf/1609.04387.pdf
[6] Jun 2016, A 3D Morphable Model learnt from 10,000 faces, Booth et al., http://www.cv-foundation.org/openaccess/content_cvpr_2016/papers/Booth_A_3D_Morphable_CVPR_2016_paper.pdf
[7] Dez 2016, Regressing Robust and Discriminative 3D Morphable Models with a very Deep Neural Network, Tran et al., https://arxiv.org/pdf/1612.04904.pdf, Code unter https://github.com/anhttran/3dmm_cnn

Erstellung von Modellen mit Hilfe von MakeHuman

Die Bedienoberfläche von makehuman

Ich habe von meinem betreuenden Professor den Vorschlag bekommen zunächst eigene Modelle zu erstellen und mein Vorgehen für das Grundprojekt zu dokumentieren. Auf der Suche nach Programmen die mir hilfreich sein können bin ich über makehuman.org gestolpert. Dieses Programm wird seit 2001 entwickelt, ist Open-Source und in Python 2.7 geschrieben.
Da ich seit einiger Zeit selbst verstärkt mit Python arbeite war mein initiales Interesse sehr groß. Ich schaute mir das Programm an und stellte fest das kein direkter Zugriff auf die API durch die Programmierer angedacht ist. Allerdings gab es eine Commandline-Variante (makehuman-commandline) die ein Scripting-Interface bereitstellt. Mit der Option Scripte auszuführen ist eine beliebige Anzahl zufälliger Modelle problemlos zu erstellen.

Einrichtung der Umgebung

Da meine Versuche die Commandline-Variante unter Windows 10 zu installieren leider fehl schlugen entschied ich mich das Programm in einer Virtuellen-Maschiene unter Ubuntu 16.04 zu installieren. Die notwendigen Pakete die nicht unter pip installiert werden konnten sind unten aufgeführt.

apt-get install python-pip python-dev build-essential python-qt4-gl python-sip python-qt4
apt-get install libglu1-mesa-dev freeglut3-dev mesa-common-dev

Alle weiteren notwendigen Module können mit pip installiert werden.
Nachdem ich nun fertig war mit der Installation musste ich leider feststellen das nur wenige Features von MakeHuman in der Scriptingumgebung ausführbar waren. So war es zum Beispiel nicht möglich mit einem Befehl ein zufälliges Modell zu erstellen oder ein Modell zu exportieren.

Entscheidung über das Export-Format

Es gab 5 verschiedene Formate für den Export von Modellen. Das populärste ist mhx2, mit dem laut dem Forum von makehumancommunity.org ein guter Import zu Blender möglich sei. Es wurden alle Formate für das gleiche Modell zum Vergleich in Blender importiert.

Alle exportierten Formate im Überblick (v.L.n.R. .dae, .fxb, .obj, .mxh2, .slt)
Alle exportierten Formate im Überblick (v.L.n.R. .dae, .fxb, .obj, .slt, .mxh2)

Es ist zu erkennen das die Ergebnisse sehr unterschiedlich sind. Der Export per .stl ist unvollständig, ohne Textur und sehr grob. Die besten Ergebnisse werden mit dem mhx2-Format und dae-Format erlangt. Im Vergleich schneidet das mhx2-Format jedoch noch besser ab, wie in den Bildern unten zu erkennen ist. Da die erstellten Modelle zufällige Attribute haben kann ein männlicher Kopf auf einem weiblichen anmutenden Körper sein. Da lediglich der Kopfbereich interessant ist für das Projekt ist es nicht problematisch, dass die Gesichter nicht zu den Körpern passen. Die erste Generation von zufälligen Modellen hat bisher keine Haare oder andere Features wie Brille, Schnurbart o.Ä., ebenso sind die Texturen zunächst auch zufällig gewählt und so kann ein Modell welches den Parameter ‚cacasian‘ auf 1 hat und ‚asian‘ und ‚african‘ auf 0 eine Textur erhalten die zu einer dunkelhäutigen Person gehört. Wenn diese Modelle zur Erstellung von Lerndaten genutzt werden ist die Übertragbarkeit des entstehenden Modells auf echte Bilder natürlich weniger gegeben. Ebenfalls gilt dies für das Alter einer Person und die Textur, wenn später noch Haare und andere Features hinzugefügt werden muss hier auch darauf geachtet werden, dass diese stimmig sind.

Erweiterung des Programmcodes

Um mehr Freiheiten zu gewinnen wurde der Programmcode genauer angeschaut. Es existiert ein Plugin das zufällige Modelle generieren kann, der notwendigen Programmcode wurde in die Scripting-Umgebung hinzugefügt. So war es nun möglich belibig viele zufällige Modell in einer Schleife zu erstellen.
Der Export von Modellen gestaltete sich komplexer. Jegliche Export-Formate wurden über ein Gui-Element in das Programm integriert. So musste das Gui-Element verändert werden um Zugriff auf die Export-Funktionalität zu gewinnen. Eine neue Methode wurde definiert die aus der Scripting-Umgebung aufgerufen werden kann. Die abgeänderten Dateien (/makehuman/plugins/7_scripting.py, /makehuman/apps/gui/guiexport.py) können Sie sich gerne hier herrunterladen.

Das Script sieht dann wie folgt aus:

import random
from core import G
app = G.app
human = app.selectedHuman

skins = ['default.mhmat','middleage_caucasian_female/middleage_caucasian_female.mhmat','old_caucasian_female/old_caucasian_female.mhmat','young_asian_male/young_asian_male.mhmat','middleage_caucasian_male/middleage_caucasian_male.mhmat','old_caucasian_male/old_caucasian_male.mhmat','Harvey_DevilhornsfemaleV1.mhmat','young_caucasian_female/young_caucasian_female.mhmat','Harveyg3g3.mhmat','Nipple_Skin.mhmat','skin_male_african_middleage.mhmat','middleage_african_female/middleage_african_female.mhmat','old_african_female/old_african_female.mhmat','summerglow.mhmat','young_caucasian_male/young_caucasian_male.mhmat','middleage_african_male/middleage_african_male.mhmat','old_african_male/old_african_male.mhmat','old_african_male/old_african_male.mhmat','middleage_asian_female/middleage_asian_female.mhmat','old_asian_female/old_asian_female.mhmat','young-caucasion-female-ehs01.mhmat','young_african_male/young_african_male.mhmat','young_lightskinned_female_diffuse2_tanlines_1.mhmat','middleage_asian_male/middleage_asian_male.mhmat','old_asian_male/old_asian_male.mhmat','young_asian_female/young_asian_female.mhmat']

for x in range(10):
    MHScript.randomize(human,1,True,True,True,True)
    MHScript.setMaterial('data/skins/'+skins[random.randint(0,len(skins)-1)])
    MHScript.exportmhx2('../../makehumanModels/model_'+str(x)+'.mhx2')

Die beiden Methoden exportmhx2() und randomize() wurden von mir hinzugefügt.

A 3D Morphable Model learnt from 10,000 faces

Lern-Datensätze

Die Erstellung eines neuronalen Netzes für die Generierung von 3d-Modellen von Gesichtern ist ambitioniert. Es ist bereits initial schwierig anzufangen da wenig Datensätze frei zur Verfügung stehen. Nach längerer Recherche habe ich einige Datensätze ausfindig machen können.

Name Samples Polygone
cyberware.com 100♀ 100♂ 106
www.micc.unifi.it/masi/research/ffd 53 ~105
3D-TEC (Twins Expression Challenge) 214
FRGC v2 ~2000
ND-Collection 27
MeIn3D 9967

MeIn3d

Besonders interessant ist hierbei der MeIn3D Datensatz welcher nach meinen Erkenntnissen das größte 3D-Modell Datenset für Gesichter darstellt. Es wurde 2012 von Londoner Science Museum mit Hilfe von Besuchern aufgenommen. Die Daten wurden zwei Instituten bereitgestellt zum einen dem Great Ormond Street Hospital und University College Hospital und dem Eastman Dental Hospital. Ich habe bereits versucht an den Datensatz heranzukommen aber bin bisher erfolglos geblieben.

Generierung von Lerndaten

A 3D Morphable Model learnt from 10,000 faces Eine interessante Arbeit[1] die auf den Mein3D Datensatz aufbaut, hat ein Modell erstellt um parametrierbare 3d-Modelle von Gesichtern zu erstellen. Es steht zu überprüfen ob die Generierung von Lerndaten für meine Master-Arbeit eine mögliche Alternative darstellt zu der Akquirierung von echten Datensätzen. Wichtig hierbei ist einerseits zu sehen in wieweit generierte Lerndaten die Wirklichkeit abbilden können. Zum Anderen ist es wichtig zu wissen wie viele Datensätze benötigt werden um gute Ergebnisse zu erzielen.

[1] A 3D Morphable Model learnt from 10,000 facesAllan Ponniah, David Dunaway, James Booth, Anastasios Roussos, Stefanos Zafeiriou