wikillm

Paper · 2017-10-23 · cs.CV

VGGFace2: A dataset for recognising faces across pose and age

VGGFace2 is a face recognition training set of 3.31M web images of 9,131 identities (80 to 843 per identity), built by a six-stage automatic and manual filtering pipeline that targets pose and age variety and low label noise. ResNet-50 and SE-ResNet-50 trained on it, optionally after MS-Celeb-1M pre-training, report 0.921 TAR@FAR=1e-3 on IJB-A (author-reported).

Face recognitionLearning with noisy labelsDataset curationface-recognitiondatasetcomputer-visiondata-cleaning

arXivPDFMarkdown12 min read

AI-compiled by claude-opus-5-5 on 2026-10-18, not yet reviewed by a human. Every claim cites its source; check it when a detail matters.

In plain words

A face recognition model learns by looking at many photos of many people. Two things matter: how many different people it sees (breadth) and how differently each person is shown (depth): side views, childhood photos, bad lighting. Earlier public collections tended to favour one or the other, and the large ones scraped from search engines contained many photos of the wrong person.

VGGFace2 is a collection of about 3.3 million photos of about 9,000 public figures, gathered on purpose to include profiles and younger pictures of each person. The authors downloaded images from Google Image Search, also searching for each name plus words like "sideview" and "very young", then cleaned the result in stages: a face detector, automatic classifiers that throw out photos unlikely to show the right person, removal of near-identical copies, and finally human annotators who check the doubtful cases.

They also added a small test protocol: groups of five photos of the same person seen from the front, at three-quarter view or in profile, and groups of young versus mature photos, so one can measure how well a model matches the same person across pose and age. Standard image classifiers (ResNet-50 and a variant with squeeze-and-excitation blocks) trained on VGGFace2 matched faces across pose and age better than the same networks trained on older datasets, and did best on the IJB-A, IJB-B and IJB-C benchmarks when first trained on the much larger MS-Celeb-1M and then refined on VGGFace2.

TL;DR

VGGFace2 is a dataset paper: 3.31M images, 9,131 identities, mean 362.6 images per identity, split into 8,631 training and 500 test identities, with face boxes, five landmarks, and predicted pose and apparent age per image §3.1, tab. 1. The contribution is the collection pipeline (Freebase name list, 1,400 Google images per name, MTCNN detection, classifier-score filtering, VLAD near-duplicate removal, score-banded manual cleaning) and pose/age template protocols on the test set §3.2, §4. Baselines are plain softmax-trained ResNet-50 / SE-ResNet-50 with 2048-d descriptors, template averaging and cosine similarity §5.1. MS1M pre-training followed by VGGFace2 fine-tuning with SENet gives the best IJB-A/B/C numbers in the paper tab. 6, tab. 7, tab. 8. Read it if you need to rebuild a similar web-scraped identity dataset or reproduce the VGGFace2 baselines; there is no new loss or architecture.

Problem

Public face datasets before this paper emphasise either many images per identity (depth) or many identities with few images each (breadth), and none is designed around pose and age variation §1. MS-Celeb-1M has the most images but limited intra-identity variation (the text gives an average of 81 images per person) and label noise because its images were taken from a search engine without manual filtering §2. VGGFace has 2.6M images but only 2,622 identities §2, tab. 1. The goals for VGGFace2 are many identities and many images per identity, wide pose, age and ethnicity coverage, and minimal label noise [abstract].

Method

The method is a six-stage collection pipeline §4, tab. 2, plus annotation and baseline training.

Pseudocode
Algorithm: VGGFace2 collection pipeline  [§4, tab. 2]
Input: Freebase knowledge graph, Google Image Search, annotators
1. Name list [§4.1] (manual, ~3 months):
   - take 500K public-figure names from Freebase
   - per name, download 100 Google images; annotators keep a name only if
     roughly 90% or more of the 100 images show a single person
   - result: 9,244 names; ethnicity/kinship attributes taken from DBPedia
2. Image download [§4.2]:
   - per name: 1,000 images for the plain name query,
     200 for "<name> sideview", 200 for "<name> very young"  -> 1,400 per name
   - total 12.94M images
3. Face detection [§4.3]:
   - MTCNN (Zhang et al.) with the hyperparameters that work recommends
   - enlarge each face box by a factor of 0.3 to cover the whole head
   - keep the 5 landmarks predicted by the same model
   - total 7.31M faces
4. Classifier filtering [§4.4]:
   - features: VGGFace model descriptors
   - train 1-vs-rest classifiers over the 9,244 identities:
       positives = faces from that identity's top-100 retrieved images
       negatives = faces from the top-100 images of all other identities
   - score every face in [0, 1]; drop faces with score < 0.5
     (threshold picked by manually inspecting 500 random identities)
   - total 6.99M
5. Near-duplicate removal [§4.5]:
   - compute VLAD descriptors for all remaining images, cluster them,
     keep one image per cluster
   - total 5.45M
6. Final filtering [§4.6] (automatic + manual, 21 days):
   a. Overlapping identities: per class, split images 50/50; train ResNet-50
      on one half, build a top-1 confusion matrix on the other half.
      20 confused subjects found; 19 noisy classes removed.
   b. Remove 94 identities with fewer than 80 images -> 9,131 identities.
   c. Outlier images (target purity > 96%):
      - retrain the classifier on the current data; per identity, bin images by score:
          H = [1, 0.95], I = (0.95, 0.8], L = (0.8, 0.5]
      - if H is noisy (several people): annotators clean H, I and L
        else: annotators clean only L
      - train a new model on cleaned H and L; clean I using that model's predictions
   - total 3.31M images
Output: 9,131 identities, 3.31M images

Per-stage counts as reported tab. 2:

#StepManual / autoIdentitiesImagesHuman time
1name listM500K50.00M3 months
2downloadA9,24412.94M-
3face detectionA9,2447.31M-
4classifier filteringA9,2446.99M-
5near-duplicate removalA9,2445.45M-
6final filteringA/M9,1313.31M21 days

(M = manual, A = automatic.)

Pose and age labels §4.7. A 5-way head-pose classifier (ResNet-50) is trained on CASIA-WebFace and an 8-way apparent-age classifier (ResNet-50) on IMDB-WIKI-500k+; both are run over the whole dataset. The bin edges of the 5 pose and 8 age classes are not stated in the paper.

Dataset contents §3.1. 59.3% male; 80 to 843 images per identity (mean 362.6); human-verified face boxes; five landmarks from MTCNN; predicted yaw/pitch/roll and apparent age. Split: 8,631 training classes, 500 test classes §3.1. fig. 1 shows histograms of the pose and age labels plus sample images of eight subjects of different ethnicities.

Test-set templates §3.2. A template is 5 images of one subject.

  • Pose: 300 test subjects, two templates each for frontal, three-quarter and profile view, so 1.8K templates / 9K images.
  • Age: 100 test subjects, two templates each for "young" (apparent age below 34) and "mature" (34 or above), so 400 templates / 2K images.

Baseline training §5.1. Backbones are ResNet-50 and SE-ResNet-50 ("SENet"), trained with softmax loss in four settings: from scratch on VGGFace (VF), on MS-Celeb-1M (MS1M), on VGGFace2 (VF2), and MS1M pre-training then VGGFace2 fine-tuning (VF2_ft). Training subjects do not overlap the benchmarks, and the MS1M overlap with "the two benchmarks" was removed §5.

Pseudocode
Training input pipeline  [§5.1]
1. take the enlarged face box; resize so the shorter side is 256 px
2. random 224x224 crop
3. subtract the per-channel mean
4. with probability 0.2 convert to monochrome
5. SGD, batch 256, class-balanced sampling per mini-batch

Descriptor and template matching §5.1.

Pseudocode
Descriptor: resize enlarged box to shorter side 256, take the centre 224x224 crop,
            read the 2048-d layer just before the classifier, L2-normalise.
VGGFace2 test identification: template vector = mean of image descriptors; 1-vs-rest SVMs.
IJB templates: media vector = mean of descriptors within one image or one video;
               template vector = mean of media vectors, then L2-normalise.
Similarity: cosine between template vectors.

Hyperparameters

NameValueWhereNotes
Initial names500K§4.1from Freebase
Images inspected per name (stage 1)100§4.1keep if ~90%+ are one identity
Images downloaded per name1000 + 200 ("sideview") + 200 ("very young")§4.2
Face detectorMTCNN, recommended hyperparameters§4.3values not restated
Box enlargementfactor 0.3§4.3how the factor is applied (per side or total) not stated
Stage-4 featuresVGGFace descriptors§4.4classifier type not stated
Stage-4 training datatop-100 images per identity as positives, top-100 of others as negatives§4.4
Stage-4 score threshold0.5§4.4
Near-duplicate methodVLAD clustering, one image kept per cluster§4.5cluster count / distance threshold not stated
Minimum images per identity80§4.6
Score bins (stage 6)H [1, 0.95], I (0.95, 0.8], L (0.8, 0.5]§4.6
Target purity> 96%§4.6
Age split for templatesyoung < 34 ≤ mature§3.2apparent age from the age classifier
BackbonesResNet-50, SE-ResNet-50§5.1
Losssoftmax§5.1
Inputshorter side 256, crop 224x224§5.1random crop for training, centre crop for testing
Monochrome augmentationp = 0.2§5.1
OptimizerSGD§5.1momentum and weight decay not stated
Batch size256§5.1class-balanced sampling; exact scheme not stated
LR (from scratch)0.1, divided by 10 twice on plateau§5.1epochs / plateau criterion not stated
LR (fine-tuning)0.005 decreasing to 0.001§5.1schedule not stated
Weight initas in He et al. (ResNet)§5.1
Descriptor2048-d, L2-normalised§5.1
VGGFace2 identification test50 random test images per subject, rest train 1-vs-rest SVMs§5.2SVM settings not stated

Results

Author-reported. ResNet-50 trained from scratch on each dataset, evaluated on the VGGFace2 test set; lower is better tab. 3:

Training datasetVGGFaceMS1MVGGFace2
Top-1 error (%)10.65.63.9

Pose probing: mean cosine similarity between pose templates over 300 subjects, ResNet-50 from scratch; higher is better tab. 4:

PoseVGGFace frontVGGFace 3/4VGGFace profileMS1M frontMS1M 3/4MS1M profileVGGFace2 frontVGGFace2 3/4VGGFace2 profile
front0.57810.56790.48210.56610.55820.47150.68760.68210.6222
three-quarter0.57060.59570.53450.56280.57660.50360.68590.69800.6481
profile0.48590.53790.56820.47760.50640.50940.62640.65150.6488

Age probing: mean cosine similarity between age templates over 100 subjects tab. 5:

VGGFace youngVGGFace matureMS1M youngMS1M matureVGGFace2 youngVGGFace2 mature
young0.52310.43380.49830.40050.62560.5524
mature0.43940.55180.40990.52760.56070.6637

Across both protocols VGGFace2-trained models give the highest similarities and MS1M-trained the lowest, and cross-pose / cross-age pairs score lower than same-pose / same-age pairs for every model §5.2. fig. 3 and fig. 5 show histograms of front-to-profile and young-to-mature scores for the three models.

IJB-A, 10 splits, mean ± std; TAR at FAR for 1:1 verification and TPIR at FPIR / Rank-N for 1:N identification tab. 6:

Training datasetArch.FAR=0.001FAR=0.01FAR=0.1FPIR=0.01FPIR=0.1Rank-1Rank-5Rank-10
VGGFaceResNet-500.620 ± 0.0430.834 ± 0.0210.954 ± 0.0050.454 ± 0.0580.748 ± 0.0240.925 ± 0.0080.972 ± 0.0050.983 ± 0.003
MS1MResNet-500.851 ± 0.0300.939 ± 0.0130.980 ± 0.0030.807 ± 0.0410.920 ± 0.0120.961 ± 0.0060.982 ± 0.0040.990 ± 0.002
VGGFace2ResNet-500.895 ± 0.0190.950 ± 0.0050.980 ± 0.0030.844 ± 0.0350.924 ± 0.0060.976 ± 0.0040.992 ± 0.0020.995 ± 0.001
VGGFace2_ftResNet-500.908 ± 0.0170.957 ± 0.0070.986 ± 0.0020.861 ± 0.0270.936 ± 0.0070.978 ± 0.0050.992 ± 0.0030.995 ± 0.001
VGGFace2SENet0.904 ± 0.0200.958 ± 0.0040.985 ± 0.0020.847 ± 0.0510.930 ± 0.0070.981 ± 0.0030.994 ± 0.0020.996 ± 0.001
VGGFace2_ftSENet0.921 ± 0.0140.968 ± 0.0060.990 ± 0.0020.883 ± 0.0380.946 ± 0.0040.982 ± 0.0040.993 ± 0.0020.994 ± 0.001
Crosswhite et al.-0.836 ± 0.0270.939 ± 0.0130.979 ± 0.0040.774 ± 0.0490.882 ± 0.0160.928 ± 0.0100.977 ± 0.0040.986 ± 0.003
Sohn et al.-0.649 ± 0.0220.864 ± 0.0070.970 ± 0.001--0.895 ± 0.0030.957 ± 0.0020.968 ± 0.002
Bansal et al.-0.730†0.8740.960†-----
Yang et al.-0.881 ± 0.0110.941 ± 0.0080.978 ± 0.0030.817 ± 0.0410.917 ± 0.0090.958 ± 0.0050.980 ± 0.0050.986 ± 0.003

† read from Bansal et al. tab. 6.

IJB-B, 1:1 Mixed Media verification and 1:N Mixed Media identification over galleries S1 and S2 tab. 7:

Training datasetArch.FAR=1e-5FAR=1e-4FAR=1e-3FAR=1e-2FPIR=0.01FPIR=0.1Rank-1Rank-5Rank-10
VGGFaceResNet-500.3420.5350.7110.8500.429 ± 0.0240.635 ± 0.0150.752 ± 0.0380.843 ± 0.0320.874 ± 0.026
MS1MResNet-500.5480.7430.8570.9350.662 ± 0.0360.810 ± 0.0280.865 ± 0.0530.917 ± 0.0320.936 ± 0.024
VGGFace2ResNet-500.6470.7840.8780.9380.701 ± 0.0380.824 ± 0.0340.886 ± 0.0320.936 ± 0.0190.953 ± 0.013
VGGFace2_ftResNet-500.6710.8040.8910.9470.702 ± 0.0410.843 ± 0.0320.894 ± 0.0390.940 ± 0.0220.954 ± 0.016
VGGFace2SENet0.6710.8000.8880.9490.706 ± 0.0470.839 ± 0.0350.901 ± 0.0300.945 ± 0.0160.958 ± 0.010
VGGFace2_ftSENet0.7050.8310.9080.9560.743 ± 0.0370.863 ± 0.0320.902 ± 0.0360.946 ± 0.0220.959 ± 0.015
Whitelam et al.-0.3500.5400.7000.8400.4200.6400.7900.8500.900

IJB-C, galleries G1 and G2 tab. 8:

Training datasetArch.FAR=1e-5FAR=1e-4FAR=1e-3FAR=1e-2FPIR=0.01FPIR=0.1Rank-1Rank-5Rank-10
VGGFace2ResNet-500.7340.8250.9000.9500.735 ± 0.0220.830 ± 0.0210.898 ± 0.0170.939 ± 0.0130.953 ± 0.009
VGGFace2_ftResNet-500.7490.8460.9130.9580.749 ± 0.0210.849 ± 0.0180.908 ± 0.0220.946 ± 0.0140.958 ± 0.011
VGGFace2SENet0.7470.8400.9100.9600.746 ± 0.0180.842 ± 0.0220.912 ± 0.0170.949 ± 0.0100.962 ± 0.007
VGGFace2_ftSENet0.7680.8620.9270.9670.763 ± 0.0180.865 ± 0.0180.914 ± 0.0200.951 ± 0.0130.961 ± 0.010
Maze et al.0.6000.7500.8600.9500.4500.6200.7900.8700.900

On IJB-A, ResNet-50 on VGGFace2 beats ResNet-50 on MS1M by about 4.4 points TAR at FAR=0.001, 3.7 points TPIR at FPIR=0.01 and 1.5 points Rank-1, although MS1M has roughly 10× the identities §5.3. SENet from scratch on VGGFace2 roughly matches the MS1M-pre-trained ResNet-50 §5.3. ROC, DET and CMC curves are in fig. 9, fig. 10 and fig. 11.

Paper vs code

No official code. The paper links only a dataset and model download page; no training or collection code is referenced [abstract].

Pitfalls

  • This is a data pipeline, not a model. The baselines are ordinary softmax-trained ResNet-50 / SE-ResNet-50; any gain comes from the training data §5.1.
  • "Union" in the abstract means sequential training. The abstract talks about training on the union of VGGFace2 and MS-Celeb-1M, but the method section describes MS1M pre-training followed by VGGFace2 fine-tuning (VF2_ft) [abstract, §5.1].
  • Under-specified collection steps. The type of the stage-4 1-vs-rest classifier, the VLAD vocabulary and clustering threshold, how the 0.3 box enlargement is applied, the classifier retrained in stage 6, and the bin edges of the 5 pose and 8 age classes are all not stated §4.3–§4.7. Treat any reproduction of the filtering as approximate.
  • Score bins have one-sided brackets. H is the closed range [1, 0.95], I is (0.95, 0.8], L is (0.8, 0.5]; scores of exactly 0.5 sit at the edge of L while stage 4 drops scores below 0.5 §4.4, §4.6.
  • Training details missing. Momentum, weight decay, epoch count, the plateau criterion, the per-channel means and the exact class-balancing scheme are not stated; the fine-tuning LR is given only as starting at 0.005 and ending at 0.001 §5.1.
  • Split image counts are not given. The paper states 8,631 training and 500 test classes but not how many images fall in each split §3.1.
  • Ambiguous overlap removal. Training subjects are said to be disjoint from the benchmarks, but MS1M overlap is removed with "the two benchmarks" while three IJB benchmarks are evaluated §5. Which benchmarks were deduplicated against for IJB-C is not stated.
  • Preprocessing must match. For IJB-A the authors re-detect faces with MTCNN so crops match training §5.3; the paper does not say whether the same was done for IJB-B and IJB-C. Your descriptor is computed on the enlarged box, so tight crops will shift results.
  • Template aggregation is unweighted. Each image or video counts once at the media level, then media are averaged, regardless of how many frames a video has §5.1.
  • Baseline comparisons are not like-for-like. Prior-work numbers for IJB-B and IJB-C are read off published curves, and those works averaged verification over galleries evaluated separately, a different protocol from the one used here tab. 7, tab. 8. Bansal et al. values on IJB-A are also partly read from curves tab. 6.
  • Small inconsistencies in the text. Images per identity are given as 80–800 §1 and 80–843 §3.1, tab. 1; MegaFace has 690,572 identities in tab. 1 but 672,057 in §2; MS-Celeb-1M has 100 images per subject in tab. 1 but an average of 81 in §2. On IJB-C the bold Rank-10 entry (0.961, VF2_ft SENet) is below VF2 SENet's 0.962 tab. 8.
  • IJB-C has no VGGFace / MS1M baseline rows, so cross-dataset comparisons there are only between VGGFace2 variants and Maze et al. tab. 8.

Lineage

  • Builds on: VGGFace (Parkhi et al., 2015), whose name-list strategy stage 1 follows and whose model provides stage-4 features §4.1, §4.4; pre-training on MS-Celeb-1M §5.1.
  • Architectures: ResNet-50 (arXiv:1512.03385) and Squeeze-and-Excitation networks (arXiv:1709.01507) §5.1.
  • Compared against: Crosswhite et al., Sohn et al., Bansal et al., Yang et al. on IJB-A; Whitelam et al. on IJB-B; Maze et al. on IJB-C tab. 6, tab. 7, tab. 8.
  • Related card: ArcFace also reports IJB-B and IJB-C results.

Source and license

Adapted from “VGGFace2: A dataset for recognising faces across pose and age” by Qiong Cao, Li Shen, Weidi Xie, Omkar M. Parkhi, Andrew Zisserman (arXiv:1710.08092), used under CC BY 4.0. Changes: condensed and restructured for implementation, with tables, equations and algorithms taken from the paper and its code, each cited to its source. Not affiliated with or endorsed by the authors.