Хабрахабр

Как мы боремся с копированием контента, или первая adversarial attack в проде

Привет.

Они делают это так: обзванивают продавцов и предлагают им разместиться на своей платформе. Вы знали, что платформы для размещения объявлений часто копируют контент у конкурентов, чтобы увеличить количество объявлений у себя? Авито — популярная площадка, и мы часто сталкиваемся с такой недобросовестной конкуренцией. А иногда и вовсе копируют объявления без разрешения пользователей. О том, как мы боремся с этим явлением, читайте под катом.

В этой статье речь пойдет только про автомобили. Копирование контента с Авито на другие платформы существует в нескольких категориях товаров и услуг. В предыдущем посте я рассказал, о том как мы делали автоматическое скрытие номера на автомобилях.

Но получилось (судя по поисковой выдаче других платформ), что мы запустили эту фичу сразу на трёх сайтах объявлений.

Например, вот так выглядела их поисковая выдача за сутки в Чеченской республике. Один из этих сайтов после запуска фичи на время приостановил обзвон наших пользователей с предложениями скопировать объявление на их платформу: контента с логотипом Авито на их площадке стало слишком много, только за ноябрь 2018 года — более 70 000 объявлений.

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

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

Это нарушение законов «О рекламе» и «О персональных данных», правил Авито, прав на товарные знаки и базу данных объявлений. Надо сказать, что запрос согласия людей на копирование объявлений не оправдывает подобные действия.

Мирно договориться с конкурентом нам не удалось, а оставлять ситуацию как есть мы не хотели.

Похожие прецеденты уже были в других странах. Первый способ — юридический. Мы можем затруднить процесс копирования нашего контента. Например, известный американский классифайд Craigslist отсудил крупные суммы денег у копирующих с него контент сайтов.
Второй способ решения проблемы копирования — добавление большой вотермарки на изображение так, чтобы её нельзя было обрезать.
Третий способ — технологический. Также известно, что многие модели подвержены «атакам», которые мешают им работать корректно. Логично предположить, что скрытием логотипа Авито у конкурентов занимается какая-то модель. В этой статье речь пойдёт как раз про них.

В итоге картинка, например, с пандой, с высокой уверенностью классифицируется как гиббон. В идеале adversarial example для сети выглядит как шум, неразличимый человеческим глазом, но для классификатора он добавляет достаточный сигнал отсутствующего на картинке класса. Интересный пример — недавняя работа от Keen Labs: они обманули автопилот Tesla точками на асфальте и детектор дождя с помощью отображения как раз такого adversarial шума. Создание adversarial шума возможно не только для сетей классификации картинок, но также для сегментации, детекции. Также атаки есть для других доменов, например, звука: известная атака на Amazon Alexa и другие голосовые ассистенты заключалась в проигрывании неразличимых человеческим ухом команд (взломщики предлагали купить что-то на Amazon).

Обычно в методе обратного распространения ошибки с помощью вычисляемого градиента целевой функции изменяются только веса слоёв сети, чтобы она меньше ошибалась на обучающем датасете. Создание adversarial шума для моделей, анализирующих картинки, возможно благодаря нестандартному использованию градиента, необходимого для обучения модели. Изменение входного изображения с помощью градиента применялось для разных известных алгоритмов. Так же, как для слоёв сети, можно вычислить градиент целевой функции по входному изображению и изменить его. Помните Deepdream?

Почему в примере именно собаки? Если мы итеративно вычислим градиент целевой функции по входному изображению и добавим этот градиент к нему, в изображении появится больше информации о превалирующем классе из ImageNet: появляется больше мордочек собак, благодаря чему уменьшится значение лосс функции и модель становится уверенней в классе «собака». Схожий подход к изменению изображения использовался в алгоритме Style Transfer, известном в основном благодаря приложению Prisma.
Для создания adversarial example тоже можно использовать итеративный метод изменения входного изображения. Просто в ImageNet из 1000 классов — 120 классов собак.

‘y’ — класс, который представлен на изображении, чтобы уменьшить уверенность сети в правильном ответе. У этого метода существует несколько модификаций, но основная идея проста: исходное изображение итеративно сдвигается в направлении градиента лосс функции классификатора J (потому что используется только знак — sign) с шагом α. Можно подобрать оптимальный шаг и количество итераций, чтобы изменение входного изображения было неотличимо от обычного для человека. Такая атака называется non targeted. 5-10 итераций для одной картинки в проде — это долго.
Альтернативой итеративным методам является метод FGSM. Но с точки зрения временных затрат такая атака нам не подходит.

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

Начать мы решили с взлома нашей собственной модели.
Так выглядит картинка, которая уменьшает вероятность нахождения номерного знака для нашей модели.

Также этот метод non targeted, но его можно изменить, чтобы сделать направленную атаку. Видно что у этого метода есть недостаток: изменения, которые он добавляет в картинку, заметны глазу. Это метод T-FGSM. Тогда модель будет предсказывать место для номерного знака в другом месте.

Для того, чтобы этим методом сломать нашу модель, нужно уже чуть заметнее изменить входное изображение.

Также мы пробовали готовые библиотеки для взлома сетей Foolbox, CleverHans и ART-IBM, но с их помощью не получилось сломать нашу сеть для детекции. Пока нельзя сказать, что результаты идеальны, но хотя бы проверена работоспособность методов. Это общая тенденция во взломе сетей: для object detection сделать атаку сложнее, особенно если речь идёт о сложных моделях, например, Mask RCNN. Методы, приведенные там, подходят для классификационных сетей лучше.

Всё, что пока описывалось, не выходило дальше наших внутренних экспериментов, но надо было придумать, как тестировать атаки на детекторах других платформ подачи объявлений.
Оказывается, при подаче объявлений на одну из платформ детекция номерного знака происходит автоматически, так что можно много раз загружать фото и проверять, как алгоритм детекции справляется с новым adversarial example.

Но…
Ни одна из сработавших на нашей модели атак не сработала при тестировании на другой платформе. Это отлично! Это следствие различий в моделях и того, насколько плохо обобщаются adversarial attacks на разные архитектуры сетей. Почему так произошло? Из-за сложности воспроизведения атак их делят на две группы: white box и black box.

То, что нам нужно — это black box с дополнительными ограничениями на инференс: API нет, всё что можно сделать — это вручную загружать фото и проверять атаки. Те атаки, которые мы делали на свою модель, — это был white box. Если бы был API, то можно было сделать substitute model.

Тогда можно провести white box атаки на эти модели и они с большей вероятностью сработают на black box. Идея заключается в создании датасета входных изображений и ответов black box модели, на которых можно обучить несколько моделей разных архитектур, так чтобы аппроксимировать black box модель. В нашем случае это подразумевает много ручной работы, поэтому такой вариант нам не подошёл.

В поисках интересных работ на тему black box атак была найдена статья ShapeShifter: Robust Physical Adversarial Attack on Faster R-CNN Object Detector
Авторы статьи делали атаки на object detection сети self-driving машин с помощью итеративного добавления изображений, отличных от истинного класса, в фон стоп-знака.

Поэтому мы решили пренебречь желаемой невидимостью атаки в угоду работоспособности. Такая атака хороша заметна человеческому глазу, тем не менее, она успешно ломает работу object detection сети, что нам и требуется.

Мы захотели проверить, насколько модель детекции переобучена, использует ли она информацию об автомобиле, или нужна только плашка Авито?

Для этого создали такое изображение:

Получили: Загрузили его как машину на платформу объявлений с black box моделью.

Получилось так: Значит, можно изменять только плашку Авито, остальная информация во входном изображении не является необходимой для детекции модели black box.
После нескольких попыток возникла идея добавления в плашку Авито adversarial шума, полученного методом FGSM, который ломал нашу собственную модель, но с довольно большим коэффициентом ε.

На машине это выглядит так:

Результат оказался успешным. Загрузили фото на платформу с black box моделью.

Тогда после нескольких попыток мы решили сосредоточиться на другой самой заметной части номера — границе. Применив этот способ к нескольким другим фотографиям, мы выяснили, что он срабатывает не часто. «Сломав» линию границы, мы сможем помешать сети корректно обнаружить область номера. Известно, что начальные сверточные слои сети имеют активации на простых объектах вроде линий, углов. Сделать это можно, например, добавив шум в виде белых квадратов случайного размера по всей границе номера.

Загрузив такую картинку на платформу с black box моделью, мы получили успешный adversarial example.

Интересное наблюдение: атака успешна только при комбинировании шума в буквах Avito и рандомных белых квадратов в рамке, использование этих способов по отдельности не даёт успешного результата.
В итоге мы выкатили этот алгоритм в прод, и вот что из этого вышло 🙂 Попробовав этот подход на наборе других картинок, мы выяснили, что black box модель больше не может задетектить плашку Авито (набор собирался вручную, там меньше сотни картинок, и он, разумеется, не репрезентативен, но сделать больше требует много времени).

Что-то посвежее:

Мы даже попали в рекламу платформы:

Время, которое мы потратили на создание атаки — две недели перед Новым годом. В итоге у нас получилось сделать adversarial attack, которая в нашей имплементации не увеличивает время обработки изображения. Сейчас adversarial номерной знак отключен, потому что теперь конкурент звонит пользователям, предлагает им самим загружать фотографии в объявление или заменяет фото машины на стоковые из интернета. Если бы не получилось за это время её сделать, то разместили бы вотермарку.

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть