Мы живем в мире, где системы распознавания лиц (далее — CРЛ) используются практически везде: от валидации возраста и биометрической идентификации в режиме онлайн до наблюдения и проведения оплаты в реальном мире. Технологические аспекты таких алгоритмов развиваются на наших глазах: начиная с простых систем, основанных на базовых алгоритмах, мы перешли к системам, использующим алгоритмы машинного обучения, однако и их развитие еще далеко от завершения.
Задача распознавания лиц декомпозируется на несколько подзадач, решаемых разными системами. Среди таких подзадач:
На этом шаге алгоритм определяет, присутствует ли вообще человеческое лицо в представленных данных и где именно оно находится (исключаются все нерелевантные объекты). Эта задача может решаться с помощью алгоритмических подходов или нейронных сетей.
После обнаружения лица и выполнения предварительной обработки, включающей выравнивание лица и нормализацию параметров освещенности и контрастности, необходимо трансформировать лицо в математическое представление — в виде вектора признаков. Это второй этап. Такой вектор позволяет применять математические методы для сравнения лиц, определяя степень их сходства на основе расстояния между соответствующими векторами.
Современные подходы используют алгоритмы извлечения более широкого набора признаков (например, HOG, SIFT, SURF, OR, а также применяют сверточные нейронные сети, которые на основе данных обучаются выявлять признаки человеческого лица. Подробнее о работе сверточных сетей можно прочитать
Такие подходы позволяют не только обнаружить лицо, но и создать уникальное представление его признаков в числовой форме. Далее полученный вектор признаков может применяться в разнообразных сценариях, включая идентификацию личности путем сопоставления с базой данных аналогичных векторов или поиск и сравнение лиц. В контексте применения в области распознавания лиц такие задачи могут включать определение человека на фотографии, аутентификацию пользователя в системе.
Стоит отметить принципиальную разницу между FR-системой, работающей онлайн, куда можно загружать цифровые фотографии и работать с системой как с сервисом через интернет, и офлайн, когда мы сталкиваемся с некоторой FR-системой в реальном мире (например, с системой видеонаблюдения или оплаты проезда в метро с помощью технологии распознавания лица). В онлайн-системах мы имеем дело с цифровыми данными, что позволяет нам точно контролировать корректировку отдельных пикселей на изображении. Это делает такие системы относительно более стабильными и предсказуемыми в плане обработки данных.
В то же время в офлайн-системах, требующих физического взаимодействия, возникают такие специфические проблемы, как нелинейное искажение изображений, тепловой шум камеры и точность цветопередачи. Эти факторы усложняют проведение атак на такие системы. Кроме того, испытания этих систем представляют собой отдельный вызов. В отличие от онлайн-систем, где возможно выполнить тысячи запросов в режиме черного ящика и быстро получить обратную связь, аналогичные эксперименты с офлайн-системами потребовали бы значительно больше времени.
В этом исследовании мы рассматривали онлайн-системы распознавания лиц на примере сервисов поиска по лицам.
Большинство потенциальных атак на системы распознавания направлены в первую очередь на компонент обнаружения лиц. Их также принято называть атаками на уклонение. В этом контексте выделяют две основные категории ошибок:
Намеренное внесение определенной информации с целью воздействия на систему, обрабатывающую эту информацию, называется патчем (adversarial patch). Для онлайн-систем изменения, вносимые в изображения, могут быть невидимыми или почти незаметными, в то время как для атак на офлайн-системы необходимо значительно корректировать изображения, так как нужно преодолеть искажения, вносимые реальным миром.
Схожие категории применимы к атакам на системы распознавания людей и других объектов.
По схожему принципу строятся исследования по обходу систем распознавания лиц:
Примеры образцов, полученных исследователем
Это исследование демонстрирует возможности использования ошибки второго рода.
Фото исследователей без патча
Фото с патчем
Эти исследования покрывают самые популярные технологии распознавания лиц.
Сверточные нейронные сети обучаются выявлять определенные визуальные паттерны, если атакующий точно понимает, какие признаки ищет нейросеть, он может использовать это. С этой целью используются алгоритмы машинного обучения, например для генерации состязательных примеров (adversarial examples). В этом случае одна нейросеть пытается обмануть другую. Наконец, все атаки имеют конкретную цель. Метод, успешно применяемый против одной сети, не будет работать против другой.
Заметив эти закономерности, мы сформулировали вопрос: а можно ли использовать предложенные патчи для определения того, применяют ли сервисы по распознаванию лиц какие-либо из вышеперечисленных алгоритмов? И если нет, то можно ли такие патчи создать?
Если выясняется, что сервис использует определенные опенсорсные инструменты, то можно подготовить патчи для любого типа атаки, будь то уклонение (сеть вас не находит) или ошибочная классификация (вас классифицируют как другого человека), так как фактически у вас на руках появляется точное представление о той модели, которая используется, а зачастую даже сама модель.
Активационный патч — информационное возмущение (изображение), вызывающее срабатывание детектора, что помогает идентифицировать определенные алгоритмы, модели, системы методом черного ящика.
Результаты работы алгоритма обнаружения лиц
Фотография исследователя с патчем
Чтобы узнать, как работает этот алгоритм, можно прочитать
Успешное обнаружение HOG
Патч приводит к однозначной активации только одной системы и не приводит к активации других.
Проведем тесты во внешних системах.
Сразу видно, что эта работа вызывает много ошибок первого и второго рода: где-то галлюцинирующие лица определяются многими системами, где-то — ни одной. То же самое и с публичными сервисами.
Search4faces обнаружил лицо
«Глаз Бога» обнаружил лицо
PimEyes не обнаружил лиц
Заметим, что ни один алгоритм в нашей тестовой системе не обнаруживает лицо. Можно сделать предположение о том, что работают не патчи, а простое перекрытие черт лица, важных для обнаружения.
Пробуем проверить наблюдение, взяв патчи
Неоднозначные результаты
Видно, что простое перекрытие определенных зон уже приводит к тому, что все три детектора не могут верно определить область лица. Однако в том случае, когда изображение слишком маленькое, все детекторы обнаруживают лицо.
Проведем тестирование оригинальных фотографий с помощью сервисов.
Прямой проход (forward pass) — данные (в нашем случае изображение) подаются на входной слой сети, в скрытых слоях выполняются все математические расчеты, в конце выводится результат обработки данных — область, где обнаружено лицо.
Обратный проход (backward pass) — наличие функции потерь (MSE) позволяет оценить вклад каждого входного параметра в результат, полученный из модели, относительно определенного правила (функции потерь). Если быть более точным, то вычисляются градиенты функции потерь по отношению к весам слоев — от выходного к входному. Этот процесс использует цепное правило дифференцирования, позволяя вычислить влияние каждого веса на конечную ошибку.
После загрузки модели в PyTorch мы можем выполнять прямой и обратный проходы, а значит, можем быстро и очень точно, используя градиентный спуск, подобрать уникальный паттерн, который будет восприниматься моделью как лицо.
Референсное изображение и отклик модели
Нам нужно сгенерировать такое возмущение, которое давало бы похожий на лицо отклик.
Картинка с вопросом и отклик модели
Принцип создания патча для этой модели заключается в проведении через нее референсной фотографии, на которой есть лицо; в запоминании выхода (output); далее, используя функцию потерь (MSE) и градиентный спуск, из шума мы генерируем картинку, которая при прохождении через сеть создаст максимально похожий на настоящее лицо отклик, при этом визуально входные данные не будут являться лицом.
Схема атаки
Гифка создания картинки
График функции потерь
Обратите внимание, что остановить алгоритм лучше сразу же после первых срабатываний оригинальной модели: чем больше количество итераций оптимизации, тем выше вероятность срабатывания других моделей. Мы не очень заинтересованы в создании галлюцинирующих лиц, поэтому учтем эту особенность.
Применять такой алгоритм можно к любой модели и системе, в которой можно рассчитать градиент ошибки по вычислительному графу. Таким образом, под каждый детектор можно сделать патч, который позволит его обнаружить (при условии, что детектор может быть загружен во фреймворк глубокого обучения).
Технологий много, но мы ограничимся самыми популярными опенсорсными решениями для распознавания лиц.
Тестирование образцов на реальной фотографии
Тестирование при частичном перекрытии лица
Патч успешно привлекает к себе только модель, для которой и был изготовлен, другие же детекторы на него не реагируют. Эта особенность и отличает наш патч от галлюцинирующий лиц, на которые срабатывали все детекторы.
При определенном наложении патча можно скрывать основное лицо, как это было с HOG, но подобное использование требует модификации технологии, наша же задача — обнаружить.
Можно сделать вывод, что сервисы не используют модель
Система работает в три этапа, каждый из которых использует отдельную сверточную сеть, специализирующуюся на разных аспектах задачи:
Необходимо пошагово проследить, как проходит обработка фотографии внутри сети. Первое, что сделает сеть, — это построит пирамиду, где картинка будет преобразована в ряд картинок меньшего размера.
Это нужно для того, чтобы одна и та же сеть смогла найти как большие, так и маленькие лица на одной фотографии.
Фото взято
Далее эта группа из фотографий разного масштаба направляется в первую сеть — P-Net.
P-Net пройдется по всем фотографиям и выдаст зоны, где может находиться лицо. Если мы их визуализируем, то увидим следующее.
Название файла указывает на то, с каким масштабным коэффициентом было выполнено преобразование.
Возьмем референсную фотографию.
Карта активации P-Net будет следующая.
Сохраняем эти данные в отдельный файл, также сохраняем значение масштабных коэффициентов — все это потребуется при создании патча.
Нам пришлось немного пропатчить библиотеку для перехвата нескольких параметров.
Что нам пригодится:
Далее загрузим только одну сеть P-Net и напишем простую функцию оптимизации, целью которой будет генерация максимально похожего отклика на то, что нами уже было успешно перехвачено. Затем нужно будет создать картинку из случайного набора пикселей, которая в процессе оптимизации и станет патчем.
Напомним, что наша задача — сделать так, чтобы результат, который выдаст нейросеть и который она будет считать настоящим лицом, таковым не являлся.
Функция для обхода первой сети выглядит следующим образом.
Необходимо уменьшить изображение (патч) в соответствии с масштабными коэффициентами, которые были перехвачены во время пропуска референсного изображения лица через сеть. Далее нужно выполнить прямой проход в P-Net, а после — посчитать ошибку, которая состоит из среднеквадратичного отклонения между перехваченными ранее откликами и полученными в результате прямого прохода данными в контексте каждого конкретного масштаба. Затем необходимо выполнить обратный проход, посчитать градиенты и идти в противоположном направлении, уменьшая MSE (то есть делая выход сети максимально похожим на то, что было перехвачено ранее). Получили следующий патч.
Созданный патч
Теперь нужно посмотреть, насколько отклик нашего патча похож на оригинал. На рисунке представлено оригинальное лицо с обведенными зонами (которые называются кандидатами на лицо и впоследствии идут в R-Net).
Активации P-Net с использованием референсного лица
Активации P-Net созданным патчем
Данные очень похожи, что также можно видеть по уменьшению показателя функции потерь.
Теперь у нас есть патч, который вызывает отклик, будто на изображении присутствует оригинальное лицо, при этом его там нет. Выделяются первичные кандидаты на лица, обводятся зоны, которые будут переданы в R-Net для оценки того, насколько они похожи лица. Мы обошли первую сеть.
Необходимо понимать, что патч должен одномоментно учитывать особенности всех сетей, его изменение только для прохождения R-Net необратимо приведет к изменению отклика P-Net.
Стоит поговорить о других двух сетях.
Решение довольно простое: необходимо выполнить прямой проход референсного лица через все три сети и сохранить финальное решение MTCNN о том, где находится лицо (то есть финальный выход работы детектора).
Теперь используем только ту область при оптимизации, которая выделена на фотографии выше, потому что именно в этой зоне должно быть лицо (по результатам работы детектора). Используя градиентный спуск, необходимо объяснить это сперва R-Net, делая так, чтобы вероятность оценки в этой зоне была приближена к единице, и то же самое нужно сделать с O-Net.
Таким образом, чтобы создать патч, нужно выполнить несколько шагов:
Схема одной итерации оптимизации
График функции потерь
На графике виден loss по всем масштабным коэффициентам P-Net и ошибки O-Net и R-Net.
Получаем вот такой патч.
Патч для MTCNN
Активация P-Net с использованием патча
Сразу же выполняем тесты в нашей системе. Была использована имплементация MTCNN в PyTorch и TensorFlow.
Проверка патча в тестовой системе
К сожалению, патч не работает ни в одном публичном сервисе, который мы тестировали.
Отметим, что инференс этой
Тестирование патча, инференс на С++
Патч HOG
Патч для модели MMOD Dlib
Патч MTCNN
Фото Патчей.png — вот готовые патчи. Берите и используйте.
Больше вариантов —
Главный вопрос: если активационные патчи действительно работают, то почему мы не смогли обнаружить ни одну систему методом черного ящика? Ответ довольно очевиден: тестируемые нами сервисы не используют опенсорс, а именно конкретные имплементации моделей, которые были рассмотрены в этом исследовании.
Результаты могут заинтересовать:
Отказ от куки, несогласие с политикой обработки данных на сайтах, право на забвение — ряд этих механизмов, которые были введены ФЗ «О персональных данных» и GDPR, может дополнить и новый подход к разработке систем распознавания лиц.
Преимуществами такого стандарта были бы:
Этическая сторона поиска по лицам
Важно отметить, что вся информация, которую используют упоминаемые в статье сервисы, получена из открытых источников. Это те данные, к которым люди сами предоставили доступ. Сервисы не могут использовать данные, полученные из нелегальных источников (например, в результате сливов или утечек).Системы распознавания лиц
Задача распознавания лиц декомпозируется на несколько подзадач, решаемых разными системами. Среди таких подзадач:
- Обнаружение лиц (face detection).
- Нормализация лица (face alignment).
- Извлечение признаков (feature extraction).
- Нахождение записи со схожим набором признаков (face matching).
- Принятие финального решения (decision making).
На этом шаге алгоритм определяет, присутствует ли вообще человеческое лицо в представленных данных и где именно оно находится (исключаются все нерелевантные объекты). Эта задача может решаться с помощью алгоритмических подходов или нейронных сетей.
После обнаружения лица и выполнения предварительной обработки, включающей выравнивание лица и нормализацию параметров освещенности и контрастности, необходимо трансформировать лицо в математическое представление — в виде вектора признаков. Это второй этап. Такой вектор позволяет применять математические методы для сравнения лиц, определяя степень их сходства на основе расстояния между соответствующими векторами.
Современные подходы используют алгоритмы извлечения более широкого набора признаков (например, HOG, SIFT, SURF, OR, а также применяют сверточные нейронные сети, которые на основе данных обучаются выявлять признаки человеческого лица. Подробнее о работе сверточных сетей можно прочитать
Для просмотра ссылки необходимо нажать
Вход или Регистрация
.Такие подходы позволяют не только обнаружить лицо, но и создать уникальное представление его признаков в числовой форме. Далее полученный вектор признаков может применяться в разнообразных сценариях, включая идентификацию личности путем сопоставления с базой данных аналогичных векторов или поиск и сравнение лиц. В контексте применения в области распознавания лиц такие задачи могут включать определение человека на фотографии, аутентификацию пользователя в системе.
Стоит отметить принципиальную разницу между FR-системой, работающей онлайн, куда можно загружать цифровые фотографии и работать с системой как с сервисом через интернет, и офлайн, когда мы сталкиваемся с некоторой FR-системой в реальном мире (например, с системой видеонаблюдения или оплаты проезда в метро с помощью технологии распознавания лица). В онлайн-системах мы имеем дело с цифровыми данными, что позволяет нам точно контролировать корректировку отдельных пикселей на изображении. Это делает такие системы относительно более стабильными и предсказуемыми в плане обработки данных.
В то же время в офлайн-системах, требующих физического взаимодействия, возникают такие специфические проблемы, как нелинейное искажение изображений, тепловой шум камеры и точность цветопередачи. Эти факторы усложняют проведение атак на такие системы. Кроме того, испытания этих систем представляют собой отдельный вызов. В отличие от онлайн-систем, где возможно выполнить тысячи запросов в режиме черного ящика и быстро получить обратную связь, аналогичные эксперименты с офлайн-системами потребовали бы значительно больше времени.
В этом исследовании мы рассматривали онлайн-системы распознавания лиц на примере сервисов поиска по лицам.
Обзор сервисов поиска информации о людях по изображениям
Платформа «Глаз Бога»
Особенностью сервиса является взаимодействие через телеграм-бота, а для поиска по лицам требуется подписка. Сервис имеет много сценариев поиска публичной информации о людях, в частности нас интересует возможность поиска информации о человеке по его лицу.Сервис PimEyes
Этот сервис поиска по лицам требует подписки для доступа к полной информации, однако данные о том, что сервис смог найти ваши фотографии, можно получить бесплатно.Сервис Search4faces
Большая часть доступных данных взята из социальной сети «ВКонтакте». Простой и прозрачный инструмент для поиска по лицам из открытых источников.Обзор возможных атак на системы распознавания лиц
Большинство потенциальных атак на системы распознавания направлены в первую очередь на компонент обнаружения лиц. Их также принято называть атаками на уклонение. В этом контексте выделяют две основные категории ошибок:
- ошибка первого рода происходит, когда, несмотря на предъявление фотографии с лицом, системе не удается распознать его на изображении;
- ошибка второго рода возникает, когда система ошибочно классифицирует какое-либо изображение как лицо, не являющееся таковым.
Намеренное внесение определенной информации с целью воздействия на систему, обрабатывающую эту информацию, называется патчем (adversarial patch). Для онлайн-систем изменения, вносимые в изображения, могут быть невидимыми или почти незаметными, в то время как для атак на офлайн-системы необходимо значительно корректировать изображения, так как нужно преодолеть искажения, вносимые реальным миром.
Схожие категории применимы к атакам на системы распознавания людей и других объектов.
- Патч для обмана сети
Для просмотра ссылки необходимо нажать Вход или Регистрация.
- Патч для обмана детектора
Для просмотра ссылки необходимо нажать Вход или Регистрация.
- Другой патч для обмана детектора
Для просмотра ссылки необходимо нажать Вход или Регистрация.
По схожему принципу строятся исследования по обходу систем распознавания лиц:
-
Для просмотра ссылки необходимо нажать Вход или Регистрация.
Исследователи создали патч, который влияет на алгоритм HOG, заставляя его ошибочно распознавать патч как лицо и не распознавать само лицо за патчем.
-
Для просмотра ссылки необходимо нажать Вход или Регистрация.
В этом случае исследователь использовал открытый детектор лиц Dlib — mmod_human_face_detector.dat. Он трансформировал сеть из проприетарного формата Dlib в формат, совместимый с PyTorch. Затем был выбран слой сети, максимизация активации которого представляла интерес. Используя центральный пиксель выхода фильтра как функцию потерь, исследователь вычислял градиенты и модифицировал изображение, вводя случайные вращения и повороты. Этот подход позволил создать изображения, максимально активирующие определенные слои сети.
Примеры образцов, полученных исследователем
Это исследование демонстрирует возможности использования ошибки второго рода.
-
Для просмотра ссылки необходимо нажать Вход или Регистрацияисследователей из «Сколково», которые создали патчи, способные обходить алгоритмы детектирования лиц, использующие сеть MTCNN.
Фото исследователей без патча
Фото с патчем
Эти исследования покрывают самые популярные технологии распознавания лиц.
Обнаруженные закономерности
Большую часть рассматриваемых нами атак можно осуществить по принципу белого ящика — когда атакующему доступна полная информация о системе. В реальном же мире практически все системы представляют собой черный ящик. Без наличия исходного кода и обратной связи сложность атак существенно возрастает.Сверточные нейронные сети обучаются выявлять определенные визуальные паттерны, если атакующий точно понимает, какие признаки ищет нейросеть, он может использовать это. С этой целью используются алгоритмы машинного обучения, например для генерации состязательных примеров (adversarial examples). В этом случае одна нейросеть пытается обмануть другую. Наконец, все атаки имеют конкретную цель. Метод, успешно применяемый против одной сети, не будет работать против другой.
Заметив эти закономерности, мы сформулировали вопрос: а можно ли использовать предложенные патчи для определения того, применяют ли сервисы по распознаванию лиц какие-либо из вышеперечисленных алгоритмов? И если нет, то можно ли такие патчи создать?
Активационные патчи
Напомним, что в контексте тестирования FR-систем бывает довольно сложно быстро получить доступ к внутреннему алгоритму, который производит обработку входящих данных пользователя (если это вообще предусмотрено сервисом). Если система активна и доступна, то можно провести несколько экспериментов и быстро получить ответ от целевой системы. Было бы удобно, если бы у нас был инструмент, который позволил бы быстро просканировать систему на предмет использования популярных алгоритмов и примерно локализовал бы технологический стек. Например, прогоняя некоторый набор картинок через сервис или устройство и получая его реакцию, можно было бы достоверно определить, какой алгоритм используется для обнаружения лиц или экстракции признаков.Если выясняется, что сервис использует определенные опенсорсные инструменты, то можно подготовить патчи для любого типа атаки, будь то уклонение (сеть вас не находит) или ошибочная классификация (вас классифицируют как другого человека), так как фактически у вас на руках появляется точное представление о той модели, которая используется, а зачастую даже сама модель.
Активационный патч — информационное возмущение (изображение), вызывающее срабатывание детектора, что помогает идентифицировать определенные алгоритмы, модели, системы методом черного ящика.
Создание тестовой системы обнаружения лиц
Перед тем как мы продолжим, необходимо собрать свой конвейер (pipeline) для проверки и валидации гипотез. Принцип его работы достаточно прост: мы загружаем необходимые алгоритмы распознавания лиц и последовательно проверяем нужные нам фотографии, пытаясь обнаружить на них лицо, и выделяем границы вокруг лица, если оно было обнаружено:- dlib.get_frontal_face_detector() — HOG;
- pytorch_mtcnn(keep_all=True, device="cpu");
- tensorflow_MTCNN();
- dlib.cnn_face_detection_model_v1("mmod_human_face_detector.dat").
Результаты работы алгоритма обнаружения лиц
Используем существующие подходы для решения задачи
- Исследование Dlib HOG для создания активационного патча
Фотография исследователя с патчем
Чтобы узнать, как работает этот алгоритм, можно прочитать
Для просмотра ссылки необходимо нажать
Вход или Регистрация
. Нам важно понять, используется ли HOG в описанных сервисах. Для этого можно взять визуализированный дескриптор лица из статьи и проверить его в нашем pipeline и в доступных сервисах.Успешное обнаружение HOG
Патч приводит к однозначной активации только одной системы и не приводит к активации других.
Проведем тесты во внешних системах.
Сервис | Результат проверки |
«Глаз Бога» | False |
Search4faces | False |
PimEyes | False |
- Исследование Dlib CNN для создания активационного патча
Сразу видно, что эта работа вызывает много ошибок первого и второго рода: где-то галлюцинирующие лица определяются многими системами, где-то — ни одной. То же самое и с публичными сервисами.
Search4faces обнаружил лицо
«Глаз Бога» обнаружил лицо
PimEyes не обнаружил лиц
Сервис | Результат проверки |
«Глаз Бога» | True |
Search4faces | True |
PimEyes | False |
- Исследование MTCNN для создания активационного патча
Для просмотра ссылки необходимо нажать
Вход или Регистрация
исследователей и проведем их через наш pipeline обнаружения лиц.Заметим, что ни один алгоритм в нашей тестовой системе не обнаруживает лицо. Можно сделать предположение о том, что работают не патчи, а простое перекрытие черт лица, важных для обнаружения.
Пробуем проверить наблюдение, взяв патчи
Для просмотра ссылки необходимо нажать
Вход или Регистрация
.Неоднозначные результаты
Видно, что простое перекрытие определенных зон уже приводит к тому, что все три детектора не могут верно определить область лица. Однако в том случае, когда изображение слишком маленькое, все детекторы обнаруживают лицо.
Проведем тестирование оригинальных фотографий с помощью сервисов.
Сервис | Результат проверки |
«Глаз Бога» | False |
Search4faces | False |
PimEyes | True |
Рефлексия
Эксперименты с использованием готовых работ показали, что:- Несмотря на то что патчи создаются для активации или обхода конкретных систем, они не всегда позволяют выделить эти системы в ряду других. Например, галлюцинирующие лица могут определяться «Глазом Бога» и Search4faces на основании того, что изображения действительно очень похожи на лица. В то же время патчи для MTCNN позволяют обходить обнаружение во множестве сервисов из-за того, что они перекрывают половину лица.
- Не совсем корректно называть все патчи активационными. Патч для MTCNN, несмотря на то что его можно использовать для идентификации MTCNN, не активирует детектор, а подавляет его активацию.
Создаем активационные патчи
Создание активационного патча для Dlib MMOD CNN
Наша задача — создать изображение, которое приведет к активации детектора Dlib. Он имеет широкое распространение, в частности используется фреймворком
Для просмотра ссылки необходимо нажать
Вход или Регистрация
Шаг № 1. Загрузка модели
Для начала нам нужна возможность выполнять математические операции с моделью. У Dlib есть свой формат хранения моделей, но также есть возможность (благодаря
Для просмотра ссылки необходимо нажать
Вход или Регистрация
) загрузить модель в PyTorch и выполнять с ней любые действия, в частности применять прямой и обратный проход. Прямой проход (forward pass) — данные (в нашем случае изображение) подаются на входной слой сети, в скрытых слоях выполняются все математические расчеты, в конце выводится результат обработки данных — область, где обнаружено лицо.
Обратный проход (backward pass) — наличие функции потерь (MSE) позволяет оценить вклад каждого входного параметра в результат, полученный из модели, относительно определенного правила (функции потерь). Если быть более точным, то вычисляются градиенты функции потерь по отношению к весам слоев — от выходного к входному. Этот процесс использует цепное правило дифференцирования, позволяя вычислить влияние каждого веса на конечную ошибку.
После загрузки модели в PyTorch мы можем выполнять прямой и обратный проходы, а значит, можем быстро и очень точно, используя градиентный спуск, подобрать уникальный паттерн, который будет восприниматься моделью как лицо.
Шаг № 2. Алгоритм создания патча
У нас есть сеть, и мы бы хотели создать уникальный узор, который будет определяться детектором как лицо, но при этом им являться не будет. Возьмем референсную картинку и выполним прямой проход через модель, запомним выход и визуализируем его.Референсное изображение и отклик модели
Нам нужно сгенерировать такое возмущение, которое давало бы похожий на лицо отклик.
Картинка с вопросом и отклик модели
Принцип создания патча для этой модели заключается в проведении через нее референсной фотографии, на которой есть лицо; в запоминании выхода (output); далее, используя функцию потерь (MSE) и градиентный спуск, из шума мы генерируем картинку, которая при прохождении через сеть создаст максимально похожий на настоящее лицо отклик, при этом визуально входные данные не будут являться лицом.
Схема атаки
Гифка создания картинки
График функции потерь
Обратите внимание, что остановить алгоритм лучше сразу же после первых срабатываний оригинальной модели: чем больше количество итераций оптимизации, тем выше вероятность срабатывания других моделей. Мы не очень заинтересованы в создании галлюцинирующих лиц, поэтому учтем эту особенность.
Применять такой алгоритм можно к любой модели и системе, в которой можно рассчитать градиент ошибки по вычислительному графу. Таким образом, под каждый детектор можно сделать патч, который позволит его обнаружить (при условии, что детектор может быть загружен во фреймворк глубокого обучения).
Технологий много, но мы ограничимся самыми популярными опенсорсными решениями для распознавания лиц.
Шаг № 3. Тесты
Проверим работоспособность патча на реальной модели без преобразования в среде PyTorch. Для этого проведем проверку в нашем pipeline.Тестирование образцов на реальной фотографии
Тестирование при частичном перекрытии лица
Патч успешно привлекает к себе только модель, для которой и был изготовлен, другие же детекторы на него не реагируют. Эта особенность и отличает наш патч от галлюцинирующий лиц, на которые срабатывали все детекторы.
При определенном наложении патча можно скрывать основное лицо, как это было с HOG, но подобное использование требует модификации технологии, наша же задача — обнаружить.
Сервис | Результат проверки |
«Глаз Бога» | False |
Search4faces | False |
PimEyes | False |
Для просмотра ссылки необходимо нажать
Вход или Регистрация
для обнаружения лиц. Патчи работают для конкретной модели, если переобучить ее с нуля, результат будет другим.Создание активационного патча для MTCNN
MTCNN, или multi-task cascaded convolutional networks, — это метод для обнаружения лиц, который использует каскад сверточных нейронных сетей для последовательного выполнения нескольких задач.Система работает в три этапа, каждый из которых использует отдельную сверточную сеть, специализирующуюся на разных аспектах задачи:
- P-Net (proposal network) — первая сеть, отвечающая за предложение кандидатов на лица в изображении, выполняющая быстрый поиск по всему изображению и создающая квадратные области, которые могут содержать лица.
- R-Net (refinement network) — вторая сеть, которая уточняет предложения, отсеивая большинство ложных срабатываний и уточняя позиционирование лиц на изображении для последующей точной обработки.
- O-Net (output network) — третья сеть, которая выполняет окончательное уточнение позиций обнаруженных лиц и одновременно работает над распознаванием ключевых точек лица (глаз, носа, рта).
Создание патча для P-Net
MTCNN имеет более сложную структуру, поэтому нужно погрузиться во внутреннее устройство сети для проведения атаки. Уже не получится просто запомнить выходы и повторить их. Для нашего эксперимента возьмем самую распространенную реализацию MTCNN на PyTorch — from facenet_pytorch import MTCNN.Необходимо пошагово проследить, как проходит обработка фотографии внутри сети. Первое, что сделает сеть, — это построит пирамиду, где картинка будет преобразована в ряд картинок меньшего размера.
Это нужно для того, чтобы одна и та же сеть смогла найти как большие, так и маленькие лица на одной фотографии.
Фото взято
Для просмотра ссылки необходимо нажать
Вход или Регистрация
Далее эта группа из фотографий разного масштаба направляется в первую сеть — P-Net.
P-Net пройдется по всем фотографиям и выдаст зоны, где может находиться лицо. Если мы их визуализируем, то увидим следующее.
Название файла указывает на то, с каким масштабным коэффициентом было выполнено преобразование.
Возьмем референсную фотографию.
Карта активации P-Net будет следующая.
Сохраняем эти данные в отдельный файл, также сохраняем значение масштабных коэффициентов — все это потребуется при создании патча.
Нам пришлось немного пропатчить библиотеку для перехвата нескольких параметров.
Что нам пригодится:
- Выходы P-Net.
- Значения масштабных коэффициентов.
- Финальная область обнаруженного лица.
- Ключевые точки обнаруженного лица (keypoints).
Далее загрузим только одну сеть P-Net и напишем простую функцию оптимизации, целью которой будет генерация максимально похожего отклика на то, что нами уже было успешно перехвачено. Затем нужно будет создать картинку из случайного набора пикселей, которая в процессе оптимизации и станет патчем.
Напомним, что наша задача — сделать так, чтобы результат, который выдаст нейросеть и который она будет считать настоящим лицом, таковым не являлся.
Функция для обхода первой сети выглядит следующим образом.
Python:
#P net optimization step
for count, scale in enumerate(scales):
input_resampled = imresample(input, (int(N * scale + 1), int(N * scale + 1)))
reg, probs = mtcnn.pnet(input_resampled)
iter_pnet_loss = loss_pnet(probs[:, 1], outputs_model[count][:, 1])
history_loss_pnet[count].append(float(iter_pnet_loss))
pbar.set_description(f"Loss {scale} - {history_loss_pnet[-1]}")
iter_pnet_loss.backward()
# Gradient normalization
grad_cpu = input.grad
grad_cpu = grad_cpu / torch.norm(grad_cpu, 2)
lr = 2
input = input.clone().detach() - lr * grad_cpu
input.requires_grad = True
Созданный патч
Теперь нужно посмотреть, насколько отклик нашего патча похож на оригинал. На рисунке представлено оригинальное лицо с обведенными зонами (которые называются кандидатами на лицо и впоследствии идут в R-Net).
Активации P-Net с использованием референсного лица
Активации P-Net созданным патчем
Данные очень похожи, что также можно видеть по уменьшению показателя функции потерь.
Теперь у нас есть патч, который вызывает отклик, будто на изображении присутствует оригинальное лицо, при этом его там нет. Выделяются первичные кандидаты на лица, обводятся зоны, которые будут переданы в R-Net для оценки того, насколько они похожи лица. Мы обошли первую сеть.
Необходимо понимать, что патч должен одномоментно учитывать особенности всех сетей, его изменение только для прохождения R-Net необратимо приведет к изменению отклика P-Net.
Стоит поговорить о других двух сетях.
R-Net, O-Net
R-Net занимается только оценкой выбранных кандидатов (фотографий, полученных после P-Net). Происходит проверка того, насколько в этой зоне действительно находится лицо. Сперва был выбран подход, согласно которому нужно было оптимизировать каждого кандидата. То есть в каждой области через градиентный спуск необходимо было максимизировать уверенность сети в каждом кандидате, но это, конечно, меняет картинку, и P-Net уже не выберет на следующем этапе оптимизации эту зону как кандидата на лицо. Что же делать?Решение довольно простое: необходимо выполнить прямой проход референсного лица через все три сети и сохранить финальное решение MTCNN о том, где находится лицо (то есть финальный выход работы детектора).
Теперь используем только ту область при оптимизации, которая выделена на фотографии выше, потому что именно в этой зоне должно быть лицо (по результатам работы детектора). Используя градиентный спуск, необходимо объяснить это сперва R-Net, делая так, чтобы вероятность оценки в этой зоне была приближена к единице, и то же самое нужно сделать с O-Net.
Таким образом, чтобы создать патч, нужно выполнить несколько шагов:
- Инициализировать случайное изображение, которое будет изменяться в ходе оптимизации.
- Пропустить изображение через сеть P-Net со всеми изменениями размеров (forward pass).
- Посчитать MSE loss относительно перехваченных заранее откликов от референсного изображения.
- Повысить уверенность R-Net в том, что в определенной области точно присутствует лицо, минимизируя MSE между выходом сети и единицей (так как единица — максимальная уверенность), рассчитывая градиенты относительно этой ошибки, и внести изменение в изображение.
- Сделать то же самое с O-Net.
Схема одной итерации оптимизации
График функции потерь
На графике виден loss по всем масштабным коэффициентам P-Net и ошибки O-Net и R-Net.
Получаем вот такой патч.
Патч для MTCNN
Активация P-Net с использованием патча
Сразу же выполняем тесты в нашей системе. Была использована имплементация MTCNN в PyTorch и TensorFlow.
Проверка патча в тестовой системе
К сожалению, патч не работает ни в одном публичном сервисе, который мы тестировали.
Сервис | Результат проверки |
«Глаз Бога» | False |
Search4faces | False |
PimEyes | False |
Для просмотра ссылки необходимо нажать
Вход или Регистрация
тоже срабатывает на этот патч, это может означать, что там используется та же модель, под которую мы готовили патч, только преобразованная и загруженная абсолютно другой вычислительной средой.Тестирование патча, инференс на С++
Заключение
Мы разработали метод, позволяющий идентифицировать алгоритмы машинного обучения, используемые в системах распознавания лиц, даже если эти системы являются черным ящиком. Наш подход основан на создании активационных патчей, которые, взаимодействуя с системой, позволяют определить по их реакции используемые технологии. Мы изготовили патчи для популярных алгоритмов обнаружения лиц, и эти патчи могут быть применены в исследовательских и практических целях.Патч HOG
Патч для модели MMOD Dlib
Патч MTCNN
Фото Патчей.png — вот готовые патчи. Берите и используйте.
Больше вариантов —
Для просмотра ссылки необходимо нажать
Вход или Регистрация
.Главный вопрос: если активационные патчи действительно работают, то почему мы не смогли обнаружить ни одну систему методом черного ящика? Ответ довольно очевиден: тестируемые нами сервисы не используют опенсорс, а именно конкретные имплементации моделей, которые были рассмотрены в этом исследовании.
Результаты могут заинтересовать:
- Исследователей, белых хакеров.
- Разработчиков.
- Наложение случайного шума на изображение. Гипотеза заключалась в том, что наложение случайного шума должно нарушить обнаружение лица на активационном патче, но не нарушит на обычном лице. Но при добавлении 5% гауссового шума патчи для MTCNN сохраняли свою работоспособность.
- Обучение модели с нуля. Вероятно, обучение модели с весами, отличными от представленных в опенсорсе, позволяет достичь того же эффекта — сгенерированные для оригинальной модели активационные патчи перестают работать.
- Простых пользователей.
- Активистов гражданских свобод, проповедников анонимности.
Отказ от куки, несогласие с политикой обработки данных на сайтах, право на забвение — ряд этих механизмов, которые были введены ФЗ «О персональных данных» и GDPR, может дополнить и новый подход к разработке систем распознавания лиц.
Преимуществами такого стандарта были бы:
- Независимость от основной системы распознавания лиц.
- Уважение к личной конфиденциальности.
- Простота реализации и обновления.
- Соответствие этическим стандартам.
- С помощью патча можно проверить, следует ли определенный сервис стандартам этичного ML.
Для просмотра ссылки необходимо нажать
Вход или Регистрация