Umsetzen der Gesichtserkennung mithilfe lokaler Deskriptoren (unbeaufsichtigtes Lernen)

Ich versuche, einen Gesichtserkennungsalgorithmus mit Python zu implementieren. Ich möchte in der Lage sein, ein Verzeichnis von Bildern zu empfangen und paarweise Entfernungen zwischen ihnen zu berechnen, wennKurze Entfernungen sollten hoffentlich den Bildern derselben Person entsprechen. Das ultimative Ziel besteht darin, Bilder zu gruppieren und einige grundlegende Aufgaben zur Gesichtsidentifikation auszuführen (unbeaufsichtigtes Lernen).

egen der unbeaufsichtigten Einstellung ist meine Herangehensweise an das Problem, ein @ zu berechne "Gesichtsunterschrift" (ein Vektor in R ^ d für ein int d) und dann eine Metrik herausfinden, in der zwei Gesichter, die zur selben Person gehören, tatsächlich einen kurzen Abstand voneinander haben.

Ich habe einen Gesichtserkennungsalgorithmus, der das Gesicht erkennt, das Bild beschneidet und eine grundlegende Vorverarbeitung durchführt, sodass die Bilder, die ich dem Algorithmus zuführe, grau und ausgeglichen sind (siehe unten).

Für den Teil "Gesichtssignatur" habe ich zwei Ansätze ausprobiert, über die ich in mehreren Publikationen gelesen habe:

Aufnahme des Histogramms des LBP (Local Binary Pattern) des gesamten (verarbeiteten) BildesCalculatingSIEBE Deskriptoren an 7 Gesichtspunkten (rechts vom Mund, links vom Mund usw.), die ich mit einer externen Anwendung pro Bild identifiziere. Die Signatur ist die Verkettung der Quadratwurzel der Deskriptoren (dies führt zu einer viel höheren Dimension, aber für den Moment ist die Leistung kein Problem).

Zum Vergleich von zwei Signaturen verwende ich die Funktion compareHist von OpenCV (sieheHie), probieren Sie verschiedene Entfernungsmetriken aus (Chi-Quadrat, Euklidisch usw.).

Ich weiß, dass Gesichtserkennung eine schwierige Aufgabe ist, geschweige denn ohne Training, deshalb erwarte ich keine großartigen Ergebnisse. Aber alles, was ich so weit komme, scheint völlig zufällig. Wenn ich zum Beispiel Entfernungen vom Bild ganz rechts zum Rest des Bildes berechne, sehe ich, dass sie 4 Bill Clintons (...!) Am ähnlichsten ist.

Ich habe in @ gelesDie tolle Präsentation, dass es beliebt ist, ein @ durchzuführ "metrisches Lernen" -Verfahren an einem Test-Set, das die Ergebnisse deutlich verbessern sollte. In der Präsentation und anderswo heißt es jedoch, dass "regelmäßige" Entfernungsmessungen auch gute Ergebnisse bringen sollten. Bevor ich das also ausprobiere, möchte ich verstehen, warum das, was ich tue, mir nichts bringt.

Fazit, meine Fragen, zu denen ich gerne Hilfe bekommen würde:

Eine Verbesserung, die ich dachte, wäre, LBP nur auf dem tatsächlichen Gesicht und nicht den Ecken und allem durchzuführen, das Geräusche zur Unterzeichnung einsetzen könnte. Wie kann ich die Teile ausblenden, die nicht das Gesicht sind, bevor ich den LBP berechne? Ich benutze OpenCV auch für diesen Teil.

Ich bin ziemlich neu im Bereich Computer Vision. Wie würde ich meinen Algorithmus "debuggen", um herauszufinden, wo etwas schief geht? Ist das möglich

Gibt es in der unbeaufsichtigten Umgebung einen anderen Ansatz (bei dem es sich nicht um lokale Deskriptoren und Rechenentfernungen handelt), der für die Clusterbildung von Gesichtern geeignet ist?

Ist sonst noch etwas im OpenCV-Modul, an das ich vielleicht nicht gedacht habe, dass es hilfreich sein könnte? Es scheint, als ob alle Algorithmen dort geübt werden müssen und in meinem Fall nicht nützlich sind - der Algorithmus muss an Bildern arbeiten, die völlig neu sind.

Danke im Voraus

Antworten auf die Frage(2)

Ihre Antwort auf die Frage