Розробка системи визначення віку та статі за обличчям

Проектуємо та впроваджуємо системи штучного інтелекту: від прототипу до production-ready рішення. Наша команда поєднує експертизу в машинному навчанні, дата-інжинірингу та MLOps, щоб AI працював не в лабораторії, а в реальному бізнесі.
Показано 1 з 1Усі 1566 послуг
Розробка системи визначення віку та статі за обличчям
Середній
від 1 тижня до 3 місяців
Часті запитання

Напрямки AI-розробки

Етапи розробки AI-рішення

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1284
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1196
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    901
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1119
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    586
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    853

Розробка системи визначення віку та статі за обличчям

Визначення віку та статі за зображенням обличчя — завдання комп'ютерного зору зі застосуванням у retail аналітиці (демографічний профіль відвідувачів), системах адаптивного контенту, медичних дослідженнях, перевірці віку (age gate). Обидва завдання часто реалізуються єдиною мультизадачною моделлю.

Мультизадачна архітектура

import torch
import torch.nn as nn
import timm

class AgeGenderModel(nn.Module):
    """Єдина модель для одночасного прогнозування віку та статі"""
    def __init__(self, pretrained_backbone: str = 'efficientnet_b2'):
        super().__init__()
        backbone = timm.create_model(pretrained_backbone, pretrained=True, num_classes=0)
        self.backbone = backbone
        feat_dim = backbone.num_features  # 1408 для B2

        # Спільна репрезентація
        self.shared = nn.Sequential(
            nn.Linear(feat_dim, 512),
            nn.GELU(),
            nn.Dropout(0.3)
        )

        # Окремі голови для кожного завдання
        self.age_head = nn.Linear(512, 1)      # регресія (MAE)
        self.gender_head = nn.Linear(512, 2)   # класифікація (CE)

    def forward(self, x):
        features = self.backbone(x)
        shared = self.shared(features)
        age = self.age_head(shared).squeeze()
        gender_logits = self.gender_head(shared)
        return age, gender_logits

Вік як регресія vs класифікація: регресія дає неперервний результат (32.4 року), класифікація по діапазонах (30–35 років) менш точна але зручніша для деяких застосувань. Розподілена регресія (DLDL — Distribution Learning) — найкращий підхід: вік моделюється як розподіл ймовірностей, а не точкове значення.

Датасети

Датасет Кількість фото Діапазон віку Мітки
IMDB-Wiki 524k 0–100 Вік, стать
UTKFace 23k 0–116 Вік, стать, етнічність
APPA-REAL 7.6k 7–77 Реальний та сприйманий вік
FairFace 108k 0–70+ Стать, раса, 9 діапазонів віку
AgeDB 16k 0–101 Вік, стать

Попередня обробка та аугментація

import albumentations as A
from albumentations.pytorch import ToTensorV2

train_transform = A.Compose([
    A.Resize(224, 224),
    A.HorizontalFlip(p=0.5),
    A.RandomBrightnessContrast(brightness_limit=0.3, contrast_limit=0.3, p=0.5),
    A.GaussianBlur(blur_limit=(3, 7), p=0.2),
    A.CoarseDropout(max_holes=4, max_height=30, max_width=30, p=0.3),
    A.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),
    ToTensorV2()
])

Функції втрат для мультизадачного навчання

def multitask_loss(age_pred, age_true, gender_logits, gender_true,
                   age_weight=1.0, gender_weight=0.5):
    # MAE для віку + CE для статі
    age_loss = nn.L1Loss()(age_pred, age_true.float())
    gender_loss = nn.CrossEntropyLoss()(gender_logits, gender_true)

    # Uncertainty weighting (Kendall et al.)
    return age_weight * age_loss + gender_weight * gender_loss

Метрики продуктивності

Модель MAE (вік) Точність (стать) Швидкість
EfficientNet-B2 (IMDB-Wiki FT) 4.8 років 96.3% 8 ms
MobileNetV3 (UTKFace FT) 5.2 років 95.8% 3 ms
ViT-B/16 (IMDB-Wiki FT) 4.3 років 97.1% 12 ms

MAE 4–6 років — типовий результат для «дикої природи» (селфі, фото різної якості). В контрольованих умовах (фронтальний портрет, гарне освітлення) — 3–4 років.

Етика та bias

Моделі, навчені на IMDB-Wiki, мають недопредставлення людей похилого віку та деяких етнічних груп. Датасет FairFace спеціально збалансований для зменшення bias. При використанні для прийняття рішень (age gate) — обов'язкове тестування на fairness у межах демографічних груп.

Завдання Строк реалізації
Інтеграція готової моделі (InsightFace) 1 тиждень
Користувацька модель на корпоративних даних 3–5 тижнів
Система з аналітикою та звітами 4–7 тижнів