FaceNet - Gesichtserkennungs von Google - wie wird neues Bild erkannt?

Alles, was nicht direkt mit Python-Problemen zu tun hat. Dies ist auch der perfekte Platz für Jobangebote.
Antworten
Zoja
User
Beiträge: 145
Registriert: Freitag 28. Februar 2014, 14:04

Hallo nochmal,

ich rescherschiere gerade zum Thema Gesichtserkennung und beschäftige mich mit dem Algorithmus von Google.

Dieser benutzt wie DeepFace auch ein neural network zum Trainieren. Trainiert wird aber direkt auf den eigebundenen Bildern. Um zu unterscheiden welche Bilder die selbe Person darstellen und welche nicht, werden triplets generiert aus dem eingebundem Bild, einem zweiten Bild, welches die selbe Person zeigt und ein Bild mit einer fremden Person. Die triplets werden mit Hilfe von Data Mining ausgesucht und generiert.

Im Endresultat haben wir dann die Bilder als Punkte in einem euklidischen Raum. Jede Person hat ein Anchor-Punkt (Bild) und es gibt einen Radius ausgehend von diesem Anchor. Alle Punkte (Bilder) innerhalb dieses Radius gehören zur selben Person und alle außerhalb zu einer fremden. D.h. Gesichtserkennung wird hier an Hand der Distanz durchgeführt. Die Länge des Radius ist dann der threshold.

BSP. aus der https://arxiv.org/pdf/1503.03832v3.pdf - PDF. Hier werden alle Bilder richrig erkannt wenn der threshold bei 1.1 liegt:

Bild

Frage:

Ich verstehe nicht wie der Algorithmus nun mit einem neuen Bild umgeht. Bei DeepFace müsste ein neues Bild die ganze Prozedur durchgehen, wie alle Bilder im Datensatz um den F7 Vektor zu generieren. In diesem Vektor sind Merkmale zu jedem Gesicht gespeichert und dann wird dieser F7 Vektor mit anderen Vektoren aus dem Datensatz verglichen.

Aber wie geht das hier? Werden mit dem neuen Bild nun auch triplets gebildet, bis dieses neue Bild irgendwo im euklidischen Raum angesiedelt werden kann? Aber es gibt bei einem neuen Bild kein 2tes Bild dieser Person.

Ich weiß, dass es nicht ganz in Python Forum passt, aber vielleicht hat jemand Ahnung. Ich weiß sonst nicht an wen ich mich wenden soll. In google groups hat leider keiner geantwortet und ich habe bis jetzt noch kein weiteren Inhalt dazu gefunden, der mir weiterhilft.

Danke!
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Die Antwort ist ganz simpel: gar nicht. Soweit ich dass verstehe brauchst du einfach einige Bilder pro Gesicht damit dass ganze funktioniert. In 3.2 zu Triplet Selection steht auch:
In our experiments we sample the training data such that around 40 faces are selected per identity per mini- batch.
Das macht denke ich auch Sinn. Allein von einem einzigen Porträt das Gesicht einer Person auf anderen Bildern zu erkennen, scheint mir doch eher schwierig bis unmöglich zu sein.
BlackJack

@DasIch: Das funktioniert doch aber seit Jahrzehnten in jeder Fernsehserie! ;-)
Zoja
User
Beiträge: 145
Registriert: Freitag 28. Februar 2014, 14:04

DasIch hat geschrieben:Die Antwort ist ganz simpel: gar nicht. Soweit ich dass verstehe brauchst du einfach einige Bilder pro Gesicht damit dass ganze funktioniert. In 3.2 zu Triplet Selection steht auch:
In our experiments we sample the training data such that around 40 faces are selected per identity per mini- batch.
Das macht denke ich auch Sinn. Allein von einem einzigen Porträt das Gesicht einer Person auf anderen Bildern zu erkennen, scheint mir doch eher schwierig bis unmöglich zu sein.
Ja ich habs irgendwie überlesen, vielleicht mache ich die threads zu früh auf immer.

Dann habe ich doch alles richtig verstanden.

Vielen Dank, dass du dich damit wieder befasst hast!
Ich hoffe ich bin auch irgendwann mal so weit, dass ich hier Leuten helfen kann!
Antworten