ConvRec Face Recognition Model
Run Inference at
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:
Warmup Phase (Epochs 1-8):
- No angular margin (m=0)
- Gradually increase scale (s: 10β30)
- Frozen backbone layers
- Learning basic face discrimination
Progressive Phase (Epochs 8-20):
- Gradually add angular margin (m: 0β0.35)
- Unfreeze all layers
- Increase scale (s: 30β45)
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:
Initial Attempt: Standard angular margin loss β 0% accuracy
- Issue: Loss explosion (36.0 instead of expected 4.6)
- Root cause: Improper normalization
Debugging Phase:
- Created diagnostic scripts
- Identified cosine similarity range issues
- Found parameter initialization problems
Fix Implementation:
- Proper L2 normalization for embeddings and weights
- Reduced initial scale parameter
- Fixed weight initialization
Progressive Training:
- Started with no margin (simple cosine similarity)
- Gradually introduced angular margin
- Result: 55% accuracy at epoch 13
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
Evaluation results
- Training Accuracyself-reported97.560
- ROC-AUC Scoreself-reported1.000