Light CNN for Deep Face Recognition, in PyTorch
A PyTorch implementation of A Light CNN for Deep Face Representation with Noisy Labels from the paper by Xiang Wu, Ran He, Zhenan Sun and Tieniu Tan. The official and original Caffe code can be found here.
Table of Contents
Updates
- Feb 9, 2022
- Light CNN v4 pretrained model is released.
- Jan 17, 2018
- Light CNN-29 v2 model and training code are released. The
100% - EER
on LFW achieves 99.43%. - The performance of set 1 on MegaFace achieves 76.021% for rank-1 accuracy and 89.740% for TPR@FAR=10^-6.
- Light CNN-29 v2 model and training code are released. The
- Sep 12, 2017
- Light CNN-29 model and training code are released. The
100% - EER
on LFW achieves 99.40%. - The performance of set 1 on MegaFace achieves 72.704% for rank-1 accuracy and 85.891% for TPR@FAR=10^-6.
- Light CNN-29 model and training code are released. The
- Jul 12, 2017
- Light CNN-9 model and training code are released. The
100% - EER
on LFW obtains 98.70%. - The performance of set 1 on MegaFace achieves 65.782% for rank-1 accuracy and 76.288% for TPR@FAR=10^-6.
- Light CNN-9 model and training code are released. The
- Jul 4, 2017
- The repository was built.
Installation
- Install pytorch following the website.
- Clone this repository.
- Note: We currently only run it on Python 2.7.
Datasets
-
Download face dataset such as CASIA-WebFace, VGG-Face and MS-Celeb-1M.
- The MS-Celeb-1M clean list is uploaded: Baidu Yun, Google Drive.
-
All face images are converted to gray-scale images and normalized to 144x144 according to landmarks.
-
According to the five facial points, we not only rotate two eye points horizontally but also set the distance between the midpoint of eyes and the midpoint of mouth(ec_mc_y), and the y axis of midpoint of eyes(ec_y) .
-
The aligned LFW images are uploaded on Baidu Yun.
Dataset size ec_mc_y ec_y Training set 144x144 48 48 Testing set 128x128 48 40
Training
- To train Light CNN using the train script simply specify the parameters listed in
train.py
as a flag or manually change them.
python train.py --root_path=/path/to/your/datasets/ \
--train_list=/path/to/your/train/list.txt \
--val_list=/path/to/your/val/list.txt \
--save_path=/path/to/your/save/path/ \
--model="LightCNN-9/LightCNN-29" --num_classes=n
- Tips:
- The lists of train and val datasets are followed by the format of caffe. The details of data loader is shown in
load_imglist.py
. Or you can usetorchvision.datasets.ImageFolder
to load your datasets. - The
num_classes
denotes the number of identities in your training dataset. - When training by pytorch, you can set a larger learning rate than caffe and it is faster converaged by pytorch than caffe for Light CNN.
- We enlarge the learning rate for the parameters of fc2 which may lead better performance. If the training is collapsed on your own datasets, you can decrese it.
- We modify the implementation of SGD with momentum since the official pytorch implementation is different from Sutskever et. al. The details are shown in here.
- The training datasets for LightCNN-29v2 are CASIA-WebFace and MS-Celeb-1M, therefore, the
num_classes
is 80013.
- The lists of train and val datasets are followed by the format of caffe. The details of data loader is shown in
Evaluation
- To evaluate a trained network:
python extract_features.py --resume=/path/to/your/model \
--root_path=/path/to/your/datasets/ \
--img_list=/path/to/your/list.txt \
--save_path=/path/to/your/save/path/ \
--model="LightCNN-9/LightCNN-29/LightCNN-29v2"\
--num_classes=n (79077 for LightCNN-9/LightCNN-29, 80013 for LightCNN-29v2)
- You can use
vlfeat
orsklearn
to evaluate the features on ROC and obtainEER
andTPR@FPR
for your testing datasets. - The model of LightCNN-9 is released on Google Drive.
- Note that the released model contains the whole state of the light CNN module and optimizer. The details of loading model can be found in
train.py
.
- Note that the released model contains the whole state of the light CNN module and optimizer. The details of loading model can be found in
- The model of LightCNN-29 is released on Google Drive.
- The model of LightCNN-29 v2 is released on Google Drive.
- The features of lfw and megaface of LightCNN-9 are released.
- The model of LightCNN v4 is released on Google Drive.
- The detailed structure of LightCNN v4 is shown in light_cnn_v4.py
- The input is an aligned 128*128 BGR face image.
- The input pixel value is normalized by mean ([0.0, 0.0, 0.0]) and std ([255.0, 255.0, 255.0]).
Performance
The Light CNN performance on lfw 6,000 pairs.
Model | 100% - EER | TPR@FAR=1% | TPR@FAR=0.1% | TPR@FAR=0 |
---|---|---|---|---|
LightCNN-9 | 98.70% | 98.47% | 95.13% | 89.53% |
LightCNN-29 | 99.40% | 99.43% | 98.67% | 95.70% |
LightCNN-29v2 | 99.43% | 99.53% | 99.30% | 96.77% |
LightCNN v4 | 99.67% | 99.67% | 99.57% | 99.27% |
The Light CNN performance on lfw BLUFR protocols
Model | VR@FAR=0.1% | DIR@FAR=1% |
---|---|---|
LightCNN-9 | 96.80% | 83.06% |
LightCNN-29 | 98.95% | 91.33% |
LightCNN-29v2 | 99.41% | 94.43% |
The Light CNN performance on MegaFace
Model | Rank-1 | TPR@FAR=1e-6 |
---|---|---|
LightCNN-9 | 65.782% | 76.288% |
LightCNN-29 | 72.704% | 85.891% |
LightCNN-29v2 | 76.021% | 89.740% |
Citation
If you use our models, please cite the following paper:
@article{wu2018light,
title={A light CNN for deep face representation with noisy labels},
author={Wu, Xiang and He, Ran and Sun, Zhenan and Tan, Tieniu},
journal={IEEE Transactions on Information Forensics and Security},
volume={13},
number={11},
pages={2884--2896},
year={2018},
publisher={IEEE}
}