Введение в самый популярный инструмент глубокого подделки с открытым исходным кодом

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

Базовая технология, отвечающая за этот метод, находится в Generative Adversarial Networks (GAN), - новом классе фреймворка машинного обучения, впервые предложенном Яном Гудфеллоу и его коллегами в 2014 году. В этом методе две нейронные сети (генератор и дискриминатор) соревнуются друг с другом в минимаксной игре, чтобы создать модель, способную генерировать новые данные с теми же свойствами обучающего набора. Подробнее в их white paper здесь.

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

Получив более 13 000 звезд на GitHub, DeepFaceLab стал популярным решением как для потребительских, так и для профессиональных дипфейков. Даже если у вас ограниченные аппаратные и технические знания, я покажу вам, насколько легко создавать качественные дипфейки из ограниченных данных обучения.

В частности, мы будем изображать лицо Тони Старка на Илоне Маске в три этапа:

  • Этап извлечения -, на котором мы подготавливаем и очищаем наш набор данных.
  • Этап обучения - на котором мы обучаем нашу модель.
  • Фаза конверсии - где мы используем нашу модель для создания маски.

Чтобы загрузить и ознакомиться с инструментом, вы можете найти репо здесь и технический документ здесь. Обратите внимание, что в настоящее время поддерживаются только операционные системы Windows и Linux.

Фаза I: добыча

После загрузки DeepFaceLab вы будете жить в двух разных каталогах:

  • Каталог проекта (называется DeepFaceLab_NVIDIA)
  • Каталог рабочая область (подкаталог основного каталога проекта)

Каталог проекта содержит наши файлы сценариев, которые мы будем использовать для выполнения действий (извлечение, обучение), а каталог нашей рабочей области будет содержать следующее:

  • Исходные данные - лица, которые мы хотим встроить.
  • Данные о назначении - лица объекта, которые мы хотим переопределить.
  • Модель - двигатель с двигателем GAN, который мы будем обучать.

  1. Начните с добавления ваших data_dst.mp4 и data_src.mp4 видеофайлов в рабочее пространство.
  2. Вернитесь в каталог DeepFaceLab_NVIDIA.
  3. Запустите 2) extract images from video data_src.bat, чтобы извлечь обучаемые лица из исходного видео.
  4. Запустите 3) extract images from video data_dst FULL FPS.bat, чтобы извлечь обучаемые лица из целевого видео.
  5. Перейдите к папкам data_dst и data_src, чтобы очистить извлеченные грани, удалив смещенные и деформированные грани.
  6. (Необязательно) Запустите 4.2) data_dst sort.bat и 5.2) data_dst sort.bat, чтобы упростить сравнение лиц во время очистки.

💡 Полезные советы для этого этапа:

  • Выбор правильного источника и назначения обучающих видеороликов - самый важный этап этого процесса. Качество видео, выравнивание лиц и освещение - все это факторы, которые могут повлиять на качество готового продукта.
  • Вы можете найти высококачественные клипы на YouTube из таких источников, как интервью со знаменитостями и видеоклипы.
  • Не переусердствуйте с исходными данными. Я считаю, что приятным моментом являются около 2000 лиц (или извлеченный 2–3-минутный клип) с разными углами и выражениями, в идеале те, которые соответствуют вашему целевому клипу.

Фаза II: Обучение

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

  1. Из каталога проекта запустите 6) train Quick96.bat
  2. При появлении запроса выберите свой графический процессор (также поддерживается использование только процессора)

Когда обучение начнется, вы увидите эти числа в окне командной строки. Что они имеют в виду?

Starting. Press "Enter" to stop training and save model.
[12:33:13][#000219][0764ms][0.9550][0.9910]

Слева направо столбцы представляют следующее.

  1. Текущее местное время
  2. Текущая итерация
  3. Время итерации
  4. Величина потерь SRC
  5. Значение потери летнего времени

Наша цель - получить как можно более низкие значения потерь src и dst.

Поставьте в очередь обучающую монтажную музыку Rocky! Продолжаем тренироваться 💪

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

  1. Образец лица SRC
  2. Сгенерировано лицо SRC из этого образца
  3. Образец лица DST
  4. Создано лицо DST из этого образца
  5. Сгенерированное лицо SRC, моделирующее образец лица DST

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

После 160000 итераций вы действительно можете увидеть, как наши сгенерированные лица достигают ужасающего уровня реализма. Пришло время собрать все воедино!

💡 Полезные советы для этого этапа:

  • Терпение является ключевым моментом на этом этапе. Я рекомендую вам подождать не менее 80 000 итераций для достижения наилучших возможных результатов. В зависимости от вашего оборудования вам может потребоваться запустить его на ночь или на выходных. Или вы можете сделать современный эквивалент наблюдения за высыханием краски, наблюдая за поездом своей модели.
  • На более продвинутых моделях помните, какое разрешение изображения вы используете, так как это усложнит обучение и может даже оказаться слишком большим для вашего графического процессора. С GTX 1060, использующей 6 ГБ видеопамяти, я смог заставить свой графический процессор работать с разрешением до 192 в моей модели. Все, что превышало эту сумму, привело к сбою моей модели при установке.
  • DeepFaceLab также поддерживает трансферное обучение, при котором предварительно обученные модели могут использоваться для значительного повышения начальной скорости обучения. Вы можете найти многие из них на форумах сообщества DeepFaceLab.

Этап III: преобразование

Теперь, когда наша модель полностью обучена, мы можем объединить наши сгенерированные лица с целевым видео.

В каталоге проекта запустите 7) merge Quick96.bat, чтобы вызвать интерактивное слияние.

Хорошо, здесь много чего происходит. Давайте разберемся с этим.

Нам нужно идти кадр за кадром и вносить какие-либо корректировки в сгенерированную маску лица с помощью следующих методов.

  • Привыкайте нажимать Tab для перехода между интерфейсом и рамкой изображения.
  • Используйте маску размытия (E и D) и маску размытия (W и S), чтобы подогнать созданное лицо к форме лица объекта. В базовой модели Quick96 у нас ограниченная поддержка распознавания линии подбородка, поэтому этот шаг необходим.
  • Когда вы будете готовы двигаться дальше, вы можете использовать клавишу точки для перехода к следующему кадру или использовать Shift +. для обработки всех оставшихся кадров.

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

После этого запустите 8) merged to mp4 lossless.bat, чтобы запустить небольшой скрипт FFmpeg, который построит ваше объединенное видео и отобразит его как result.mp4.

Куда идти дальше?

Удовлетворив свой первый дипфейк, вы быстро почувствуете аппетит к созданию более нелепых творений. Пример Тони Старка / Илона Маска - это своего рода «Hello World» инструмента DeepFaceLab, и вскоре вы обнаружите, что модель Quick96 и ваш четырехлетний графический процессор Nvidia просто не годятся для более сложных случаев.

В своей следующей статье я покажу вам, как мы можем использовать модель SAEHD для создания гораздо более качественных сгенерированных масок для лица и как мы можем переложить накладные расходы на обучение в облако с помощью GoogleCollab. записные книжки. Быть в курсе! 🤖