Распознавание лиц и эмбеддинги
Распознать лицо — не значит «выбрать из списка классов». Это умное сравнение через числовые отпечатки лиц.
Эмбеддинг (embedding) — компактный вектор чисел, в который сеть превращает лицо так, что у одного человека векторы близки, а у разных — далеки.
Почему лицо нельзя «классифицировать»
Кажется логичным сделать классификатор: класс = человек. Но это не работает на практике. Людей в мире миллиарды, а в системе доступа человек появляется впервые — обучать классификатор под каждого нового сотрудника абсурдно. Нужен подход, который работает для людей, которых сеть никогда не видела при обучении.
Идея эмбеддингов
Сеть учат не называть имя, а превращать лицо в вектор-отпечаток (эмбеддинг) из, скажем, 128 чисел. Обучают так, чтобы:
- два фото одного человека давали близкие векторы;
- фото разных людей — далёкие векторы.
Тогда распознавание превращается в простое сравнение: получили эмбеддинг нового лица, сравнили с эмбеддингом из базы. Близко — тот же человек, далеко — другой. Новый человек просто добавляется в базу как один вектор, переобучать сеть не нужно.
Сравниваем лица руками
Близость векторов часто меряют косинусной близостью: 1 — векторы смотрят в одну сторону (одно лицо), около 0 — разные. Покажем на маленьких векторах.
import math
def cos(a, b):
dot = sum(x * y for x, y in zip(a, b))
na = math.sqrt(sum(x * x for x in a))
nb = math.sqrt(sum(y * y for y in b))
return dot / (na * nb)
alice_1 = [0.9, 0.1, 0.4, 0.2] # фото Алисы
alice_2 = [0.8, 0.2, 0.5, 0.1] # другое фото Алисы
bob = [0.1, 0.9, 0.2, 0.8] # фото Боба
print("Алиса vs Алиса:", round(cos(alice_1, alice_2), 3))
print("Алиса vs Боб: ", round(cos(alice_1, bob), 3))
Вывод:
Алиса vs Алиса: 0.98 Алиса vs Боб: 0.34
Два фото Алисы дали близость 0.98 (почти 1 — один человек), Алиса и Боб — лишь 0.34. Поставив порог (например, 0.7), система решает: совпадение или нет. Настоящие эмбеддинги длиннее (128–512 чисел), но принцип ровно этот.
Верификация против идентификации
| Задача | Вопрос | Пример |
| Верификация (1:1) | это тот же человек? | разблокировка телефона лицом |
| Идентификация (1:N) | кто это из базы? | поиск по базе сотрудников |
Та же идея эмбеддингов работает шире лиц: поиск похожих картинок, дубликатов товаров, распознавание по отпечаткам — везде, где нужно «насколько эти два объекта похожи».
Итог
- Распознавание лиц — это сравнение эмбеддингов, а не классификация.
- Эмбеддинг — вектор-отпечаток: у одного человека близкие, у разных — далёкие.
- Близость меряют косинусной мерой; порог решает «совпадение или нет».
- Новый человек добавляется одним вектором — переобучение не нужно.