This project explores face verification by:
- Pretraining a ResNet50 backbone on the FaceScrub dataset for identity classification.
- Fine‑tuning the backbone with a TripletNet architecture on LFW (Labeled Faces in the Wild) using triplet loss.
Results demonstrate strong verification performance (AUC > 0.93) with optimal hyperparameters.
This README provides a high‑level overview of the steps taken and findings.
- Environment: Create a Python environment (e.g.,
conda,venv) and install the dependencies listed inrequirements.txt. - GPU Support: Ensure that CUDA‑enabled GPU drivers are available for faster data loading and model training.
- FaceScrub: Download and unpack actor/actress photos. Organize into a merged folder of identities.
- LFW: Download and funnel into a standardized directory structure. Generate and save train/val/test splits in
lfw_splits.json.
- Train a ResNet50 classification head on FaceScrub identities.
- Freeze early layers; finetune the final block.
- Save best checkpoint (
resnet50_facescrub_best.pth).
- Wrap the pretrained backbone in a TripletNet.
- Experiment with different hyperparameters: learning rate, margin, dropout.
- Track train/val loss and verification metrics (Accuracy, FAR, FRR, AUC).
- Save best triplet checkpoints for each experiment.
-
Final LFW Test Results:
Experiment Accuracy FAR FRR AUC baseline 0.8583 0.1481 0.1353 0.9355 lr=1e‑5 0.7924 0.2005 0.2147 0.8727 margin=0.5 0.8673 0.1488 0.1166 0.9380 dropout=0.5 0.8604 0.1813 0.0978 0.9379 -
The margin=0.5 variant achieved the highest AUC and competitive accuracy.
-
Offloading augmentations and data loading to GPU improved training speed significantly.
This work uses public datasets (FaceScrub & LFW) under their respective licenses.
© 2025 Victor Vasquez







