Введение в проблему инклюзивности и компьютерного зрения

Когда вы в следующий раз будете настраивать биометрический вход на смартфоне или тестировать генеративную модель, задайте себе вопрос: а сработает ли этот код для половины населения планеты? (И да, отговорка «но на моей машине в локальной среде всё ок» здесь точно не прокатит). Современные системы компьютерного зрения, алгоритмы генеративного искусственного интеллекта и медицинские диагностические модели ежедневно обрабатывают миллиарды визуальных объектов. Однако за внешней технологической зрелостью часто скрывается системная проблема — предвзятость алгоритмов при работе с человеческой кожей. Исторически сложилось так, что большинство датасетов создавались без учета глобального разнообразия человеческих фенотипов, что приводило к ошибкам в распознавании лиц, биометрической аутентификации и автоматической дерматоскопии.

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

Чтобы код одинаково честно и корректно работал с любыми фенотипами — будь то процедурная генерация толпы в игре или диагностический софт, — нам нужно заглянуть под капот цветовых пространств и переписать устаревшие подходы на язык точной математики.

Ограничения классических шкал и эволюция к цифровым метрикам

Десятилетиями индустрия полагалась на шкалу Фитцпатрика (Fitzpatrick scale), разработанную в 1975 году дерматологом Томасом Фитцпатриком. Эта шкала делит все оттенки кожи на шесть категорий на основе реакции на ультрафиолетовое излучение. Несмотря на свою простоту, шкала Фитцпатрика имеет критические недостатки в контексте современного программирования и машинного обучения:

  • Субъективность оценки: определение категории зависит от визуального восприятия исследователя, что ведет к ошибкам разметки.
  • Недостаточная грануляция: шесть дискретных уровней слишком мало для описания всего спектра человеческой пигментации.
  • Антропологическая ограниченность: шкала создавалась на основе ограниченной выборки и плохо учитывает сложные промежуточные фенотипы.

На смену устаревшим методам приходят цифровые стандарты, такие как шкала Monk (Monk Skin Tone Scale), разработанная для отражения реального разнообразия. На уровне алгоритмов стандартом де-факто для автоматической оценки тона стал расчет индивидуального угла типологии — ITA (Individual Typology Angle).

Но как перевести это математическое определение в реальные формулы, которые можно запустить в скрипте без риска получить неестественные артефакты? Переходим к практике и цветовым координатам.

Математика ITA и выбор цветовых пространств

Для корректного расчета ITA используется цветовое пространство CIELAB, где $L^*$ отвечает за яркость, а $a^*$ и $b^*$ — за цветовые координаты по осям «зеленый-красный» и «синий-желтый». (Примерно как в том самом легендарном треде на Stack Overflow, где все спорят, какого цвета было платье, только здесь мы полагаемся на строгую науку). Формула расчета индивидуального угла типологии выглядит следующим образом:

import numpy as np

def calculate_ita(l_star, b_star):
    # Вычисление Individual Typology Angle в градусах
    # l_star: яркость от 0 до 100
    # b_star: параметр синий-желтый
    return np.arctan((l_star - 50) / b_star) * (180 / np.pi)

Использование CIELAB критически важно, так как это пространство является перцептивно равномерным. Это означает, что математическое расстояние между цветами в нем примерно соответствует тому, как человеческий глаз вос