timesler / facenet-pytorch

                              Hier ist ein Repository für Inception Resnet (V1) -Objekte in Pytorch, das auf VGGFace2 und CASIA-Webface vorab trainiert wurde. Die Gewichte des Pytorch-Modells wurden unter Verwendung von Parametern initialisiert, die aus David Sandbergs Tensorflow Facenet Repo stammen. In diesem Repo ist auch eine effiziente Pytorch-Implementierung von MTCNN für die Gesichtserkennung vor Inferenz enthalten. Diese Objekte sind zusätzlich vorgelernt. Schnell aufmachen Beide installieren den Employ von Pip: pip install facenet-pytorch oder klonen Sie dieses Repo und setzen Sie das ‘-‘ weg, um Python-Importe zuzulassen: Git-Klon https://github.com/timesler/facenet-pytorch.git facenet_pytorch Importieren Sie in Python das Modul: aus facenet_pytorch importieren Sie MTCNN, InceptionResnetV1 Entwickeln Sie bei Bedarf eine Gesichtserkennungs-Pipeline für MTCNN: mtcnn=MTCNN (image_size=, margin=) Holen Sie sich ein Inception-Resnet (im Eval-Modus): resnet=InceptionResnetV1 (pretrained=’vggface2′). eval () Richtung eines Bildes: aus PIL importieren vertreten img=Represent.originate () # Lassen Sie den Bildtensor beschneiden und vorhellen img_cropped=mtcnn (img, save_path=) # Einbettung berechnen (nicht quetschen, um die Batch-Dimension hinzuzufügen) img_embedding=resnet (img_cropped.unsqueeze (0)) # Oder, wenn der Einsatz von für die VGGFace2-Klassifizierung resnet.classify=Sexy img_probs=resnet (img_cropped.unsqueeze (0)) Schauen Sie sich abet (MTCNN) und abet (InceptionResnetV1) für die Verwendung und Implementierung bekannter Aspekte an. Vorgeübte Objekte Gaze: objects / inception_resnet_v1.py Die folgenden Objekte wurden nach pytorch portiert (mit Links zum Akzeptieren von pytorch state_dict’s): Es gibt einfach keine Notwendigkeit, die vorgefertigten state_dict-Anweisungen immer manuell zu akzeptieren. Sie werden automatisch bei der Modellinstanziierung heruntergeladen und für die zukünftige Verwendung im Taschenlampen-Cache zwischengespeichert. Um ein Inception Resnet (V1) -Modell für die Gesichtserkennung / -identifikation in Pytorch zu verwenden, verwenden Sie: aus facenet_pytorch InceptionResnetV1 importieren # Für ein auf VGGFace2 trainiertes Modell model=InceptionResnetV1 (pretrained=’vggface2′). eval () # Für ein auf CASIA-Webface trainiertes Modell model=InceptionResnetV1 (pretrained=’casia-webface’). eval () # Für ein ungeschultes Modell model=InceptionResnetV1 (). eval () # Für einen nicht ausgebildeten 0881 – Klassensortierer model=InceptionResnetV1 (classify=Sexy, num_classes=0881). eval () Alle trainierten Objekte wurden auf 0139 x 0139 px-Fotografie, daher ist es am besten, wenn es auf die Fotografie angewendet wird, deren Größe auf diese Form angepasst wurde. Für feinste Ergebnisse kann das Fotografieren beim Einsatz von MTCNN (verstehe unter) zusätzlich sanft auf das Gesicht beschnitten werden. Standardmäßig werden die oben genannten Objekte Um die Klassifizierung als Änderung zuzulassen, geben Sie entweder classify=Sexy für den Modellkonstruktor ein, oder Sie platzieren das Artikelattribut anschließend mit model.classify=Sexy. Für VGGFace2 gibt das vortrainierte Modell Wahrscheinlichkeitsvektoren der Größe 8631 und für CASIA-Webface Wahrscheinlichkeitsvektoren der Größe 10575 aus. Vollständige Erkennungs- und Erkennungspipeline Die Gesichtserkennung kann sogar leicht auf die Rohfotografie angewendet werden, indem Gesichter, die mit MTCNN verwendet werden, zuerst erkannt werden, bevor die Einbettung oder die Möglichkeiten eines Inception Resnet-Modells berechnet werden. Der Instanzcode unter examples / infer.ipynb gibt einer Gesamtinstanzpipeline den Einsatz von Datasets, Datenladern und nicht obligatorischer GPU-Verarbeitung. Gesichtsüberwachung in Videostreams MTCNN ist möglicherweise sogar gealtert, um ein Gesichtsüberwachungs-Gadget zu erstellen (unter Verwendung der MTCNN.detect () -Methode). Unter examples / face_tracking.ipynb kann sogar auf eine Tubby-Gesichtsüberwachungsinstanz gestoßen werden. Verwenden Sie dieses Repo für Ihr eigenes Git-Projekt Um vorgefertigte MTCNN- und Inception Resnet V1-Objekte für Ihr Git-Repo zu verwenden, empfehle ich zunächst neben diesem Repo als Submodul. Belohnung, dass die Bindung (‘-‘) innerhalb des Reponamens entfernt werden muss, wenn als Submodul geklont wird, da dies beim Importieren Python ruinieren kann: Git-Submodul hinzufügen https://github.com/timesler/facenet-pytorch.git facenet_pytorch Alternativ kann der Code auch als ein Gerät eingegeben werden, das von pip verwendet wird: pip install facenet-pytorch Mode kann dann einfach mit dem nächsten instanziiert werden: aus facenet_pytorch importieren Sie MTCNN, InceptionResnetV1 mtcnn=MTCNN () resnet=InceptionResnetV1 (pretrained=’vggface2’). eval () Umstellung der Parameter von Tensorflow auf Pytorch Gaze: objects / utils / tensorflow2pytorch.py Belohnung, dass diese Funktionalität nicht länger gewünscht ist, um die Objekte in diesem Repo zu nutzen, die am effizientesten von den gespeicherten pytorch state_dict’s abhängen. Nach der Instantiierung des Pytorch-Modells wurden die Gewichte jeder Schicht aus identischen Schichten in die vorab trainierten Tensorflow-Objekte von Davidsandberg / Facenet geladen. Die Äquivalenz der Outputs der Tensorflow-Objekte und der Pytorch-portierten Objekte wurde untersucht und ist identisch:  compare_model_outputs (mdl, sess, torch.randn (5, 0142, 0142, 3) .detach ()) Passing werfen Sie einen Blick auf Dateien nach Diagramm des TF-Modells Tensor ([[-0.0142, 0.0615, 0.0057, …, 0.0497, 0.0375, -0.0838],         [-0.0139, 0.0611, 0.0054, …, 0.0472, 0.0343, -0.0850],         [-0.0238, 0.0619, 0.0124, …, 0.0598, 0.0334, -0.0852],         [-0.0089, 0.0548, 0.0032, …, 0.0506, 0.0337, -0.0881],         [-0.0173, 0.0630, -0.0042, …, 0.0487, 0.0295, -0.0791]]) Passing werfen Sie einen Blick auf Dateien von Diagramm des PT-Modells Tensor ([[-0.0142, 0.0615, 0.0057, …, 0.0497, 0.0375, -0.0838],         [-0.0139, 0.0611, 0.0054, …, 0.0472, 0.0343, -0.0850],         [-0.0238, 0.0619, 0.0124, …, 0.0598, 0.0334, -0.0852],         [-0.0089, 0.0548, 0.0032, …, 0.0506, 0.0337, -0.0881],         [-0.0173, 0.0630, -0.0042, …, 0.0487, 0.0295, -0.0791]],        grad_fn=) Abstand 1. (****************************************************************) Um die Umwandlung von Tensorflow-Parametern in das Pytorch-Modell neu zu binden, müssen Sie dieses Repo nur mit Submodulen klonen, da das Davidsandberg / Facenet-Repo als Submodul aufgenommen wird und für die Umwandlung eine Formulierung erforderlich ist. Verweise Das Facenet-Repo von David Sandberg: https://github.com/davidsandberg/facenet F. Schroff, D. Kalenichenko, J. Philbin. FaceNet: Eine einheitliche Einbettung für Gesichtserkennung und Clustering, arXiv: 2014. PDF Q. Cao, L. Shen, W. Xie, O. M. Parkhi, A. Zisserman. VGGFace2: Ein Datensatz zur Erkennung von Gesichtern über Haltung und Alter, Internationale Konferenz zur automatischen Gesichts- und Gestenerkennung 2015. PDF D. Yi, Z. Lei, S. Liao und S. Z. Li. CASIAWebface: Herausfinden der Gesichtsillustration von Grund auf neu, arXiv: 0487, 2014. PDF K. Zhang, Z. Zhang, Z. Li und Y. Qiao. Gemeinsame Gesichtserkennung und Ausrichtung Die Verwendung von Multitask-kaskadierten Faltungsnetzwerken (IEEE Note Processing Letters, . PDF   
Extra lesen

Euch gefällt was ihr seht? Nehmt euch doch einen kurzen Moment und unterstützt uns auf Patreon!
timesler / facenet-pytorch 1