Genau wie TV! So echt! #wissenschaft Der zuverlässigste Weg, ein Gesicht zu messen
Ok, welche Messungen sollten wir von jedem Gesicht sammeln, um unsere bekannte Gesichtsdatenbank zu erstellen? Ohr größe? Nasenlänge? Augenfarbe? Etwas anderes?Es stellt sich heraus, dass die Messungen, die uns Menschen offensichtlich erscheinen (wie die Augenfarbe), für einen Computer, der einzelne Pixel in einem Bild betrachtet, nicht wirklich Sinn machen. Forscher haben herausgefunden, dass der genaueste Ansatz darin besteht, den Computer die Messungen ermitteln zu lassen, um sich selbst zu sammeln. Deep Learning kann besser als Menschen herausfinden, welche Teile eines Gesichts wichtig zu messen sind.
Die Lösung besteht darin, ein tiefes faltungsneurales Netzwerk zu trainieren (genau wie in Teil 3). Aber anstatt das Netzwerk so zu trainieren, dass es mehr Objekte erkennt, wie wir es beim letzten Mal getan haben, werden wir es trainieren, um 128 Messungen für jedes Gesicht zu generieren.
Der Trainingsprozess funktioniert, indem 3 Gesichtsbilder gleichzeitig betrachtet werden:
Laden Sie ein Trainingsgesichtsbild einer bekannten Person
Laden Sie ein anderes Bild derselben bekannten Person
Laden Sie ein Bild einer völlig anderen Person
Dann betrachtet der Algorithmus die Messungen, die er derzeit für jedes dieser drei Bilder generiert. Anschließend wird das neuronale Netzwerk leicht optimiert, sodass sichergestellt wird, dass die Messungen, die es für #1 und #2 generiert, etwas näher beieinander liegen, während sichergestellt wird, dass die Messungen für #2 und #3 etwas weiter voneinander entfernt sind:
Nachdem dieser Schritt millionenfach für Millionen von Bildern Tausender verschiedener Personen wiederholt wurde, lernt das neuronale Netzwerk, zuverlässig 128 Messungen für jede Person zu generieren. Zehn verschiedene Bilder derselben Person sollten ungefähr die gleichen Maße ergeben.
Maschinelles Lernen Menschen nennen die 128 Messungen jedes Gesichts eine Einbettung. Die Idee, komplizierte Rohdaten wie ein Bild in eine Liste computergenerierter Zahlen zu reduzieren, kommt beim maschinellen Lernen (insbesondere bei der Sprachübersetzung) häufig vor. Der genaue Ansatz für Gesichter, den wir verwenden, wurde 2015 von Google-Forschern erfunden, aber es gibt viele ähnliche Ansätze.
Codierung unseres Gesichtsbildes
Dieser Prozess des Trainings eines faltungsneuralen Netzwerks zur Ausgabe von Gesichtseinbettungen erfordert eine Menge Daten und Computerleistung. Selbst mit einer teuren NVidia Telsa-Grafikkarte sind etwa 24 Stunden kontinuierliches Training erforderlich, um eine gute Genauigkeit zu erzielen.
Aber sobald das Netzwerk trainiert wurde, kann es Messungen für jedes Gesicht generieren, auch für solche, die es noch nie zuvor gesehen hat! Dieser Schritt muss also nur einmal durchgeführt werden. Glücklicherweise haben die guten Leute von OpenFace dies bereits getan und mehrere trainierte Netzwerke veröffentlicht, die wir direkt nutzen können. Dank Brandon Amos und Team!Alles, was wir selbst tun müssen, ist, unsere Gesichtsbilder durch ihr vortrainiertes Netzwerk zu führen, um die 128 Messungen für jedes Gesicht zu erhalten. Hier sind die Messungen für unser Testbild:
Also, welche Teile des Gesichts messen diese 128 Zahlen genau? Es stellt sich heraus, dass wir keine Ahnung haben. Es spielt für uns keine Rolle. Alles, was uns interessiert, ist, dass das Netzwerk fast die gleichen Zahlen generiert, wenn zwei verschiedene Bilder derselben Person betrachtet werden.
Wenn Sie diesen Schritt selbst ausprobieren möchten, stellt OpenFace ein Lua-Skript zur Verfügung, das Einbettungen aller Bilder in einem Ordner generiert und in eine CSV-Datei schreibt. Sie führen es so.
Schritt 4: Den Namen der Person aus der Kodierung finden
Dieser letzte Schritt ist eigentlich der einfachste Schritt im gesamten Prozess. Alles, was wir tun müssen, ist die Person in unserer Datenbank bekannter Personen zu finden, die unserem Testbild am nächsten kommt.
Sie können dies tun, indem Sie einen beliebigen grundlegenden Klassifizierungsalgorithmus für maschinelles Lernen verwenden. Es sind keine ausgefallenen Deep-Learning-Tricks erforderlich. Wir verwenden einen einfachen linearen SVM-Klassifikator, aber viele Klassifizierungsalgorithmen könnten funktionieren.
Alles, was wir tun müssen, ist einen Klassifikator zu trainieren, der die Messungen von einem neuen Testbild aufnehmen kann und sagt, welche bekannte Person die nächste Übereinstimmung ist. Das Ausführen dieses Klassifikators dauert Millisekunden. Das Ergebnis des Klassifikators ist der Name der Person!
Also lasst uns unser System ausprobieren. Zuerst trainierte ich einen Klassifikator mit den Einbettungen von jeweils etwa 20 Bildern von Will Ferrell, Chad Smith und Jimmy Falon: