Anda juga dapat membaca versi yang diterjemahkan dari file ini dalam bahasa Cina 简体中文版.
Ini adalah model Repositori untuk Inception ResNet (V1) dalam Pytorch, pretrained di VGGFACE2 dan CASIA-WEBFACE.
Bobot model PyTorch diinisialisasi menggunakan parameter yang diangkut dari repo FACENET Tensorflow David Sandberg.
Juga termasuk dalam repo ini adalah implementasi Pytorch yang efisien dari MTCNN untuk deteksi wajah sebelum inferensi. Model -model ini juga pretrained. Sepengetahuan kami, ini adalah implementasi MTCNN tercepat yang tersedia.
Memasang:
# With pip:
pip install facenet-pytorch
# or clone this repo, removing the '-' to allow python imports:
git clone https://github.com/timesler/facenet-pytorch.git facenet_pytorch
# or use a docker container (see https://github.com/timesler/docker-jupyter-dl-gpu):
docker run -it --rm timesler/jupyter-dl-gpu pip install facenet-pytorch && ipythonDalam Python, Model Impor Facenet-Pytorch dan Instantiate:
from facenet_pytorch import MTCNN , InceptionResnetV1
# If required, create a face detection pipeline using MTCNN:
mtcnn = MTCNN ( image_size = < image_size > , margin = < margin > )
# Create an inception resnet (in eval mode):
resnet = InceptionResnetV1 ( pretrained = 'vggface2' ). eval ()Memproses gambar:
from PIL import Image
img = Image . open ( < image path > )
# Get cropped and prewhitened image tensor
img_cropped = mtcnn ( img , save_path = < optional save path > )
# Calculate embedding (unsqueeze to add batch dimension)
img_embedding = resnet ( img_cropped . unsqueeze ( 0 ))
# Or, if using for VGGFace2 classification
resnet . classify = True
img_probs = resnet ( img_cropped . unsqueeze ( 0 )) Lihat help(MTCNN) dan help(InceptionResnetV1) untuk detail penggunaan dan implementasi.
Lihat: Model/Inception_resnet_v1.py
Model -model berikut telah diangkut ke Pytorch (dengan tautan untuk mengunduh Pytorch State_dict's):
| Nama model | Akurasi LFW (seperti yang tercantum di sini) | Dataset Pelatihan |
|---|---|---|
| 20180408-102900 (111MB) | 0.9905 | Casia-Webface |
| 20180402-114759 (107MB) | 0.9965 | Vggface2 |
Tidak perlu mengunduh secara manual state_dict pretrained; Mereka diunduh secara otomatis pada instantiasi model dan di -cache untuk digunakan di masa depan dalam cache obor. Untuk menggunakan model Inception ResNet (V1) untuk pengenalan/identifikasi wajah di Pytorch, gunakan:
from facenet_pytorch import InceptionResnetV1
# For a model pretrained on VGGFace2
model = InceptionResnetV1 ( pretrained = 'vggface2' ). eval ()
# For a model pretrained on CASIA-Webface
model = InceptionResnetV1 ( pretrained = 'casia-webface' ). eval ()
# For an untrained model with 100 classes
model = InceptionResnetV1 ( num_classes = 100 ). eval ()
# For an untrained 1001-class classifier
model = InceptionResnetV1 ( classify = True , num_classes = 1001 ). eval ()Kedua model pretrained dilatih pada gambar 160x160 px, jadi akan berkinerja terbaik jika diterapkan pada gambar yang diubah ukurannya pada bentuk ini. Untuk hasil terbaik, gambar juga harus dipotong ke wajah menggunakan MTCNN (lihat di bawah).
Secara default, model di atas akan mengembalikan embeddings gambar 512 dimensi. Untuk mengaktifkan klasifikasi sebagai gantinya, pass classify=True ke model konstruktor, atau Anda dapat mengatur atribut objek sesudahnya dengan model.classify = True . Untuk VGGFACE2, model pretrained akan mengeluarkan vektor logit dengan panjang 8631, dan untuk vektor logit Casia-Webface dengan panjang 10575.
Pengenalan wajah dapat dengan mudah diterapkan pada gambar mentah dengan terlebih dahulu mendeteksi wajah menggunakan MTCNN sebelum menghitung embedding atau probabilitas menggunakan model resnet awal. Kode contoh pada contoh/infer.ipynb memberikan contoh lengkap pipa yang menggunakan dataset, dataloader, dan pemrosesan GPU opsional.
MTCNN dapat digunakan untuk membangun sistem pelacakan wajah (menggunakan metode MTCNN.detect() ). Contoh pelacakan wajah penuh dapat ditemukan di contoh/face_tracking.ipynb.

Dalam sebagian besar situasi, cara terbaik untuk mengimplementasikan pengenalan wajah adalah dengan menggunakan model pretrained secara langsung, dengan algoritma pengelompokan atau metrik jarak sederhana untuk menentukan identitas wajah. Namun, jika diperlukan finetuning (yaitu, jika Anda ingin memilih identitas berdasarkan login output model), sebuah contoh dapat ditemukan pada contoh/finetune.ipynb.
Panduan ini menunjukkan fungsionalitas modul MTCNN. Topik yang dibahas adalah:
Lihat notebook di Kaggle.
Buku catatan ini menunjukkan penggunaan tiga paket deteksi wajah:
Setiap paket diuji untuk kecepatannya dalam mendeteksi wajah dalam satu set 300 gambar (semua frame dari satu video), dengan dukungan GPU diaktifkan. Kinerja didasarkan pada kernel notebook P100 Kaggle. Hasilnya dirangkum di bawah ini.
| Kemasan | FPS (1080x1920) | FPS (720x1280) | FPS (540x960) |
|---|---|---|---|
| FACENET-PYTORCH | 12.97 | 20.32 | 25.50 |
| facenet-pytorch (non-batched) | 9.75 | 14.81 | 19.68 |
| dlib | 3.80 | 8.39 | 14.53 |
| mtcnn | 3.04 | 5.70 | 8.23 |

Lihat notebook di Kaggle.
Algoritma ini menunjukkan cara mencapai deteksi wajah yang sangat efisien secara khusus dalam video, dengan memanfaatkan kesamaan antara bingkai yang berdekatan.
Lihat notebook di Kaggle.
Paket dan salah satu contoh notebook dapat dijalankan dengan Docker (atau Nvidia-Docker) menggunakan:
docker run --rm -p 8888:8888
-v ./facenet-pytorch:/home/jovyan timesler/jupyter-dl-gpu
-v < path to data > :/home/jovyan/data
pip install facenet-pytorch && jupyter lab Arahkan ke contoh/ direktori dan jalankan salah satu buku catatan Ipython.
Lihat Timesler/Jupyter-DL-GPU untuk detail wadah Docker.
Untuk menggunakan kode ini dalam repo git Anda sendiri, saya sarankan terlebih dahulu menambahkan repo ini sebagai submodule. Perhatikan bahwa dasbor ('-') dalam nama repo harus dihapus saat mengkloning sebagai submodule karena akan mematahkan ular python saat mengimpor:
git submodule add https://github.com/timesler/facenet-pytorch.git facenet_pytorch
Atau, kode dapat diinstal sebagai paket menggunakan PIP:
pip install facenet-pytorch
Lihat: Model/Utils/TensorFlow2PyTorch.py
Perhatikan bahwa fungsi ini tidak diperlukan untuk menggunakan model dalam repo ini, yang hanya bergantung pada pytorch state_dict yang disimpan.
Setelah instantiasi model Pytorch, masing -masing bobot lapisan dimuat dari lapisan yang setara dalam model tensorflow pretrain dari Davidsandberg/Facenet.
Kesetaraan output dari model TensorFlow asli dan model pytorch-ported telah diuji dan identik:
>>> compare_model_outputs(mdl, sess, torch.randn(5, 160, 160, 3).detach())
Passing test data through TF model
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 test data through PT model
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=<DivBackward0>)
Distance 1.2874517096861382e-06
Untuk menjalankan kembali konversi parameter TensorFlow menjadi model Pytorch, memastikan Anda mengkloning repo ini dengan submodul , karena repo Davidsandberg/Facenet disertakan sebagai submodule dan bagian-bagiannya diperlukan untuk konversi.
Repo FACENET David Sandberg: https://github.com/davidsandberg/facenet
F. Schroff, D. Kalenichenko, J. Philbin. Facenet: Embedding terpadu untuk pengenalan wajah dan pengelompokan , arxiv: 1503.03832, 2015. PDF
Q. Cao, L. Shen, W. Xie, Om Parkhi, A. Zisserman. VGGFACE2: Dataset untuk mengenali wajah di seluruh pose dan usia , Konferensi Internasional tentang Pengenalan Wajah dan Gerakan Otomatis, 2018. PDF
D. Yi, Z. Lei, S. Liao dan Sz Li. Casiawebface: Belajar representasi wajah dari awal , arxiv: 1411.7923, 2014. PDF
K. Zhang, Z. Zhang, Z. Li dan Y. Qiao. Deteksi dan penyelarasan wajah bersama menggunakan jaringan konvolusional bertingkat multitask , huruf pemrosesan sinyal IEEE, 2016. PDF