Редактирование от 22 июня: опубликованы окончательные результаты конкурса Deepfake Detection Challenge с использованием частного набора тестов, и мы оказались в 5 % лучших команд (92-е место из 2114)! Спасибо Бастьену, Бенуа-Мари, Жану-Батисту и Максиму за то, что сделали это возможным!

За последние пару лет дипфейки или видео, сгенерированные с помощью глубокого обучения, стали серьезной социальной и политической проблемой. Они также стали головной болью для компаний, занимающихся технологиями и медиа-платформами, которые в настоящее время сталкиваются с растущим давлением по удалению вводящего в заблуждение контента. По мере совершенствования технологии создания реалистичных дипфейков возможность их автоматического обнаружения становится все более важной.

Поскольку обнаружение дипфейков до сих пор остается нерешенной проблемой, Facebook, Microsoft, AWS и Партнерство в области искусственного интеллекта объединили свои усилия для создания глобального конкурса по обнаружению дипфейков на платформе Kaggle. Имея внушительный призовой фонд в 1 миллион долларов США, их цель состояла в том, чтобы привлечь лучших специалистов по искусственному интеллекту со всего мира, чтобы соревноваться в поиске способов улучшения обнаружения дипфейков.

Мы в indust.ai стремились помочь решить эту проблему. Как недавно созданная компания, миссия которой — помочь европейским компаниям трансформировать свою основную деятельность с помощью ИИ, мы увидели в этом вызове прекрасную возможность. Это был отличный способ для нашей новой команды привыкнуть к совместной работе, помочь нашим младшим членам приобрести ценные навыки в области компьютерного зрения и подтвердить нашу готовность решать важные для отрасли задачи.

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

Изучение и подготовка данных

Предоставленный обучающий набор данных состоял из 120 000 видеороликов, в которых около 500 различных нанятых актеров выступали в нескольких разных 10-секундных клипах. Затем лица актеров в этих клипах были изменены с использованием одного из нескольких методов генерации дипфейков, так что в окончательном наборе данных было около 80% поддельных видео и 20% реальных видео. Полученный набор данных ни в коем случае не был чистым, и первым шагом, который мы предприняли, было удаление дубликатов и поврежденных файлов.

Основная трудность с этой задачей заключалась в том, что процесс создания тестовых видеороликов, используемых для очков в таблице лидеров, полностью отличался от того, который использовался для создания видеороликов поездов, как описано в статье [1], прилагаемой к задаче. Это привело к тому, что обучающее и тестовое распределения различались, поэтому было важно как применять хорошие методы для обобщения, так и использовать хорошее разделение обучения/проверки. Видео были разделены на 50 папок, при этом актеры в разных папках почти не пересекались. Мы решили использовать 40 папок для нашего набора поездов и 10 для нашего набора проверки, таким образом сводя к минимуму совпадения между участниками в обоих наборах, имея при этом достаточное количество участников в нашем наборе проверки для получения надежной оценки проверки.

Представляем наш конвейер машинного обучения

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

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

Мы попали в топ-10% участников благодаря сочетанию вариантов, которые мы сделали на протяжении всей конвейерной обработки машинного обучения, сосредоточив внимание на:

  • распознавание лиц
  • выбор модели
  • методы обобщения
  • сборка каркаса и модели

Ниже мы рассмотрим эти аспекты более подробно.

Распознавание лиц

Поскольку видеоманипуляции были сосредоточены на лицах людей, которые составляли лишь небольшую часть видео, было важно разработать хорошую систему распознавания лиц. В частности, мы искали систему обнаружения лиц, которая максимизировала бы вероятность обнаружения (данный кадр, вероятность обнаружения лица) и минимизировала бы частоту ложных срабатываний (вероятность того, что обнаруженное лицо не является лицом).

Мы протестировали и сравнили несколько различных детекторов лиц с открытым исходным кодом и в итоге протестировали два разных подхода:

  1. Распознавание лиц без ложных срабатываний. Мы предположили, что шум в данных, создаваемый кадрами, ошибочно идентифицированными как лица, может отрицательно сказаться на обучении. Для этого подхода мы использовали комбинацию двух разных детекторов лиц: Faced [2] и dlib [3]. Требуя, чтобы лицо было обнаружено обоими детекторами, мы достигли 0,1% ложных срабатываний, что было достигнуто ценой довольно низкого уровня обнаружения в 60%.
  2. Сбалансированный уровень ложных срабатываний и вероятность обнаружения. Для этого подхода мы использовали детектор BlazeFace [4] и сразу достигли уровня обнаружения 97% и 7% ложных срабатываний. Однако мы заметили, что этот детектор плохо работает, когда лица находятся далеко от камеры. Добавив дополнительный шаг, на котором мы создали горизонтальные, вертикальные и матричные скользящие окна с перекрывающимися ячейками, а затем использовали эти окна для обнаружения лиц, мы достигли уровня обнаружения 99% с 8% ложных срабатываний.

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

Выбор модели

Сосредоточив внимание только на кадрах, а не на видео целиком, мы свели задачу к проблеме классификации изображений и могли полагаться на уже существующие методы. В частности, мы использовали переносное обучение¹ с помощью сверточных нейронных сетей (CNN), обученных задаче классификации ImageNet [5]. Хотя набор данных ImageNet и набор данных Deepfake сильно различаются, все естественные изображения имеют общие черты, и мы ожидаем, что использование предварительно обученной модели позволит сосредоточиться на специфике рассматриваемой проблемы.

Когда мы протестировали несколько моделей, мы обнаружили корреляцию между результатами модели в ImageNet и потерями при проверке в нашем наборе данных. В результате мы выбрали две из последних и наиболее эффективных моделей ImageNet: ResNext [6] и DenseNet [7].

Методы обобщения

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

Мы объединили три разных подхода для улучшения обобщения:

  1. Регуляризация: мы попробовали стандартные методы, такие как отсев², уменьшение веса³ и сглаживание меток⁴. Однако мы обнаружили, что эти методы дали лишь небольшое улучшение.
  2. Добавление дополнительных данных: чтобы увеличить разнообразие изображений в нашем обучающем наборе, мы добавили данные из другого источника. В частности, мы использовали набор данных FaceForensics [8], выпущенный в 2018 году, который также ориентирован на обнаружение дипфейков.
  3. Увеличение данных: мы искусственно создали больше данных, случайным образом внося небольшие изменения в существующие изображения, используя перемещение, поворот, изменение яркости, сжатие и уменьшение разрешения.

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

Ассемблирование

Чтобы делать прогнозы на видео, мы выполнили два типа ансамбля:

  1. Анализ кадров: мы случайным образом отобрали кадры из видео, выполнили обнаружение лиц, сделали индивидуальные прогнозы для каждого обнаруженного лица, а затем использовали среднее значение по всем прогнозам в качестве нашего прогноза для видео. Мы начали делать это усреднение с 5 кадрами на видео, но быстро поняли, что чем больше кадров мы используем, тем лучше. В нашем финальном представлении мы брали в среднем более 100 кадров на видео.
  2. Ассемблирование моделей: поскольку разные модели, как правило, изучают немного разные закономерности в данных, для достижения лучшего обобщения мы усреднили прогнозы, сделанные несколькими разными моделями ResNext и DenseNet.

Использование обоих типов ансамбля значительно улучшило наш результат и позволило нам подняться примерно на 100 позиций в рейтинге.

Что мы делали и не пробовали

Было еще несколько вещей, которые мы попробовали, но они не попали в наш окончательный вариант:

  • Мы предположили, что можем упустить важную информацию, зафиксированную во временном измерении видео. Таким образом, мы обучили рекуррентную нейронную сеть (RNN) поверх предварительно обученной сверточной нейронной сети (CNN) с последовательностями кадров в качестве входных данных. Однако мы обнаружили, что наши результаты не сильно отличались от обучения только CNN и усреднения нескольких прогнозов. Таким образом, мы пришли к выводу, что большую часть информации о реальном или ложном характере данных можно найти в отдельных кадрах.
  • Мы предположили, что простое усреднение прогнозов, сделанных CNN по нескольким кадрам видео, было неоптимальным, и что лучших результатов можно было бы достичь, обучив отдельную сеть агрегировать прогнозы. Однако, несмотря на то, что она оказала огромное влияние на нашу оценку проверки, мы обнаружили, что эта процедура привела к переоснащению нашего набора данных поезда и худшему обобщению набора тестовых данных.

Как небольшой команде, работающей в установленные сроки, нам приходилось принимать трудные решения о том, чему отдать приоритет. Некоторые вещи, которые мы не пробовали, но могли бы улучшить нашу оценку:

  • Мы с самого начала знали, что около 5% видео были фальшивыми из-за манипуляций не с изображением, а со звуком. Хотя мы решили сосредоточиться на визуальных подделках, можно было бы получить дополнительные выгоды, либо придерживаясь нашего подхода и очистив наш набор данных поезда, чтобы удалить поддельные аудио, либо создав более полную модель, которая могла бы иметь дело как с поддельными звуками, так и с поддельными звуками. визуальные эффекты.
  • Известно, что обучение классификатора вспомогательной (но актуальной) цели часто приводит к улучшению. Например, мы могли бы обучить нашу модель не только классифицировать видеокадры на поддельные и настоящие категории, но и предсказать, какие пиксели, скорее всего, были изменены.
  • Мы ожидаем, что дополнительные дополнения данных и точная настройка наших моделей и конвейера привели бы к улучшению обобщения. Например, после официального окончания соревнования мы обнаружили, что более широкий кадр вокруг обнаруженных нами лиц привел бы к лучшему результату.

Наши результаты

Мы завершили соревнование в числе 10% лучших из 2281 команды! График выше показывает эволюцию нашего рейтинга в таблице лидеров (желтым цветом, чем меньше, тем лучше) и нашего рейтинга среди конкурентов (синим цветом, чем выше, тем лучше). Наша оценка постоянно улучшалась с течением времени, поскольку мы последовательно тестировали различные подходы и вносили изменения в наш конвейер.

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

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

Ссылки и глоссарий

[1]Вызов DeepFake: https://arxiv.org/abs/1910.08854

[2]iitzco/faced: 🚀 😏 Обнаружение лиц ЦП почти в реальном времени с использованием глубокого обучения

[3] Библиотека dlib C++

[4] hollance/BlazeFace-PyTorch: модель детектора лица BlazeFace, реализованная в PyTorch

[5] Таблица лидеров ImageNet | Бумаги с кодом

[6] ResNext: https://arxiv.org/abs/1611.05431

[7] DenseNet: https://arxiv.org/abs/1608.06993

[8] ondyari/FaceForensics: Github набора данных FaceForensics

¹ Переносное обучение – это метод машинного обучения, при котором модель, разработанная для одной задачи, повторно используется в качестве отправной точки для модели второй задачи.

² выпадение относится к случайному удалению подмножеств нейронов на этапе обучения.

³ Затухание веса включает в себя добавление L2-регуляризации параметров к потерям во время тренировки

сглаживание меток включает замену двоичных 0 и 1 меток данных (настоящие или поддельные) другими значениями, такими как 0,01 и 0,99, чтобы избежать чрезмерно уверенных прогнозов.