NormFace: L2 HyperSphere Embedding for Face Verification, 99.21% on LFW
Switch branches/tags
Nothing to show
Clone or download
Latest commit 8438887 Dec 13, 2017
Type Name Latest commit message Commit time
Failed to load latest commit information.
YTF Update Apr 24, 2017
draw upload geo_gradient Jun 18, 2017
mnist mnist plot for different scale. Aug 11, 2017
prototxt force normalization. Aug 27, 2017
.gitignore update mnist Apr 24, 2017
LICENSE Initial commit Mar 29, 2017 Update Apr 25, 2017 Update Dec 13, 2017
mirror.png mirror face image Apr 24, 2017


NormFace: L2 HyperSphere Embedding for Face Verification

Baseline Model Original Accuracy Finetune Using Normalization
Light CNN(MaxOut)   98.41%*   98.78%
Center Face(ResNet) 99.03% 99.21%

* It is 98.13% on Light CNN's project page. After applying the mirror face trick, it becomes 98.41%.


  1. My Caffe ( It also works on Linux. Anyway, if you want to use your own Caffe, please transplant the inner_product_layer, inner_distance_layer, normalize_layer, general_contrastive_layer, flip_layer and accuracy_layer to your Caffe. Since there are too many layers to transplant, I suggest you to use my Caffe directly:)
  2. Matlab to draw some figures.
  3. GPU with CUDA support.
  4. MTCNN face and facial landmark detector(
  5. Baseline model such as Center Face or Light CNN or your own model trained by softmax loss. I don't know whether my loss helps or not if your model is trained by other loss functions. You may have a try. I believe it will be effective if there is no normalization term in your model.


  1. The dataset used in this paper is CASIA-Webface. Note that there are 3 identities overlap between CASIA-Webface and LFW. They are 0166921, 1056413 and 1193098. For fair evaluation, it is recommended to remove them from CAISA-Webface. Update: Actually there are 17 overlap identities, the list is in my FaceDatasets repository.
  2. Align all face images using MTCNN. The script can be found in my FaceVerification repository.
  3. Replace the final inner-product layer and softmax layer with layers defined in scaled_cosine_softmax.prototxt or normalized_Euclidean_contrastive.prototxt.
  4. Fine-tune the network based on the original model using a small learning rate, say 0.001 or 0.0001.


Evaluation codes are in my another github repository. Please refer to the second paragraph of the Update section.

A trick called mirror face is used during extracting the features. A sample code is in ./prototxt/example_of_mirror_face.prototxt.

About the mirror face: See ./

About the histogram feature for video face verification: Details are in ./YTF.

Trained Models

Light CNN B model(98.78%): Google Drive or Baidu Yun.

ps: I used to get a model of 98.8%, but I lost it....

Center Face (ResNet-27) model(99.21%): Google Drive or Baidu Yun.


This code is distributed under MIT LICENSE. The released models are only allowed for non-commercial use.


If you find my paper or the codes useful in your research, please cite

  title={NormFace: L2 Hypersphere Embedding for Face Verification},
  author={Wang, Feng and Xiang, Xiang and Cheng, Jian and Yuille, Alan L.},
  booktitle={Proceedings of the 25th ACM international conference on Multimedia},
  doi = {}


Feng Wang [feng.wff(at)], please replace (at) with @.