In der Vergangenheit umfasste die Gesichtserkennung hauptsächlich Technologien und Systeme wie Gesichtsbilderfassung, Gesichtserkennungsvorverarbeitung, Identitätsbestätigung und Identitätssuche. Mittlerweile hat sich die Gesichtserkennung langsam auf die Fahrererkennung, die Fußgängerverfolgung und sogar die dynamische Objektverfolgung in ADAS ausgeweitet.
Daraus ist ersichtlich, dass sich das Gesichtserkennungssystem von der einfachen Bildverarbeitung zur Echtzeit-Videoverarbeitung entwickelt hat. Darüber hinaus hat sich der Algorithmus von traditionellen statistischen Methoden wie Adaboots und PCA zu Deep-Learning-Methoden wie CNN und RCNN und deren Modifikationen gewandelt. Mittlerweile hat eine beträchtliche Anzahl von Menschen damit begonnen, sich mit der 3D-Gesichtserkennung zu beschäftigen, und diese Art von Projekt wird derzeit von Wissenschaft, Industrie und dem Land unterstützt.
Werfen wir zunächst einen Blick auf den aktuellen Forschungsstand. Wie aus den oben genannten Entwicklungstrends hervorgeht, besteht die aktuelle Hauptforschungsrichtung darin, Deep-Learning-Methoden zur Lösung der Video-Gesichtserkennung einzusetzen.
Wie folgt: Professor Shan Shiguang vom Institut für Computertechnologie der Chinesischen Akademie der Wissenschaften, Professor Li Ziqing vom Institut für Biometrie der Chinesischen Akademie der Wissenschaften, Professor Su Guangda von der Tsinghua-Universität, Professor Tang Xiaoou von die Chinesische Universität Hongkong, Ross B. Girshick usw.
SeetaFace Gesichtserkennungs-Engine. Die Engine wurde von der Gesichtserkennungs-Forschungsgruppe unter der Leitung des Forschers Shan Shiguang vom Institut für Computertechnologie der Chinesischen Akademie der Wissenschaften entwickelt. Der Code ist auf Basis von C++ implementiert und ist nicht auf Bibliotheksfunktionen Dritter angewiesen. Die Open-Source-Lizenz ist BSD-2 und kann von Wissenschaft und Industrie kostenlos genutzt werden.
Zu den derzeit veröffentlichten besseren Gesichtsbildbibliotheken gehören LFW (Labeled Faces in the Wild) und YFW (Youtube Faces in the Wild). Der aktuelle experimentelle Datensatz stammt im Wesentlichen aus LFW, und die Genauigkeit der aktuellen Bildgesichtserkennung hat im Grunde 99 % erreicht. Die vorhandene Bilddatenbank ist erschöpft. Das Folgende ist eine Zusammenfassung der vorhandenen Gesichtsbilddatenbank:
Heutzutage gibt es in China immer mehr Unternehmen, die Gesichtserkennung durchführen, und auch die Anwendungen sind sehr breit gefächert. Unter ihnen hat Hanwang Technology den höchsten Marktanteil. Die Forschungsrichtungen und der aktuelle Status der wichtigsten Unternehmen sind wie folgt:
Die Gesichtserkennung ist hauptsächlich in vier Teile unterteilt: Gesichtserkennung, Gesichtsausrichtung, Gesichtsüberprüfung und Gesichtserkennung.
Erkennen Sie das Gesicht im Bild und rahmen Sie das Ergebnis mit einem rechteckigen Rahmen ein. In openCV gibt es einen Harr-Klassifikator, der direkt verwendet werden kann.
Korrigieren Sie die Haltung des erkannten Gesichts, um das Gesicht so „positiv“ wie möglich zu machen. Zu den Korrekturmethoden gehören die 2D-Korrektur und die 3D-Korrektur. Die 3D-Korrekturmethode kann eine bessere Erkennung von Seitenflächen ermöglichen.
Bei der Gesichtskorrektur gibt es einen Schritt zur Erkennung der Position von Merkmalspunkten. Diese Merkmalspunktpositionen sind hauptsächlich die linke Seite der Nase, die Unterseite der Nasenlöcher, die Pupillenposition und die Unterseite der Oberlippe usw. Sobald Sie diese Funktionen kennen, führen Sie nach dem Klicken auf die Position eine positionsgesteuerte Verformung durch, und die Fläche wird „korrigiert“. Wie im Bild unten gezeigt:
Hier ist eine Technologie, die 2014 von MSRA eingeführt wurde: Joint Cascade Face Detection and Alignment (ECCV14). Dieser Artikel führt sowohl die Erkennung als auch die Ausrichtung direkt in 30 ms durch.
Gesichtsüberprüfung: Die Gesichtsüberprüfung basiert auf dem Paarvergleich, sodass die Antwort „Ja“ oder „Nein“ lautet. Bei der spezifischen Operation wird ein Testbild bereitgestellt und dann wird nacheinander ein Paarabgleich durchgeführt. Wenn der Abgleich erfolgreich ist, bedeutet dies, dass das Testbild und das abgeglichene Gesicht die Gesichter derselben Person sind.
Diese Methode wird (sollte) im Allgemeinen in Punch-In-Systemen zum Scannen von Gesichtern in kleinen Büros verwendet. Die spezifische Vorgehensweise ist ungefähr der folgende Prozess: Geben Sie die Gesichtsfotos der Mitarbeiter einzeln offline ein (ein Mitarbeiter gibt im Allgemeinen mehr als ein Gesicht ein). ) Nachdem die Kamera das Bild erfasst hat, wenn der Mitarbeiter zum Einchecken über sein Gesicht wischt, führt er zunächst eine Gesichtserkennung durch, führt dann eine Gesichtskorrektur durch und führt dann wie oben erwähnt eine Gesichtsüberprüfung durch. Dies bedeutet, dass die Person, deren Gesicht gescannt wird, zu diesem Büro gehört und die Gesichtsüberprüfung in diesem Schritt abgeschlossen ist.
Bei der Offline-Eingabe von Mitarbeitergesichtern können wir das Gesicht mit dem Namen der Person abgleichen, sodass wir nach erfolgreicher Gesichtsüberprüfung wissen, wer die Person ist.
Der Vorteil des oben genannten Systems besteht darin, dass es geringe Entwicklungskosten verursacht und für kleine Büros geeignet ist. Der Nachteil besteht darin, dass es während der Aufnahme nicht blockiert werden kann und außerdem eine relativ gerade Gesichtshaltung erfordert (wir besitzen dieses System). , habe es aber noch nie erlebt). Die folgende Abbildung gibt eine schematische Erklärung:
Gesichtsidentifikation oder Gesichtserkennung, Gesichtserkennung ist wie in der Abbildung unten dargestellt, sie möchte im Vergleich zu „Wer bin ich?“ antworten Da der Paarvergleich bei der Gesichtsüberprüfung verwendet wird, werden in der Erkennungsphase weitere Klassifizierungsmethoden verwendet. Es klassifiziert tatsächlich Bilder (Gesichter), nachdem die beiden vorherigen Schritte ausgeführt wurden, nämlich Gesichtserkennung und Gesichtskorrektur.
Anhand der Einführung der oben genannten vier Konzepte können wir verstehen, dass die Gesichtserkennung hauptsächlich drei große, unabhängige Module umfasst:
Wir werden die obigen Schritte im Detail aufteilen und das folgende Prozessdiagramm erhalten:
Mit der Entwicklung der Gesichtserkennungstechnologie wird die Gesichtserkennungstechnologie nun hauptsächlich in drei Kategorien unterteilt: eine ist die bildbasierte Erkennungsmethode und die andere ist die videobasierte Erkennung. Die dritte Methode ist die drei -dimensionale Gesichtserkennungsmethode.
Bei diesem Verfahren handelt es sich um ein statisches Bilderkennungsverfahren, bei dem hauptsächlich Bildverarbeitung zum Einsatz kommt. Zu den Hauptalgorithmen gehören PCA, EP, Kernel-Methode, Bayesian Framwork, SVM, HMM, Adaboot und andere Algorithmen. Aber im Jahr 2014 erzielte die Gesichtserkennung mit der Deep-Learning-Technologie einen großen Durchbruch, der durch 97,25 % von Deep Face und 97,27 % von Face ++ repräsentiert wurde. Gleichzeitig beträgt der Trainingssatz von Deep Face 4 Millionen Sätze Chinesische Universität Hongkong Der Gesichtstrainingssatz ist 2w.
Dieser Prozess ist im Tracking-Prozess der Gesichtserkennung zu sehen, bei dem nicht nur die Position und Größe des Gesichts im Video ermittelt, sondern auch die Übereinstimmung zwischen diesen ermittelt werden muss unterschiedliche Gesichter zwischen den Bildern.
Referenzpapiere (Daten):
1. DeepFace: Die Lücke zur Leistung auf menschlicher Ebene bei der Gesichtsverifizierung schließen
2. http://blog.csdn.net/zouxy09/article/details/8781543
3. Ableitungsblog des Faltungs-Neuronalen Netzwerks. http://blog.csdn.net/zouxy09/article/details/9993371/
4. Hinweis zum Faltungs-Neuronalen Netzwerk
5. DeepFace-Blogbeitrag: / blog.csdn.net/Hao_Zhang_Vision/article/details/52831399?locationNum=2&fps=1
DeepFace wurde von FaceBook vorgeschlagen, und DeepID und FaceNet erschienen später. Darüber hinaus ist DeepFace in DeepID und FaceNet zu sehen, sodass man sagen kann, dass DeepFace die Grundlage von CNN bei der Gesichtserkennung ist. Derzeit hat Deep Learning auch bei der Gesichtserkennung sehr gute Ergebnisse erzielt. Hier beginnen wir also mit DeepFace.
Im Lernprozess von DeepFace werden wir nicht nur die von DeepFace verwendeten Methoden vorstellen, sondern auch andere Hauptalgorithmen vorstellen, die derzeit in diesem Schritt verwendet werden, und eine einfache und umfassende Beschreibung der vorhandenen Bildgesichtserkennungstechnologie geben.
Grundgerüst von DeepFace
2.1 Vorhandene Technologie:
Die Gesichtserkennung (Erkennung) verfügt bereits über einen Haarklassifikator, der direkt in opencv verwendet werden kann und auf dem Viola-Jones-Algorithmus basiert.
Adaboost-Algorithmus (Kaskadenklassifikator):
1. Referenzpapier: Robuste Echtzeit-Gesichtserkennung.
2. Referenz-Chinesischer Blog: http://blog.csdn.net/cyh_24/article/details/39755661
3. Blog: http://blog.sina.com.cn/s/blog_7769660f01019ep0.html
2.2 Im Artikel verwendete Methode
Dieser Artikel verwendet die Gesichtserkennungsmethode basierend auf Erkennungspunkten (Fiducial Point Detector).
Der Effekt ist wie folgt:
2D-Ausrichtung:
3D-Ausrichtung:
4 Gesichtsüberprüfung (Gesichtsüberprüfung)
4.1 Vorhandene Technologie LBP && Joint Bayesian: Kombiniert die beiden Methoden des hochdimensionalen LBP und des Joint Bayesian.Artikel: Deep Learning Face Representation by Joint Identification-Verification
4.2 Methode im Artikel
In dem Artikel wird ein tiefes neuronales Netzwerk (DNN) durch eine Gesichtserkennungsaufgabe mit mehreren Klassen trainiert. Die Netzwerkstruktur ist in der Abbildung oben dargestellt.
Strukturparameter:
Nach der 3D-Ausrichtung sind die erzeugten Bilder alle 152×152 Bilder, die in die obige Netzwerkstruktur eingegeben werden. Die Parameter dieser Struktur sind wie folgt:max-pooling: 3×3, Schritt = 2
Eine solche Abfrageschicht führt jedoch dazu, dass das Netzwerk einige Informationen über die detaillierte Struktur des Gesichts und die genaue Position winziger Texturen verliert. Daher fügt das Papier die Max-Polling-Schicht erst nach der ersten Faltungsschicht hinzu. Diese vorherigen Schichten werden als adaptive Front-End-Vorverarbeitungsebenen bezeichnet. Für viele Berechnungen, in denen dies erforderlich ist, verfügen diese Schichten jedoch nur über sehr wenige Parameter. Sie erweitern einfach das Eingabebild in einen einfachen lokalen Funktionssatz.
Die Verwendung lokaler Verbindungsschichten hat keinen Einfluss auf den Rechenaufwand bei der Merkmalsextraktion, wirkt sich jedoch auf die Anzahl der Trainingsparameter aus. Allein weil es eine so große Bibliothek beschrifteter Gesichter gibt, können wir uns drei große lokal verbundene Schichten leisten. Die Ausgabeeinheit der lokalen Verbindungsschicht ist von einem großen Eingabepatch betroffen, und die Verwendung (Parameter) der lokalen Verbindungsschicht kann entsprechend angepasst werden (es werden keine Gewichte geteilt)
Zum Beispiel ist die Ausgabe der L6-Schicht betroffen durch einen 74*74*3-Effekt des Eingabe-Patches. In der korrigierten Fläche ist es schwierig, statistische Parameter gemeinsam zwischen so großen Patches zu haben.
Schließlich sind die beiden obersten Schichten des Netzwerks (F7, F8) vollständig verbunden: Jede Ausgabeeinheit ist mit allen Eingängen verbunden. Diese beiden Ebenen können die Korrelation zwischen Merkmalen in entfernten Regionen im Gesichtsbild erfassen. Aus diesen beiden Schichten kann beispielsweise die Korrelation zwischen der Position und Form der Augen und der Position und Form des Mundes (dieser Teil enthält auch Informationen) ermittelt werden. Die Ausgabe der ersten vollständig verbundenen Schicht F7 ist unser ursprünglicher Gesichtsausdrucksvektor.
In Bezug auf den Merkmalsausdruck unterscheidet sich dieser Merkmalsvektor stark von der herkömmlichen LBP-basierten Merkmalsbeschreibung. Herkömmliche Methoden verwenden normalerweise lokale Merkmalsbeschreibungen (Berechnungshistogramme) und dienen als Eingabe für den Klassifikator.
Die Ausgabe der letzten vollständig verbundenen Schicht F8 wird in einen K-Weg-Softmax eingegeben (K ist die Anzahl der Kategorien), der eine Wahrscheinlichkeitsverteilung der Kategoriebezeichnungen generiert. Lassen Sie Ok die k-te Ausgabe eines Eingabebildes nach dem Durchlaufen des Netzwerks darstellen, dh die Wahrscheinlichkeit der Ausgabeklassenbezeichnung k kann durch die folgende Formel ausgedrückt werden:
Das Ziel des Trainings besteht darin, das zu maximieren Wahrscheinlichkeit der richtigen Ausgabekategorie (die ID des Gesichts). Dies wird erreicht, indem der Kreuzentropieverlust für jede Trainingsprobe minimiert wird. Lassen Sie k die Bezeichnung der richtigen Kategorie der gegebenen Eingabe darstellen, dann ist der Kreuzentropieverlust:
Der Kreuzentropieverlust wird minimiert, indem der Gradient des Kreuzentropieverlusts L für die Parameter berechnet und verwendet wird die Methode der stochastischen Gradientenabnahme.
Der Gradient wird durch standardmäßige Fehlerausbreitung berechnet. Interessanterweise sind die von diesem Netzwerk bereitgestellten Funktionen sehr spärlich. Mehr als 75 % der Feature-Elemente der obersten Ebene sind 0. Dies ist hauptsächlich auf die Verwendung der ReLU-Aktivierungsfunktion zurückzuführen. Diese nichtlineare Soft-Threshold-Funktion wird in allen Faltungsschichten, lokal verbundenen Schichten und vollständig verbundenen Schichten (mit Ausnahme der letzten Schicht F8) verwendet, was nach der gesamten Kaskade zu stark nichtlinearen und spärlichen Merkmalen führt.
Sparsity hängt auch mit der Verwendung der Dropout-Regularisierung zusammen, die während des Trainings zufällige Feature-Elemente auf 0 setzt. Wir haben Dropout nur in der vollständig verbundenen F7-Schicht verwendet. Aufgrund des großen Trainingssatzes konnten wir während des Trainingsprozesses keine signifikante Überanpassung feststellen.
Angesichts des Bildes I wird sein Merkmalsausdruck G(I) über das Feedforward-Netzwerk jeder L-Schicht berechnet und kann als eine Reihe von Funktionen betrachtet werden:
Auf der letzten Ebene , normalisieren wir die Elemente der Funktion auf 0 bis 1, um die Empfindlichkeit der Funktion gegenüber Beleuchtungsänderungen zu verringern. Jedes Element im Merkmalsvektor wird durch den entsprechenden Maximalwert im Trainingssatz dividiert. Führen Sie dann die L2-Normalisierung durch. Da wir die ReLU-Aktivierungsfunktion verwenden, ist unser System weniger invariant gegenüber dem Maßstab des Bildes.
Für den Ausgabevektor 4096-d:
Die Berechnungsformel für den Chi-Quadrat-Abstand lautet wie folgt:
3. Experimentelle Auswertung
3.1 Datensatz
Ergebnis auf LFW:
Ergebnis auf YTF:
DeepFace mit den folgenden Methoden am größten. Der Unterschied besteht darin, dass DeepFace verwendet eine Ausrichtungsmethode vor dem Training des neuronalen Netzwerks. Der Artikel geht davon aus, dass der Grund, warum neuronale Netze funktionieren können, darin besteht, dass die Merkmale des Gesichtsbereichs nach der Ausrichtung auf bestimmte Pixel fixiert werden. Zu diesem Zeitpunkt kann das Faltungs-Neuronale Netz zum Erlernen der Merkmale verwendet werden.
Das Modell in diesem Artikel verwendet die neueste Gesichtserkennungsmethode basierend auf Deep Learning in der C++-Toolbox dlib. Basierend auf dem Benchmark-Level der Outdoor-Gesichtsdatentestbibliothek Labeled Faces in the Wild erreicht es eine Genauigkeit von 99,38 %.
Weitere Algorithmen
http://www.gycc.com/trends/face%20recognition/overview/
dlib: http://dlib.net/Datentestbibliothek Labeled Faces in the Wild : http://vis-www.cs.umass.edu/lfw/
Das Modell bietet ein einfaches Befehlszeilentool zur Gesichtserkennung, mit dem Benutzer Bildordner direkt für Gesichtserkennungsvorgänge über Befehle verwenden können.
Erfassen Sie alle Gesichter in einem Bild.
Finden und verarbeiten Sie die Gesichtszüge in Bildern.
Finden Sie die Position und den Umriss der Augen, der Nase, des Mundes und des Kinns jeder Person.
import face_recognition
image = face_recognition.load_image_file("your_file.jpg")
face_locations = face_recognition.face_locations(image)
Das Erfassen von Gesichtszügen hat einen sehr wichtigen Zweck und kann natürlich auch für digitale Schönheit verwendet werden von Bildern Gesicht digitales Make-up (wie Meitu Xiuxiu)
digitales Make-up: https://github.com/ageitgey/face_recognition/blob/master/examples/digital_makeup.py
Identifizieren Wer erscheint auf dem Foto
Diese Methode unterstützt Python3/Python2. Wir haben es nur unter macOS und Linux getestet. Wir wissen nicht, ob es auf Windows anwendbar ist.
Installieren Sie dieses Modul mit pip3 von pypi (oder pip2 von Python 2)
Wichtiger Hinweis: Beim Kompilieren der dlib können Probleme auftreten. Sie können den Fehler beheben, indem Sie die dlib aus dem Quellcode (nicht pip) installieren, siehe Installationshandbuch dlib von der Quelle installieren
https://gist.github.com/ageitgey/629d75c1baac34dfa5ca2a1928a7aeaf
Schließen Sie die Installation ab, indem Sie dlib manuell installieren und pip3 install face_recognition ausführen.
Wenn Sie face_recognition installieren, erhalten Sie ein einfaches Befehlszeilenprogramm namens face_recognition, mit dem Sie ein Foto oder alle Gesichter in einem Fotoordner erkennen können.
Zuerst müssen Sie einen Ordner mit einem Foto bereitstellen, und Sie wissen bereits, wer die Person auf dem Foto ist, und der Dateiname muss nach dieser Person benannt sein.
Dann Sie Sie müssen einen weiteren Ordner mit den Fotos vorbereiten, die Sie erkennen möchten.
Als nächstes müssen Sie nur den Befehl „face_recognition“ ausführen, und das Programm kann die Person in den unbekannten Gesichtsfotos identifizieren
Für jedes Gesicht ist eine Ausgabezeile erforderlich. Die Daten bestehen aus dem Dateinamen und dem Namen der erkannten Person, getrennt durch Kommas.
Wenn Sie nur den Namen jeder Person auf dem Foto ohne den Dateinamen wissen möchten, können Sie Folgendes tun:
Sie können den Gesichtserkennungsvorgang abschließen, indem Sie die face_recognition:
API einführen Dokumentation: https://face-recognition.readthedocs.io.
Bitte beachten Sie dieses Beispiel: https://github.com/ageitgey/face_recognition/blob/master/examples/ find_faces_in_picture. py
Bitte beziehen Sie sich auf dieses Beispiel: https://github.com/ageitgey/face_recognition/blob/master/examples/recognize_faces_in_pictures.py# 🎜🎜#
Python-Code-FallAlle Beispiele finden Sie hier.https://github.com/ageitgey/face_recognition/ tree/master/ Beispiele
·Gesichter auf einem Foto findenhttps://github.com/ageitgey/face_recognition/blob/master/examples/find_faces_in_picture.py · 识别照片中的面部特征Identify specific facial features in a photograph https://github.com/ageitgey/face_recognition/blob/master/examples/find_facial_features_in_picture.py · 使用数字美颜Apply (horribly ugly) digital make-up https://github.com/ageitgey/face_recognition/blob/master/examples/digital_makeup.py ·基于已知人名找到并识别出照片中的未知人脸Find and recognize unknown faces in a photograph based on photographs of known people https://github.com/ageitgey/face_recognition/blob/master/examples/recognize_faces_in_pictures.pypython人脸
Das obige ist der detaillierte Inhalt vonPython-Gesichtserkennungssystem mit einer Offline-Erkennungsrate von bis zu 99 %, Open Source~. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!