Skip to content

mcaramba563/face_recognition_model

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Face Recognition Project

Проект для распознавания лиц и генерации эмбеддингов

Цель проекта

Задача: Получить эмбединг всех лиц, содержащихся на изображении.

Структура проекта

├── notebooks/          # Jupyter-ноутбуки с исследованиями и пайплайнами
├── models/            # Предобученные модели
├── images/             # Примеры и результаты
└── README.md          # Документация проекта

Использование

Основные ноутбуки:

Ноутбук Описание
face-recognition-full-pipeline.ipynb Полный пайплайн: выравнивание лиц и получение эмбедингов
arcface-model.ipynb Обучение модели для генерации эмбедингов
face-key-points.ipynb Детекция ключевых точек лица

Модели

Модель Назначение Архитектура
face_emb_model Генерация эмбеддингов лиц ResNet101 + ArcFace
eyes_model_v3.pt Детекция координат глаз ResNet50

Face Embedding Model

Архитектура: ResNet101 с ArcFace Loss для оптимального распределения эмбедингов

Обучение

  • Модель: ResNet101 с ArcFace Loss
  • Датасет: Урезанный CelebA (500 классов)
  • Аугментации: Color Jitter, Random Horizontal Flip
  • Цель: Лучшее распределение эмбедингов в пространстве признаков
Architecture

Архитектура модели эмбедингов

Результаты

Метрика: Identification Rate (IR)
False Positive Rate Left Threshold True Positive Rate
0.05 0.236 46.5%
0.10 0.193 58.8%
0.20 0.146 72.5%
ROC Curve Results
График loss и accuracy на train и valid выборках Результаты тестирования на лицах не присутствующих при обучении

Face Keypoints Detection Model

Задача: Детекция 12 ключевых точек глаз для выравнивания лиц

Технические детали

  • Архитектура: ResNet50
  • Датасет: Helen Dataset
  • Точки: 12 ключевых точек глаз
  • Аугментации:
    • Случайная обрезка изображения
    • Color Jitter
    • Случайные повороты
  • Loss Function: MSE Loss
  • Нормализация: Координаты нормированы на размеры изображения

Результаты

Keypoints Detection

Синие точки - предсказания модели


Full Pipeline

Алгоритм работы

graph LR
    A[Входное изображение] --> B[YOLOv8 детекция лиц]
    B --> C[Обрезка лица]
    C --> D[Поиск координат глаз]
    D --> E[Выравнивание лица]
    E --> F[Генерация эмбединга]
Loading

Пошаговое описание

Шаг Операция Инструмент
1 Детектируем лицо YOLOv8
2 Обрезаем изображение Bounding Box
3 Находим координаты глаз ResNet50
4 Выравниваем лицо Geometric Transform
5 Генерируем эмбединг ResNet101 + ArcFace

Метрика схожести

Косинусная близость используется для определения похожести лиц:

def cos_sim(a, b):
    """
    Вычисляет косинусную близость между двумя векторами
    
    Args:
        a, b: эмбединги лиц
    
    Returns:
        float: косинусная близость (от -1 до 1)
    """
    dot_product = np.dot(a, b)
    norm_a = np.linalg.norm(a)
    norm_b = np.linalg.norm(b)
    if norm_a == 0 or norm_b == 0:
        return 0.0
    return dot_product / (norm_a * norm_b)

Принцип: Эмбединги лиц одного человека должны иметь большую косинусную близость между собой, чем эмбединги разных людей.


Примеры работы

Эксперимент 1

Example 1a Example 1b Example 1c
Первое лицо Второе лицо Третье лицо

Результаты косинусной близости:

Одинаковые лица: 0.199
Разные лица 1:  -0.001  
Разные лица 2:   0.134

Эксперимент 2

Example 2a Example 2b Example 2c
Первое лицо Второе лицо Третье лицо

Результаты косинусной близости:

Одинаковые лица: 0.386
Разные лица 1:   0.170
Разные лица 2:  -0.005

Векторы одного класса имеют меньший угол между собой (большую косинусную близость), чем векторы разных классов


Releases

No releases published

Packages

No packages published