Der Artikel hier erwähnt eine intelligente Methode, um Triplets für ein konvolutionelles neuronales Netzwerk zu generieren (um Gesichtseinbettungen zu generieren). .
Für einen Minibatch mit n Bildern werden nur die halbharten Drillinge zum Lernen verwendet (Drillinge mit halbharten Negativen , die Negativbilder sind) nah genug am Ankerbild).
In unseren Experimenten nehmen wir die Trainingsdaten so auf, dass etwa 40 Gesichter werden pro Identität pro Minibatch ausgewählt. Zusätzlich, zufällig ausgewählte negative Gesichter werden zu jedem Minibatch hinzugefügt.
Was ich gemacht habe
Ich habe Labelled Faces im Wild-Datensatz für das Training verwendet (13233 Bilder, 5749 Personen, 1680 Personen mit zwei oder mehr Bildern ) und für jeden Batch einen Anker, einige positive (das heißt ich konnte nur 1680 Chargen verwenden, da ich mehr als ein Bild von einer Person benötige), und Negative - Bilder von anderen zufällig ausgewählten Personen.
Irgendwas stimmt nicht mit meinem Trainingssatz. Sollte ein Mini-Batch more -Anker enthalten?
Anstatt das härteste Positiv auszuwählen, verwenden wir alle Ankerpositiven pairs in einem Minibatch, während die harten Negative ausgewählt werden
Generieren Sie Triplets online. Dies kann durch Auswahl der Festplatte erfolgen positive / negative Exemplare aus einem Mini-Batch.
Um die halbharten Negative auszuwählen, muss ich die Einbettungen meiner Triplets berechnen. Also muss ich durch das Triplett-Neuron gehen und die Einbettungen vergleichen. Und dann muss ich die Verlustfunktion only mit den harten Triplets berechnen. Das ist, was ich denke muss ich tun.
Ich habe drei konvolutionelle neuronale Netzwerke mit shared parameters verwendet (vier Faltungslayer mit maximalem Pooling und einem vollständig verbundenen Layer). Ich habe Online-Triplet-Generation noch nicht verwendet, weil ich nicht verstehen kann, wie es gemacht wird. Es ergibt nicht mehr als 70% Genauigkeit.
Tags und Links neural-network machine-learning conv-neural-network