Как ИИ узнаёт лицо: от пикселей до «это точно ты»
Телефон разблокируется на твой взгляд, а камера в аэропорту находит человека в толпе. Разберём, что именно компьютер считает «лицом» и почему близнецы — его слабое место.
Для компьютера лицо — это не глаза и нос, а строчка из сотен чисел, которую можно сравнить с другой строчкой.
Распознавание лица — это не «узнать человека», а измерить геометрию и превратить её в число-отпечаток.
Сначала — найти, потом узнать
Любая система проходит два разных этапа, которые легко спутать. Первый — детекция: есть ли вообще лицо в кадре и где оно. Именно это делает жёлтая рамочка в камере телефона. Второй — распознавание: чьё это лицо. Детекция отвечает на вопрос «где?», распознавание — «кто?». Разблокировка по лицу — это оба этапа подряд.
Ключевые точки: каркас лица
Найдя лицо, алгоритм расставляет на нём опорные точки — уголки глаз, кончик носа, контур губ, линию бровей. Их может быть 68, а может несколько тысяч. По этим точкам лицо выравнивают: поворачивают и масштабируют так, будто человек смотрит прямо в камеру. Это критично — иначе наклон головы или взгляд вбок система приняла бы за другого человека.
Почему нельзя просто сравнить картинки попиксельно
Наивная мысль: сохранить фото и сравнивать новые кадры с ним пиксель в пиксель. Не работает совсем. Сдвинь свет, отрасти щетину, надень очки — и пиксели изменятся сильнее, чем между двумя разными людьми при одинаковом освещении. Нужно сравнивать не яркость точек, а устойчивые черты: расстояния и пропорции, которые не меняются от лампы и причёски.
Лицо как вектор-отпечаток
Главный трюк современных систем — нейросеть превращает выровненное лицо в короткий список чисел, эмбеддинг (обычно 128 или 512 координат). Сеть обучают на миллионах фотографий с хитрой целью: разные снимки одного человека должны давать почти одинаковые векторы, а снимки разных людей — далёкие друг от друга.
В итоге сравнение двух лиц превращается в геометрию. Считаем расстояние между векторами:
$$ d = \sqrt{\sum_{i=1}^{n} (a_i - b_i)^2} $$
Маленькое расстояние — один человек, большое — разные. Порог подбирают заранее. Прелесть в том, что вектор твоего лица можно вычислить один раз и хранить — а потом мгновенно сравнивать с любым новым кадром.
Где система ошибается
Идеальной точности не бывает, и провалы поучительны:
- Близнецы. Геометрия лиц почти совпадает, векторы оказываются рядом — классическая ошибка.
- Возраст и вес. Спустя годы пропорции плывут, расстояние до старого вектора растёт.
- Свет под углом. Резкие тени искажают опорные точки и сбивают выравнивание.
- Перекос данных. Если сеть учили в основном на лицах одного типа, на других она ошибается чаще — больная тема всей отрасли.
Защита от фото вместо лица
Серьёзная система обязана отличить живого человека от его снимка на экране — это называется liveness detection. Телефоны проецируют на лицо сетку из тысяч инфракрасных точек и строят его трёхмерную карту глубины: плоская фотография такой карты не даст. Поэтому разблокировать iPhone распечатанным портретом не выйдет, а вот старые системы на простой камере на этом ловились.
Коротко о главном
Распознавание лиц — это конвейер: найти лицо, выровнять по точкам, свернуть в вектор-отпечаток, сравнить расстояние. Никакого «понимания», что перед ним человек, у алгоритма нет — есть только числа и пороги. И именно поэтому к нему стоит относиться как к мощному, но небезошибочному инструменту, а не как к безупречному свидетелю.