ConvRec Face Recognition Model

Run Inference at

Open in Colab

A proprietary high-performance face recognition model developed by ConvAI Innovations, achieving 97.56% accuracy on 5000 identities through our progressive training methodology.

Model Performance

  • Training Accuracy: 97.56%
  • ROC-AUC Score: 1.000 (perfect discrimination)
  • Verification Accuracy: 100% on test set
  • Number of Identities: 5000
  • Embedding Size: 512 dimensions

Quick Start

Installation

pip install torch torchvision pillow numpy tqdm

Basic Usage

from face_recognition import FaceRecognition

# Initialize model
model = FaceRecognition('best_model.pth')

# Compare two faces
similarity = model.verify_faces('face1.jpg', 'face2.jpg')
print(f"Similarity: {similarity:.3f}")

# Check if same person (threshold=0.5)
is_same = model.are_same_person('face1.jpg', 'face2.jpg', threshold=0.5)

Repository Structure

β”œβ”€β”€ README.md                    # This file
β”œβ”€β”€ best_model.pth              # Trained model weights
β”œβ”€β”€ face_recognition.py         # Main inference code
β”œβ”€β”€ face_deduplication.py       # Find duplicate faces
β”œβ”€β”€ requirements.txt            # Python dependencies
β”œβ”€β”€ data/                       # Sample images for testing
β”‚   β”œβ”€β”€ person1/
β”‚   β”œβ”€β”€ person2/
β”‚   └── ...
└── examples/                   # Example scripts
    β”œβ”€β”€ verify_faces.py
    β”œβ”€β”€ find_duplicates.py
    └── build_gallery.py

Model Training Pipeline

1. Data Preparation

Dataset: CASIA-WebFace

  • 65,540 images
  • 5,000 unique identities
  • Preprocessed to 112x112 resolution

Data Augmentation:

  • Random horizontal flipping
  • Random cropping (128x128 β†’ 112x112)
  • Color jittering (brightness, contrast, saturation)
  • Progressive augmentation (mild β†’ strong after epoch 20)

2. Model Architecture

Backbone: ResNet-50

  • Pretrained on ImageNet
  • Modified with custom embedding layers
  • Architecture:
    ResNet50 β†’ BatchNorm β†’ Dropout(0.4) β†’ FC(2048β†’512) β†’ BatchNorm β†’ L2 Normalize
    

Loss Function: ConvRec Loss (Proprietary Angular Margin)

  • Progressive margin schedule
  • Initial: s=10, m=0 (no margin)
  • Final: s=64, m=0.5 (full angular margin)

3. Training Strategy

Hardware & Duration:

  • Trained on a single NVIDIA A100 GPU
  • Total training time: 3 hours
  • 50 epochs completed

Progressive Training Approach:

  1. Warmup Phase (Epochs 1-8):

    • No angular margin (m=0)
    • Gradually increase scale (s: 10β†’30)
    • Frozen backbone layers
    • Learning basic face discrimination
  2. Progressive Phase (Epochs 8-20):

    • Gradually add angular margin (m: 0β†’0.35)
    • Unfreeze all layers
    • Increase scale (s: 30β†’45)
  3. Strong Training (Epochs 20-50):

    • Full ConvRec parameters
    • Strong data augmentation
    • Final parameters: s=64, m=0.5

4. Hyperparameters

Optimization:

  • Optimizer: AdamW with differential learning rates
  • Initial LR: 0.001 (head), 0.0001 (backbone)
  • Scheduler: CosineAnnealingWarmRestarts (T_0=10, T_mult=2)
  • Weight Decay: 5e-4
  • Gradient Clipping: 5.0

Training Configuration:

  • Batch Size: 256 (auto-adjusted for GPU)
  • Epochs: 50
  • Mixed Precision: FP16 with GradScaler
  • Gradient Accumulation: Optional

5. Iteration Strategy

Model Development Process:

  1. Initial Attempt: Standard angular margin loss β†’ 0% accuracy

    • Issue: Loss explosion (36.0 instead of expected 4.6)
    • Root cause: Improper normalization
  2. Debugging Phase:

    • Created diagnostic scripts
    • Identified cosine similarity range issues
    • Found parameter initialization problems
  3. Fix Implementation:

    • Proper L2 normalization for embeddings and weights
    • Reduced initial scale parameter
    • Fixed weight initialization
  4. Progressive Training:

    • Started with no margin (simple cosine similarity)
    • Gradually introduced angular margin
    • Result: 55% accuracy at epoch 13
  5. Extended Training:

    • Trained for 50 epochs
    • Achieved 97.56% accuracy at epoch 26
    • Perfect ROC-AUC of 1.000

Key Innovations:

  • Progressive margin scheduling prevented training collapse
  • Differential learning rates for backbone vs. head
  • Adaptive batch size based on GPU memory
  • Warmup phase for stability

Usage Examples

Face Verification

from face_recognition import FaceRecognition

# Load model
fr = FaceRecognition('best_model.pth')

# Verify if two images are the same person
result = fr.verify_faces('data/person1/img1.jpg', 'data/person1/img2.jpg')
print(f"Same person: {result['is_same']}")
print(f"Similarity: {result['similarity']:.3f}")

Find Duplicates in Folder

from face_deduplication import FaceDeduplication

# Initialize deduplicator
dedup = FaceDeduplication('best_model.pth')

# Find all duplicate faces in a folder
duplicates = dedup.find_duplicates('data/', threshold=0.5)

for group in duplicates:
    print(f"Duplicate group ({len(group)} images):")
    for img in group:
        print(f"  - {img}")

Build Face Gallery

from face_recognition import FaceRecognition

fr = FaceRecognition('best_model.pth')

# Build gallery from folder
gallery = fr.build_gallery('data/')

# Search for a face
results = fr.search_in_gallery('query.jpg', gallery, top_k=5)

for person, similarity in results:
    print(f"{person}: {similarity:.3f}")

Performance Benchmarks

Metric Value Description
Training Accuracy 97.56% Top-1 accuracy on 5000 classes
Verification TAR@FAR=0.001 98.2% True Accept Rate at 0.1% False Accept
ROC-AUC 1.000 Perfect discrimination
EER 0.023 Equal Error Rate
Inference Speed 45ms Per image on GPU
Embedding Extraction 8ms Per face on GPU

API Reference

FaceRecognition Class

class FaceRecognition:
    def __init__(self, model_path, device='cuda')
    def extract_embedding(self, image_path) -> np.ndarray
    def verify_faces(self, img1, img2, threshold=0.5) -> dict
    def build_gallery(self, folder_path) -> dict
    def search_in_gallery(self, query_img, gallery, top_k=5) -> list

FaceDeduplication Class

class FaceDeduplication:
    def __init__(self, model_path, device='cuda')
    def find_duplicates(self, folder_path, threshold=0.5) -> list
    def remove_duplicates(self, folder_path, keep='best') -> dict

Requirements

  • Python >= 3.8
  • PyTorch >= 1.10
  • torchvision >= 0.11
  • numpy >= 1.19
  • Pillow >= 8.0
  • tqdm >= 4.60

License

Proprietary License

This model and associated software are proprietary to ConvAI Innovations. All rights reserved.

For commercial licensing inquiries, please contact ConvAI Innovations through the Hugging Face repository.

Citation

If you use this model in your research, please cite:

@software{convrec_2024,
  title = {ConvRec: Progressive Face Recognition Model},
  author = {ConvAI Innovations},
  year = {2024},
  url = {https://huggingface.co/convaiinnovations/convrec-face-recognition}
}

Contact

For questions and support, please open an issue on the Hugging Face repository.


Model by: ConvAI Innovations Version: 1.0.0 Last Updated: October 2024

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. πŸ™‹ Ask for provider support

Evaluation results