Разборы, кейсы и практика для инженеров и продактов. Как строить AI-продукты и не терять на этом деньги.

SOTA-модель с ошибкой 3% отказывала каждому третьему живому человеку

Мы взяли лучшую на тот момент модель антиспуфинга. На своём датасете она показывала среднюю ошибку около 3%: 4% пропущенных атак, 2% ложных отказов живым людям. Отличный результат.

На наших данных она отказала 35% реальных клиентов.

Все атаки при этом отловила — ни одной не пропустила. Просто вместе с ними не пустила каждого третьего человека, который пришёл за услугой.

Антиспуфинг SOTA

Это, пожалуй, главное, что я вынес из того проекта. Ниже — как мы разбирались с задачей, когда я занимался компьютерным зрением в Beeline Казахстан.

Что такое антиспуфинг и где он уже стоит

Антиспуфинг отличает живого человека перед камерой от попытки обмануть систему распознавания лиц.

Эта штука давно не экзотика. Разблокировка телефона лицом, получение госуслуг, финтех-сервисы, удалённый перевыпуск банковской карты или сим-карты — везде, где обслуживание ушло в удалённый канал, стоит биометрия по лицу. А значит, кто-то обязательно попробует её обойти.

Атаки идут по нарастанию сложности:

  • распечатанное фото
  • видео, снятое с экрана телефона или ноутбука
  • маска — от распечатанного фото с прорезями для глаз и рта до резиновой
  • 3D-реконструкция по одной 2D-фотографии: моргает, двигает мимикой, выглядит живой
  • дипфейк: лицо одного человека подменено другим, отличить на глаз почти невозможно

До нейросетей с этим боролись довольно примитивно: ловили моргание и микродвижения уголков губ, искали муар — те самые артефакты, которые появляются, когда к камере подносят распечатанную фотографию. Из более технического — LBP и LBP-TOP: извлекаем гистограммы из лица целиком или разбиваем лицо на девять блоков, берём гистограмму с каждого, склеиваем и скармливаем классификатору. Плюс гистограммы оптического потока.

Работает, пока атака простая.

Про метрики, и почему среднюю считать опасно

Тут нужно договориться о терминах, потому что дальше всё упирается в них.

Presentation attack — попытка выдать себя за другого через атаку. Bona fide — нормальное поведение живого человека.Отсюда три метрики:

  • APCER — доля атак, которые мы пропустили
  • BPCER — доля живых людей, которым мы отказали
  • ACER — среднее между ними

ACER удобен как единое число, и именно поэтому он опасен. Эти две ошибки стоят по-разному, и цена зависит от задачи.

Если у вас массовый поток — тысячи людей в день проходят верификацию, — высокий BPCER убивает сервис. Люди просто не могут получить услугу, пишут в поддержку и уходят. Одна пропущенная атака на этом фоне обычно дешевле, чем сотня непропущенных реальных клиентов.

А если это проход в зону ограниченного доступа, картина переворачивается: APCER должен быть близок к нулю, и ради этого можно терпеть, что кому-то придётся приложить пропуск второй раз.

Метрики спуфинга

Одинаковый ACER может означать две совершенно разные модели. Какую из ошибок прижимать — решает бизнес-задача, а не лидерборд.

Почему SOTA не поехал

Самый крупный открытый датасет на тот момент — CelebA-Spoof: больше 10 тысяч людей, больше 600 тысяч изображений, разнообразные атаки и устройства съёмки.

Его особенность — богатая разметка: 40 аннотаций. Не только спуф или не спуф, но ещё 39 критериев: возраст, цвет волос, улыбка, цвет кожи и так далее. SOTA-решение под него — CNN с сорока головами, которая классифицирует всё это разом, плюс использует геометрические признаки.

Две проблемы вылезли сразу.

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

Вторая, которая и дала те самые 35%: генерализация. Модель, обученная на академическом датасете, на реальных данных рассыпается. У нас был свой валидационный набор из продакшена — именно на нём мы меряли всё, что собирались запускать. На нём SOTA дала ACER 17% при BPCER 35%.

Это не претензия к авторам. Это свойство задачи: условия съёмки в продакшене не похожи ни на один академический датасет.

Domain shift, который ломает всё

Отдельная версия той же проблемы.

Допустим, вы обучили модель на данных с телефонов клиентов. Теперь вы хотите поставить её в банкоматы или сим-коматы. Там другая камера, другое качество картинки и совсем другое освещение: банкоматы стоят в отделениях и торговых центрах, где свет стабилен и неудачен одновременно, а телефон человек держит где угодно.

Модель, обученная на мобильных данных, на данных банкомата работает заметно хуже. Это не вопрос дообучения на паре тысяч картинок — это разные домены.

Как устроен сервис

Прежде чем про модель, стоит сказать, что она — не весь пайплайн.

На вход идёт видеопоток: человека просят приблизить и отдалить лицо. Анализировать все кадры дорого и долго, поэтому сначала работает отбор лучших кадров. Критерии простые и жёсткие: нет размытия, нет засветов, кадр не слишком тёмный, лицо занимает не меньше 40% кадра.

Дальше детектор находит лицо и его ключевые точки — глаза, губы, нос. Лицо вырезается и уходит в модель. Модель отдаёт вердикт.

Значительная часть качества делается до модели, на отборе кадров. Это тот случай, когда улучшение препроцессинга даёт больше, чем очередная архитектура.

Что в итоге сработало

Два входа вместо одного. Обычно в модель подают только кроп лица. Мы решили подавать и кроп, и кадр целиком.

Логика простая: признаки атаки часто находятся за пределами лица. Границы распечатанного листа. Пальцы, которые держат телефон. Рамка экрана. Когда вы обрезаете изображение по лицу, вы выбрасываете ровно те пиксели, которые выдают подделку.

Кастомная CNN с двумя входами

Кастомная CNN с двумя входами дала ACER 5,7% — и заодно подтянула результаты на академических датасетах.

Жёсткая регуляризация. Модели переобучались очень быстро, поэтому дропаут мы поставили агрессивный — 0,5 и 0,25 на разных слоях. Плюс Cutout, который вырезает из изображения случайный прямоугольник, и GridMask — сетка из вырезанных квадратов.

Аугментация по ключевым точкам. Идею мы позаимствовали у Селима Сефербекова, победителя Deepfake Detection Challenge на Kaggle. Раз у нас уже есть лендмарки лица, мы знаем, где именно глаза, нос и рот. Значит, можно занулять эти области — случайным образом, по отдельности или вместе.

аугментации для антиспуффинга

Это дало самый заметный прирост из всего, что мы пробовали. Модель перестаёт цепляться за одну область и вынуждена искать признаки по всему изображению.

Итог: лучшая модель с ACER 4,4%, причём с паритетом между двумя ошибками. Для массового потока это важнее, чем красивое среднее: продакшен-модель до этого давала 6% отказов живым людям, и каждый такой отказ — это человек, который не получил услугу.

Что из этого вышло в бизнесе

Проект мы делали вместе с Verigram — казахстанской командой, которая занимается биометрией и распознаванием лиц.

На момент доклада полный продакшен на сервисах Beeline ещё не был запущен, но партнёр поделился своими цифрами: 16 клиентов и больше 200 тысяч обработанных транзакций за полгода. Путь от тестирования до нагруженного продакшена занял примерно этот срок.

Что осталось нерешённым

Честный список на момент доклада:

  • высокий процент отказов на некоторых камерах — старые смартфоны, дешёвые ноутбучные веб-камеры
  • плохое освещение по-прежнему ломает модель
  • модель большая, хочется компактнее и быстрее без потери качества

Ни одна из этих проблем не решается лучшей архитектурой. Все три — про то, что реальный мир разнообразнее любого датасета.

Что бы я сказал себе в начале проекта

Свой валидационный набор из продакшена важнее любого лидерборда. Без него мы бы запустили SOTA-модель и узнали про 35% отказов от поддержки, а не от таблицы.

Среднюю метрику нельзя оптимизировать вслепую. Сначала решите, какая из двух ошибок дороже в вашей задаче, потом смотрите на числа.

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

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


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

Форматы и актуальные цены: https://consultation.alimbekov.com/

Share it
Ренат Алимбеков
Ренат Алимбеков — ML-инженер и консультант, 18 лет в IT. Провожу ML/Data Science консультации и менторинг по Data Science — онлайн и очно в Алматы.
Понравилась заметка? Подписывайтесь на телеграм — @renat_alimbekov.

Интересные записи в этой рубрике: