https://github.com/foamliu/InsightFace-v2
PyTorch implementation of Additive Angular Margin Loss for Deep Face Recognition.
https://github.com/foamliu/InsightFace-v2
face-recognition
Last synced: 8 months ago
JSON representation
PyTorch implementation of Additive Angular Margin Loss for Deep Face Recognition.
- Host: GitHub
- URL: https://github.com/foamliu/InsightFace-v2
- Owner: foamliu
- License: apache-2.0
- Created: 2019-01-31T03:46:09.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2022-12-17T04:14:54.000Z (almost 3 years ago)
- Last Synced: 2024-11-04T17:47:46.465Z (about 1 year ago)
- Topics: face-recognition
- Language: Python
- Homepage:
- Size: 7.93 MB
- Stars: 322
- Watchers: 14
- Forks: 77
- Open Issues: 11
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# InsightFace

PyTorch implementation of Additive Angular Margin Loss for Deep Face Recognition.
[paper](https://arxiv.org/pdf/1801.07698.pdf).
```
@article{deng2018arcface,
title={ArcFace: Additive Angular Margin Loss for Deep Face Recognition},
author={Deng, Jiankang and Guo, Jia and Niannan, Xue and Zafeiriou, Stefanos},
journal={arXiv:1801.07698},
year={2018}
}
```
## Dataset
Function|Dataset|
|---|---|
|Train|MS-Celeb-1M|
|Test-1|LFW|
|Test-2|MegaFace|
### Introduction
MS-Celeb-1M dataset for training, 3,804,846 faces over 85,164 identities.
## Dependencies
- Python 3.6.8
- PyTorch 1.3.0
## Usage
### Data wrangling
Extract images, scan them, to get bounding boxes and landmarks:
```bash
$ python extract.py
$ python pre_process.py
```
Image alignment:
1. Face detection(MTCNN).
2. Face alignment(similar transformation).
3. Central face selection.
4. Resize -> 112x112.
Original | Aligned & Resized | Original | Aligned & Resized |
|---|---|---|---|
|||||
|||||
|||||
|||||
|||||
### Train
```bash
$ python train.py
```
To visualize the training process:
```bash
$ tensorboard --logdir=runs
```
## Performance evaluation
### LFW
#### Introduction
Use Labeled Faces in the Wild (LFW) dataset for performance evaluation:
- 13233 faces
- 5749 identities
- 1680 identities with >=2 photo
#### Download
Download LFW database put it under data folder:
```bash
$ wget http://vis-www.cs.umass.edu/lfw/lfw-funneled.tgz
$ wget http://vis-www.cs.umass.edu/lfw/pairs.txt
$ wget http://vis-www.cs.umass.edu/lfw/people.txt
```
#### Start evaluation
```bash
$ python lfw_eval.py
```
#### Results
Backbones|LFW(%)|Inference speed(*)|
|---|---|---|
|SE-LResNet101E-IR|99.83%|46.63 ms|
|SE-LResNet50E-IR|99.75%|27.30 ms|
|SE-LResNet18E-IR|99.65%|17.53 ms|
Note(*): with 1 Nvidia Tesla P100.
#### theta j Distribution

#### Error analysis
See also [LFW Face Database Errata](http://vis-www.cs.umass.edu/lfw/index.html#errata)
##### False Positive
2 false positives:
1|2|1|2|
|---|---|---|---|
|||||
|||||
##### False Negative
8 false negative:
1|2|1|2|
|---|---|---|---|
|||||
|||||
|||||
|||||
|||||
|||||
|||||
|||||
### MegaFace
#### Introduction
MegaFace dataset includes 1,027,060 faces, 690,572 identities. [Link](http://megaface.cs.washington.edu/)
Challenge 1 is taken to test our model with 1 million distractors.

#### Download
1. Download MegaFace and FaceScrub Images
2. Download Linux DevKit from [MagaFace WebSite](http://megaface.cs.washington.edu/) then extract to megaface folder:
```bash
$ tar -vxf linux-devkit.tar.gz
```
#### Generate features
1. Crop MegaFace.
2. Generate features for FaceScrub and MegaFace.
3. Remove noises.
Note: we used the noises list proposed by InsightFace, at https://github.com/deepinsight/insightface.
```bash
$ python3 megaface.py --action crop_megaface
$ find megaface/facescrub_images -name "*.bin" -type f -delete
$ find megaface/MegaFace_aligned/FlickrFinal2 -name "*.bin" -type f -delete
$ python3 megaface.py --action gen_features
```
#### Evaluation
Start MegaFace evaluation through devkit:
```bash
$ cd megaface/devkit/experiments
$ python run_experiment.py -p /dev/code/mnt/InsightFace-v2/megaface/devkit/templatelists/facescrub_uncropped_features_list.json /dev/code/mnt/InsightFace-v2/megaface/MegaFace_aligned/FlickrFinal2 /dev/code/mnt/InsightFace-v2/megaface/facescrub_images _0.bin results -s 1000000
```
#### Results
##### Curves
Draw curves with matlab script @ megaface/draw_curve.m.
CMC|ROC|
|---|---|
|||
|||
##### Textual results
Done matching! Score matrix size: 3379 972313
Saving to results/otherFiles/facescrub_megaface_0_1000000_1.bin
Computing test results with 1000000 images for set 1
Loaded 3379 probes spanning 80 classes
Loading from results/otherFiles/facescrub_facescrub_0.bin
Probe score matrix size: 3379 3379
distractor score matrix size: 3379 972313
Done loading. Time to compute some stats!
Finding top distractors!
Done sorting distractor scores
Making gallery!
Done Making Gallery!
Allocating ranks (972393)
Rank 1: 0.964733