Deepfacelab инструкция на русском

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

Название технологии – объединение терминов «глубокое обучение» (англ. Deep Learning) и «подделка» (англ. Fake). В большинстве случаев в основе метода лежат генеративно-состязательные нейросети (GAN). Одна часть алгоритма учится на фотографиях объекта и создает изображение, буквально «состязаясь» со второй частью алгоритма, пока та не начнет путать копию с оригиналом.

В следующем видео показаны процессы, происходящие за кулисами обучения нейросети. Как пишет автор проекта Sham00K, на итоговое видео потрачено более 250 часов работы, использовались 1200 часов съемочных материалов и 300 тыс. изображений. Объем сгенерированных данных составил приблизительно 1 Тб.

🤖 Библиотека data scientist’а

🤖🎓 Библиотека Data Science для собеса

🤖🧩 Библиотека задач по Data Science

Области применения технологии

Уже имеются целые YouTube- и Reddit-каналы c дипфейк-роликами. Технология DeepFake может применяться для самых разных целей.

Кинопроизводство. Производство фильмов сегодня – крайне затратный процесс с арендой камер, студий и оплатой работы актёров. Развитие технологии DeepFake позволит сократить затраты на съемочный процесс, монтаж и спецэффекты.

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

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

Очевидно, что технология должна использоваться с особой осторожностью. Злоумышленниками могут преследоваться цели компрометирования личности или создания фейковых новостей. В начале октября 2019 г. члены Комитета по разведке Сената США призвали крупные технологические компании разработать план для борьбы с дипфейками. Ранее, в сентябре этого года, Google создала специальный датасет дипфейков.

Отметим, что данная публикация подготовлена исключительно в исследовательских целях.

Примечание

Мы обновили гайд в апреле 2021 года, чтобы приблизить описание к текущему состоянию библиотеки DeepFaceLab.

Для синтеза дипфейка мы будем использовать популярную библиотеку DeepFaceLab. Библиотека стремительно развивается, сейчас доступно несколько релизов:

  1. Windows (magnet-ссылка) – последний релиз, для загрузки требуется торрент-клиент.
  2. Windows (Mega.nz) – содержит старые и новые релизы. Есть сборки для Nvidia карт размером порядка 3 Гб, а также версия для OpenCl (2020).
  3. Google Colab (GitHub) – можно использовать удаленные вычислительные мощности.
  4. DeepFaceLab для Linux (GitHub).
  5. CentOS Linux (github) – может отставать от основной ветки релизов.

Ниже описан базовый процесс создания дипфейка на примере Windows.

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

Системные требования для DeepFaceLab

Минимальные системные требования для работы с инструментом:

  • ОС Windows 7 или выше (64 бит).
  • Процессор с поддержкой SSE-инструкций.
  • Оперативная память объемом не менее 2 Гб + файл подкачки.
  • OpenCL-совместимая видеокарта (NVIDIA, AMD, Intel HD Graphics).

Рекомендуемые системные требования:

  • Процессор с поддержкой AVX-инструкций.
  • Оперативная память объемом не менее 8 Гб.
  • Видеокарта NVIDIA с объемом видеопамяти не менее 6 Гб.

Алгоритм работы с DeepFaceLab

Предварительно договоримся о терминологии:

  1. src (сокр. от англ. source) – лицо, которое будет использоваться для замены,
  2. dst (сокр. от англ. destination) – лицо, которое будет заменяться.

Архив сборки нужно распаковать как можно ближе к корню системного диска. После распаковки в каталоге DeepFaceLab вы найдете множество bat-файлов.

Примерная структура каталога workspace

Примерная структура каталога workspace

Местом хранения модели служит внутренняя директория workspace. В ней будут содержаться видео, фотографии и файлы самой программы. Вы можете копировать переименовывать каталог для сохранения резервных копий.

Папка _internal используется алгоритмом.

Сразу после распаковки в workspace уже могут содержаться примеры видеороликов для теста. В соответствии с описанной терминологией вы можете заменить их видеофайлами с теми же названиями data_src.mp4 и data_dst.mp4. Максимально поддерживаемое разрешение – 1080p. Приведенные в документации примеры расширений файлов: mp4, avi, mkv.

data_dst – это папка, в которой будут храниться кадры, извлеченные из файла data_dst.mp4 – целевого видео, в котором мы меняем местами лица. Папка также будет содержать две подпапки, которые создаются после запуска «извлечения» лиц:

  • aligned – изображения лиц (со встроенными данными лицевых ориентиров)
  • align_debug – исходные кадры с наложенными на лица ориентирами, которые используются чтобы идентифицировать корректно или некорректно распознанные лица.

data_src – это папка, в которой будут храниться кадры, извлеченные из файла data_src.mp4, или другие кадры-картинки в формте jpg, на которых изображен хозяин нового лица. Как и в случае с data_dst, после извлечения лиц создаются две подпапки:

  • aligned – извлеченные изображения лиц
  • align_debug выполняет ту же функцию, что и для dst, однако для извлечения набора данных src папка не создается по умолчанию. При желании нужно выбрать yes (y) при запуске извлечения, чтобы её сгенерировать.

Как вы могли заметить, bat-файлы в корне распакованного каталога имеют в начале имени номер. Каждый номер соответствует определенному шагу выполнения алгоритма. Некоторые пункты опциональны. Пройдемся по этой последовательности.

1. Очистка рабочего каталога

На первом шаге запуском 1) clear workspace.bat и нажатием пробела очищаем лишнее содержимое папки workspace. Одновременно создаются необходимые директории.

2. Извлечение кадров из видеофайла источника (data_src.mp4)

На втором шаге извлекаем изображения (кадры) из src-файла (2) extract images from video data_src.bat). Для этого запускаем bat-файл, получаем приглашение для указания кадровой частоты:

        Enter FPS ( ?:help skip:fullfps ) :
    

Пропускаем пункт, нажав Enter, чтобы извлечь все кадры.

        Output image format? ( jpg png ?:help skip:png ) : ?
    

В формат png файлы извлекаются без потерь качества, но на порядок медленнее и с большим объемом, чем в jpg. После задания настроек кадры извлекаются в каталог data_src.

3. Извлечение кадров сцены для переноса лица (опционально)

При необходимости обрезаем видео с помощью 3.1) cut video (drop video on me).bat. Этот пункт удобен, если вы никогда не пользовались программным обеспечением для редактирования видео. Перетаскиваем файл data_dst поверх bat-файла. Указываем временные метки, номер аудиодорожки (если их несколько) и при необходимости битрейт выходного файла. Появляется дополнительный файл с суффиксом _cut.

Запускаем 3.2) extract images from video data_dst FULL FPS.bat для извлечения кадров dst-сцены. Файлы автоматически переносятся в каталог data_dst. Как и для src, есть опция с выбором jpg/png.

4. Составление выборки лиц источника

На этом этапе начинается глубокое обучение. Нам необходимо детектировать лица на src-кадрах. Получаемая выборка будет храниться по адресу workspace\data_src\aligned. Этому пункту соответствует множество bat-файлов, начинающихся с 4) data_src faceset extract. При стандартном подходе используется SF3D-алгоритм детекции лица. Есть следующие опции:

  1. Выбор зоны, которую мы хотим извлечь: площадь увеличивается от full face (FF) к whole face (WF) и head (HEAD).
  2. Вариант использования GPU: ALL (задействовать все видеокарты), Best (использовать лучшую). Выбирайте второй вариант, если у вас есть и внешняя, и встроенная видеокарты, и вам нужно параллельно работать в офисных приложениях.
  3. Записывать или нет результат работы детекторов. Каждый кадр с выделенными контурами лиц записывается по адресу workspace\data_src\aligned_debug.

Пример вывода программы при запуске на видеокарте NVIDIA GeForce 940MX:

        Performing 1st pass...
Running on GeForce 940MX. Recommended to close all programs using this device.
Using TensorFlow backend.
100%|################################################################################| 655/655 [03:32<00:00,  3.08it/s]
Performing 2nd pass...
Running on GeForce 940MX. Recommended to close all programs using this device.
Using TensorFlow backend.
100%|##########################################################################################################################################################| 655/655 [13:28<00:00,  1.23s/it]
Performing 3rd pass...
Running on CPU0.
Running on CPU1.
Running on CPU2.
Running on CPU3.
Running on CPU4.
Running on CPU5.
Running on CPU6.
Running on CPU7.
100%|#########################################################################################################################################################| 655/655 [00:05<00:00, 112.98it/s]
-------------------------
Images found:        655
Faces detected:      654
-------------------------
Done.
    

Аналогичный bat-файл со словом MANUAL применяется для ручного переизвлечения уже извлеченных лиц в случае ошибок на этапе 4.2) data_src util add landmarks debug images.bat.

4.1. Удаляем большие группы некорректных кадров

Запускаем 4.1) data_src view aligned result.bat. Он запускает обозреватель, в котором можно просмотреть содержимое папки data_src/aligned относительно ложных срабатываний и неправильно определенных лиц, чтобы их можно было удалить.

DeepFake-туториал: создаем собственный дипфейк в DeepFaceLab

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

4.2. Сортировка и удаление прочих некорректных кадров

Файл 4.2) data_src sort.bat служит для для сортировки и выявления групп некорректных кадров. Не закрывая обозреватель, последовательно запускайте bat-файл с нужной опцией и удаляйте группы некорректных кадров (обычно находятся в конце). Доступные опции:

  • blur, motion blur сортирует кадры по резкости, удаляем кадры с нечеткими лицами.
  • face yaw сортирует лица по взгляду слева направо.
  • face pitch direction сортирует лица так, чтобы в начале списка лицо смотрело вниз, а в конце – вверх.
  • histogram similarity группирует кадры по содержанию, позволяет удалять ненужные лица группами.
  • histogram dissimilarity оставляет ближе к концу списка те изображения, у которых больше всего схожих (обычно это лица анфас). По усмотрению можно удалить часть конца списка, чтобы не проводить обучение на идентичных лицах.
  • brightness, hue, amount of black pixels соответствуют яркости, насыщенности и количеству черных пикселей. Помогает убрать переходные кадры, где лицо трудно различимо.
  • best faces – помогает выделить наиболее хорошо различимые лица.

4.2) data_src util add landmarks debug images.bat сгенерирует после извлечения лиц папку align_debug.

4.2) data_src util faceset enhance.bat использует специальный алгоритм машинного обучения для масштабирования/«улучшения» качества представления лиц в наборе данных. Полезно, если кадры немного размыты и вы хотите сделать их более резкими.

Файлы 4.2) data_src util faceset metadata restore.bat и 4.2) data_src util faceset metadata save.bat позволяют сохранять и восстанавливать данные об извлеченых наборах лиц/данных, чтобы вы могли редактировать изображения лиц после их извлечения без потери данных о выравнивании. Например, так можно увеличивать резкость, редактировать очки, пятна на коже, делать цветокоррекцию.

4.2) data_src util faceset pack.bat и 4.2) data_src util faceset unpack.bat служат для упаковки (распаковки) лиц из папки aligned в один файл. Используется для подготовки настраиваемого набора данных для предварительного обучения, упрощает совместное использование в виде одного файла и значительно сокращает время загрузки набора данных (секунды вместо минут).

4.2.other) data_src util recover original filename возвращает имена изображений лиц к исходному порядку/именам файлов. Запускать не обязательно – обучение и слияние будут выполняться независимо от имен файлов источника.

5. Составление выборки лиц принимающей сцены (dst)

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

5) data_dst faceset extract.bat выполняет автоматическое извлечение с использованием алгоритма S3FD.

5) data_dst faceset extract + manual fix.bat позволяет вручную указать контуры лица на кадрах, где лицо не было определено. При этом в конце извлечения файлов открыто окно ручного исправления контуров. Элементы управления описаны вверху окна (вызываются клавишей H).

5) data_dst faceset extract MANUAL RE-EXTRACT DELETED ALIGNED_DEBUG.bat используется для ручного переизвлечения из кадров, удаленных из папки align_debug. Подробнее об этом рассказано далее.

DeepFake-туториал: создаем собственный дипфейк в DeepFaceLab

Все экстракторы позволяют выбрать между GPU и CPU, а также указать область, выделяемую для извлечения. Аналогично src это FF, WF или HEAD.

5.1. Извлечение лиц вручную (manual extractor)

После запуска 5) data_dst faceset extract MANUAL.bat откроется окно, в котором вы можете вручную найти лица, которые хотите извлечь или переизвлечь:

  • Выделите лицо с помощью мыши.
  • С помощью колесика мыши можно менять размер области поиска.
  • Убедитесь, что все или хотя бы большинство ориентиров находится на важных точках (глазах, рту, носу, бровях) и правильно следуют контурам лица. В некоторых случаях, в зависимости от угла освещения или имеющихся препятствий, может оказаться невозможным точно выровнять все ориентиры, поэтому просто попытайтесь сделать так, чтобы покрывались все видимые части.
  • Чтобы изменить режим точности, используйте клавишу A. Теперь ориентиры не будут так сильно «прилипать» к обнаруженным лицам, но вы сможете более точно позиционировать ориентиры.
  • Для перемещения вперед и назад используйте клавиши < и >. Для редактирования нажмите Enter или кликните левой клавишей мыши.
  • Чтобы пропустить оставшиеся грани и выйти из экстрактора, используйте клавишу q.

Чтобы посмотреть результаты в папке aligned, можно запустить 5.1) data_dst view aligned results.bat.

Чтобы бегло просмотреть содержимое папки align_debug, найти и удалить любые кадры, на которых лицо целевого человека имеет неправильно выровненные ориентиры или ориентиры вообще не были размещены, используйте 5.1) data_dst view aligned_debug results.bat.

5.2. Очистка данных сцены

После того, как мы определили границы data_dst, нужно их очистить аналогично тому, как мы это делали с исходным набором лиц. Однако очистка целевого набора данных отличается от исходного, потому что мы хотим, чтобы все грани были выровнены для всех кадров, в которых они присутствуют, включая проблемные.

Начните с сортировки с помощью 5.2) data_dst sort.bat и используйте сортировку по similarity. Лица будут отсортированы по сходству, цвету, структуре – так будет проще сгруппировать похожие и удалить изображения, содержащие ложные срабатывания, лица других людей и неправильно определенные границы. Послу удаления неверных границ восстановите имена и порядок файлов с помощью утилиты 5.2) data_dst util recover original filename.

Перейдите в папку data_dst/align и используйте следующую, откройте Powershell и с помощью следующей команды удалите суффиксы _0 из имен файлов с размеченными лицами:

        get-childitem *.jpg | foreach {rename-item $_ $_.name.replace("_0","")}
    

Дождитесь завершение процесса – по окончании снова отобразится адрес папки.

Если в сцене есть кроссфейд-переходы или лицо отражается в зеркалах, найдите файлы с суффиксом _1, переместите их в отдельную папку и снова запустите скрипт, но замените в команде _0 на _1. Скопируйте результат обратно в основную папку и убедитесь, что сохранили все файлы.

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

После таких манипуляций папка align_debug содержит только кадры, из которых были правильно извлечены лица, а также кадры, из которых экстрактор не смог правильно извлечь лица или не извлек. Теперь вы можете запустить 5) data_dst faceset MANUAL RE-EXTRACT DELETED ALIGNED_DEBUG.bat для их извлечения вручную Прежде чем вы это сделаете, можно запустить 5.1) data_dst view align_debug results.bat, чтобы быстро просмотреть оставшиеся хорошие и посмотреть, правильно ли выглядят ориентиры.

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

6. Обучение

Обучение нейросети – самая времязатратная часть, которая может длиться часы и сутки. Для тренировки необходимо выбрать одну из моделей. Выбор и качество результата определяются объемом памяти видеокарты. В текущей версии программы доступно две модели:

  • SAEHD (6GB+). Настраиваемая модель для высокопроизводительных графических процессоров.
  • Quick96 (2-4GB). Простой режим, предназначенный для графических процессоров с 2-4 ГБ видеопамяти.

При первом запуске программа попросит указать параметры, применяемые при последующих запусках (при нажатии Enter используются значения по умолчанию). Большинство параметров понятно интуитивно, прочие – описаны в руководстве.

Обратите внимание, что некоторые параметры не могут быть изменены после начала обучения, например:

  • разрешение модели (model resolution)
  • архитектура модели (model architecture)
  • размерность модели (models dimensions)
  • тип лица (face type)

Рассмотрим также некоторые другие параметры модели.

Autobackup every N hour: автоматическое резервное копирование вашей модели каждые N часов. По умолчанию отключено.

Target iteration: модель прекратит обучение после достижения заданного количества итераций, например, если вы хотите обучать модель только 100 тыс. итераций, вы должны ввести значение 100000. Если оставить значение равным 0, модель будет работать до тех пор, пока вы не остановите ее вручную.

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

Batch_size: параметр влияет на количество лиц, сравниваемых друг с другом на каждой итерации. Наименьшее значение — 2, но вы можете увеличить значение, если с этим справится ваш графический процессор. Чем выше разрешение, размеры и больше особенностей у моделей, тем больше потребуется VRAM, поэтому может потребоваться меньший размер пакета. Рекомендуется не использовать значение ниже 4. Для начальной стадии можно установить более низкое значение, чтобы ускорить начальное обучение, а затем повысить его. Оптимальные значения – от 6 до 12.

AE architecture: можно выбрать тип архитектуры модели. Два основных типа: DF и LIAE. Обе модели обеспечивают высокое качество, но DF лучше срабатывает для лиц анфас, а LIAE качественнее справляется с трансформациями. Дополнительные буквы в названии соответствуют повышению сходства (-U) и увеличению разрешения модели (-D).

Прочие настройки подробно описаны в оригинальном руководстве.

На что обратить внимание

Отключите любые программы, использующие видеопамять. Если в процессе тренировки в консоли было выведено много текста, содержащего слова Memory Error, Allocation или OOM, то на вашем GPU модель не запустилась, и ее нужно урезать. Необходимо скорректировать опции моделей.

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

DeepFake-туториал: создаем собственный дипфейк в DeepFaceLab

Процесс обучения можно прерывать, нажимая Enter в окне Training preview, и запускать в любое время, модель будет продолжать обучаться с той же точки. Чем дольше длится тренировка, тем лучший результат мы получим.

7. Наложение лиц

Теперь у нас есть результат обучения. Необходимо совместить src-лица и кадры dst-сцены. Из списка bat-файлов выбираем ту модель, на которой происходила тренировка.

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

8. Склейка кадров в видео

После того, как вы объедините/конвертируете все лица, внутри папки data_dst появится папка с именем merged, содержащая все кадры, а также директория merged_masked, которая содержит кадры масок. Последний шаг – преобразовать их обратно в видео и объединить с исходной звуковой дорожкой из файла data_dst.mp4.

Итоговый файл будет сохранен под именем result. Доступны форматы mp4 и avi. Готово! Ниже представлен пример, полученный для тестовых видео.

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

Планируете протестировать DeepFake? Делитесь результатами ;)

***

Телеграм-каналы об ИИ

  1. 🤖✍️ Библиотека нейротекста
  2. 🤖🎨 Библиотека нейрокартинок
  3. 🤖🦾 Библиотека робототехники и беспилотников
  4. 🤖🔊 Библиотека нейрозвука
  5. 🤖🎥 Библиотека нейровидео

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

Этот гайд даст вам исчерпывающую информацию, чтобы делать подобные дипфейки — посмотреть deepfake на YouTube. Это был мой первый дипфейк, сейчас получается намного лучше. Я постарался максимально подробно и просто рассказать все что знаю, поэтому материал получился довольно большой.

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

Вроде все хорошо, но есть загвоздки:

  • Для работы с нейронными сетями нужна мощная видеокарта. А лучше сразу несколько.
  • Нужен большой набор фотографий, для обучения нейронки.

Помимо майнинга, видеокарты отлично справляются с созданием дипфейков. Но что делать, если у вас вместо нормальной видеокарты Intel HD Graphics. Не покупать же новую в эпоху майнинга 😄

Спонсор поста

Google Colab

К счастью, одну проблему легко решить. Google предоставляет бесплатный облачный сервис Google Colaboratory, который позволяет вам запускать код на Python из браузера, используя при этом мощный графический процессор.

У вас в распоряжении оказывается доступ к серверу с 70 Gb памяти, и что самое важное — с одной из мощных видеокарт от Nvidea: K80, T4, P4 или P100. И все это совершенно бесплатно, но с некоторыми ограничениями:

  • Colab запускается из браузера, и если вы закроете вкладку, то работа программы остановится. На создание одного дипфейка уходит от 2 дней. Все это время компьютер должен работать.

  • При этом время непрерывной сессии 12 часов. Когда вы подключаетесь к Colab, специальный алгоритм решает давать вам ресурсы GPU или нет. Если вам выделяют ресурсы, то они доступны вам 12 часов. Далее вы снова встаете в очередь. Но на практике это время еще меньше.

    Частично эту проблему решает создание нескольких аккаунтов. Но и это не всегда помогает, я создал пять аккаунтов и все равно мог не получить сервер.

  • Также временами будет всплывать капча, чтобы подтвердить, что вы на месте. Появление капчи не зависит от вашей активности в браузере, она просто будет появляться время от времени. Поэтому никакая имитация деятельности не поможет. Проверенно 😁

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

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

DeepFaceLab (DFL)

Для создания дипфейка мы будем использовать проект DeepFaceLab [DFL 2.0], а точнее его слегка урезанную версию для Colab. У полноценной версии DFL есть визуальный редактор, который упрощает создание дипфейка.

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

Общее описание работы

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

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

Для тренировки понадобятся два набора лиц, проще говоря коллекция фотографий. В первом наборе (data_dst) будут целевые лица  — это лица, на которых мы будем заменять лицо. В другом наборе (data_src) лица источника — это лица, которые будут использоваться для замены.

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

Видео с целевым лицом называется data_dst.mp4, видео с лицом источника — data_src.mp4. Для наборов не обязательно использовать видео, можно использовать наборы фотографии.

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

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

После окончания обучения происходит слияние. Сначала на исходных кадрах видео лица заменяются по обученной модели. После наложения происходит склейка кадров обратно в видео с названием result.mp4, звуковая дорожка для этого видео берется из файла data_dst.mp4. Так и получается дипфейк.

Структура проекта

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

  • data_src — это папка, в которой хранятся кадры, извлеченные из файла data_src.mp4.
    После извлечения лиц из кадров создается подпапка:

    • aligned — изображения лиц, со встроенными данными лицевых ориентиров.
  • data_dst — это папка, в которой хранятся кадры, извлеченные из файла data_dst.mp4.
    Как и в случае с data_src, после извлечения лиц создается подпапка

    • aligned
    • merger — кадры видео data_dst, в которых уже заменено лицо.
  • model — папка хранит модель нейронной сети. Создается после начала обучения.
  • result.mp4 — этот файл создается после Merge. Является непосредственно дипфейком.

Я уже упоминал, что нам нужны видео, из которых мы будем извлекать лица:

  • для data_dst необходимо подготовить целевое видео и назвать его data_dst.mp4. Это видео помещается в папку workspace.
  • для data_src вы должны либо подготовить исходное видео и назвать его data_src.mp4, либо подготовить изображения в формате jpg/png.

Оптимальная длина ролика 5-10 минут. Чем длиннее будут ваши видео, тем сложнее и дольше будет создание дипфейка.

Также в процессе обучения может закончиться память на гугл-диске, что приведет к проблемам.

Подготовка к созданию

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

Создадим новый проект DFL. Для этого создаем на компьютере папку workspace. Все папки и файлы далее будем создавать в ней.

Получаем набор data_src

Непосредственно набор для нас сделает DFL. От нас требуется предоставить для него изображения, из которых DFL вырежет квадраты с лицами.

Вы можете либо самостоятельно добавить изображения в формате png/jpg в папку data_src, либо можете добавить видео data_src.mp4 в workspace, после чего с помощью DFL нарезать его на кадры, и уже потом вырезать квадраты с лицами для набора.

Советы для записи видео

  • Снимайте лицо с разных ракурсов. А также желательно при разном освещении.
  • Изображайте какие-нибудь эмоции: гнев, радость. Алгоритм будет искать похожие по эмоциям лица. В идеале спародировать фрагмент видео.
  • Открывайте рот, а лучше что-то говорите в камеру. Если вы снимите видео, где рот не открывается, алгоритм не откроет его за вас. Улыбнитесь, покажите зубы и так далее.
  • Моргайте, а лучше закройте на несколько секунд глаза. В противном случае ваш дипфейк не будет моргать.

Получаем набор data_dst

Здесь все проще, ведь у вас есть видео data_dst.mp4. Вы можете дополнительно добавить в папку data_dst изображения с заменяемым лицом из других источников, в таком случае модель будет обучаться лучше. Но обычно достаточно тех кадров, что есть в видео.

Загружаем workspace в Google Drive

Нам нужно загрузить нашу папку в Google Drive, чтобы Google Colab мог получить к ней доступ.

Папку workspace архивируем таким образом, чтобы в архиве содержалась непосредственно папка workspace. Если в архиве будет сразу два видео или другие папки, то вы сделали все неправильно.

Теперь загрузите этот архив на гугл диск.

Создание Deepfake

Переходим в Colab

Открываем проект Colab в браузере.

Установка DFL

Перед установкой DFL проверим, какую GPU мы получили. Найдите раздел “Check GPU”, нажмите на “скрыта одна ячейка”, и запустите !nvidia-smi.

Иногда везет и попадается лучшая из доступных GPU: Nvidea T4

Эта GPU обеспечивают скорость тренировки 0.6-0.7 секунд за итерацию обучения модели. Остальные дают 1.3-1.4 секунд за итерацию. В идеале нужно выполнить 300000+ итераций обучения модели, так что выгоду считайте сами.

Переходим к пункту “Install or update DeepFaceLab”. И жмем на кнопку “Скрыта одна ячейка”, после жмем на треугольник запуска.

Начинается процесс установки

В процессе установки могут возникать ошибки подобного вида:

Не обращайте на них внимания, они не повлияют на работу.

Загрузка проекта

Через минут 5, после установки, переходим к “Manage workspace”. Нажимаем на плашку “скрыто 5 ячеек”.

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

Переходим к загрузке проекта в Colab. Пункт “Import from Drive” позволяет загрузить и распаковать проект с вашего гугл диска. Этот пункт также позволяет загружать отдельные части проекта, например только лица или только папку data_src.

Нам нужно загрузить workspace.zip с гугл диска. После запуска вам необходимо перейти по ссылке из консоли и разрешить доступ к диску.

Переходим по ссылке

Получаем код доступа, который копируем в Colab

Если все прошло успешно, то вы должны увидеть папку вашего проекта. Для этого есть кнопка слева под логотипом Colab.

Об остальных пунктах в разделе:

  • Пункт ниже “Export to Drive” позволяет скачать проект на гугл диск. Тут тоже можно выбрать не только весь проект, но и отдельные папки. Например, скачать только натренированную нейросетью модель.
  • Пункты “Import from URL” и “Export to URL” позволяют загружать и скачивать проект удаленно.
  • Пункт “Delete and recreate” позволяет очистить проект или часть про

Выделяем лица

Разворачиваем пункт “Extract, sorting and faceset tools”.

“Extract frames” разобьет наше видео на кадры, из которых мы вырежем лица для обучения нашей модели. Выбираем нужное видео, нажимаем пуск. В итоге получаем кадры видео либо в папке data_src, либо в папке data_dst. Если вы используете картинки вместо видео, то пропустите этот пункт для data_src.

“Denoise frames” отвечает за понижение шумов на кадрах видео. Запускайте его по желанию.

Теперь из кадров необходимо вырезать лица. За это отвечает пункт “Detect faces”. Запускаем для каждого видео. И получаем папки aligned в папках data_dst и data_src.

/content
[wf] Face type ( f/wf/head ?:help ) : wf
[0] Max number of faces from image ( ?:help ) : 0
[512] Image size ( 256-2048 ?:help ) : 720
[90] Jpeg quality ( 1-100 ?:help ) : 90
Extracting faces...

Очищаем набор лиц

Далее очищаем набор лиц от ложных срабатываний и/или неправильно выровненных лиц.

Скачиваем папки aligned c помощью пункта “Export to Drive” в “Manage workspace”. Этот пункт загрузит папки в виде архива в гугл диск, скачайте их оттуда и распакуйте. После чего проверьте, какие лица попали в выборку, удалите плохие.

Плохие лица для data_src/aligned:

  • Закрытые предметами лица.
  • Перевернутые лица
  • Сильно обрезанные лица
  • Размытые лица

Плохие лица для data_dst/aligned:

  • Сильно обрезанные лица
  • Лица, которые вы не собираетесь заменять

Плохие лица для data_dst и data_src отличаются, к data_src предъявляется более строгие требования, тогда как перестаравшись в удалении data_dst вы получите кадры без наложения лица.

Вот пример data_src/aligned перед очисткой с цветовой кодировкой лиц в соответствии с тем, что вы должны с ними делать.

  • Зеленый — хорошее выравнивание лиц.
  • Красный — смещенные. Они немного повернуты. Их стоит удалить.
  • Синий — препятствие поверх лица. Можно оставить, если это всего лишь небольшое препятствие на нескольких гранях во всем наборе.
  • Желтый — размытые лица. Следует удалить, если только это не уникальное положение головы, которых больше в наборе нет. Небольшое количество может помочь обобщить лицо. Не стоит оставлять больше 5% от набора данных.
  • Фиолетовый — лица других людей. Очевидно, что их нужно удалить.
  • Розовый — обрезанные лица. Их можно оставить, если обрезано только немного подбородка или лба, при условии, что это всего несколько лиц во всем наборе данных, или если присутствует уникальное положение головы.
  • Оранжевый — любые изображения с сильными фотоинстаграм-фильтрами и прочим. Если они лишь немного отличаются от остальных, можно оставить, предполагая, что используется передача цвета во время обучения, чтобы усреднить их всех по сравнению с другими и DST.

После очистки заархивируйте папки и загрузите на гугл-диск. После чего загрузите обратно в проект очищенные лица.

“Faceset Enhancer”

Пункт “Faceset Enhancer” позволит улучшить детализацию ваших наборов лиц. Используйте по желанию.

Я использую этот пункт только для data_src

XSeg mask

Если в вашем видео заменяемое лицо перекрывается каким-то предметами, например лицо трогают руками, то вам необходимо для data_dst выполнить пункт “Apply or remove XSeg mask to the faces”. Если на видео лицо не перекрывается, то делать этого не надо.

Запускаем тренировку

Теперь мы можем приступить к тренировке нейронной сети. Переходим к пункту “Training”.

Нейронная сеть будет итеративно обучать модель. Как я уже говорил необходимо около 200-300к итераций, чтобы добиться хорошего качества дипфейка. Скорость выполнения одной итерации варьируется от параметров тренировки и вашей GPU и может принимать значения от 0.3 секунд до 1.2 секунд.

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

Параметр Silent_Start отвечает за повторный запуск с последними параметрами тренировки. Отключаем этот пункт, так как у нас не было тренировок. Также этот пункт надо отключать, если вы хотите изменить какой-либо параметр в процессе тренировки. Тогда после выбора модели и GPU надо нажать Enter в течение двух секунд.

/content
Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount("/content/drive", force_remount=True).
Creating workspace archive ...
Archive created!
Time to end session: 12 hours
Running trainer.

[new] No saved models found. Enter a name of a new model : tony_stark

Model first run.
Silent start: choosed device Tesla T4

Нам сообщают, что бэкап создан, и у нас еще 12 часов серверного времени. И просят ввести название модели.


[0] Autobackup every N hour ( 0..24 ?:help ) : 0

Как часто делать бекапы, оставляем значение 0. Мы уже указали галкой, что бекапы делать каждый час.


[n] Choose image for the preview history ( y/n ) : n

Сохранять изображения предварительного просмотра во время тренировки каждые несколько минут. Если вы выберете «Да», вы получите еще один запрос.


[n] Write preview history ( y/n ?:help ) : n

Выберите изображение для истории предварительного просмотра: если вы выберете N, модель будет выбирать грани для предварительного просмотра случайным образом, при выборе Y должно открыться новое окно после, где вы сможете выбрать их вручную.

Так как мы работаем в Colab, то никакого окна не получим, лучше выбрать n.


[0] Target iteration : 0

Количество повторений, после которого обучение прекратится. Если поставить 0, то обучение будет бесконечным.

Чем больше итераций, тем лучше получится дипфейк. Оптимально 300к-500к итераций.

При дефолтных параметрах ниже на Colab Pro вы получаете скорость в 0.3-0.4 секунды за итерацию. Это позволяет за ночь выполнить более 100000 итераций. В бесплатном Colab вы получаете 0.6-0.7 секунды за итерацию, это позволяет за ночь выполнить чуть более 50000 итераций, но скорее всего будет меньше из-за капчи, которая прервет обучение.


[n] Flip SRC faces randomly ( y/n ?:help ) : n

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

Рекомендуется использовать только на ранних этапах обучения или не использовать вообще, если наш набор data_src достаточно разнообразен.


[y] Flip DST faces randomly ( y/n ?:help ) : y

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


[8] Batch_size ( ?:help ) : 8

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

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

Для начальной стадии можно установить более низкое значение, чтобы ускорить начальное обучение, а затем повысить его. Оптимальные значения — от 6 до 12.


[128] Resolution ( 64-640 ?:help ) : 128

Разрешение ваших моделей. Это влияет на разрешение замененных лиц, чем выше разрешение модели — тем детальнее будет изученное лицо, но и обучение будет намного тяжелее и дольше.

Разрешение может быть увеличено с 64×64 до 640×640 с шагом:

  • 16 (для вариантов с обычной архитектурой и -U)
  • 32 (для вариантов с архитектурой -D и -UD)

Изменение этого параметра ведет к изменениям других параметров, вследствие чего скорость итерации может замедлиться более чем в 2 раза.

Этот параметр нельзя изменить во время обучения.

Если вы используете Colab Pro, то можете увеличить Resolution до 192.


[f] Face type ( h/mf/f/wf/head ?:help ) : wf

Эта опция позволяет вам установить область лица, которую вы хотите тренировать, есть 5 вариантов — половина лица, середина половины лица, анфас, все лицо и голова:

Half face (HF)

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

Mid-half face (MHF)

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

Full face (FF)

Покрывает большую часть области лица, за исключением лба, иногда может отрезать немного подбородка, но это случается очень редко — только когда объект широко открывает рот). Наиболее рекомендуется, когда SRC и или DST имеют волосы, покрывающие лоб.

Whole face (WF)

Расширяет эту область еще больше, чтобы покрыть практически все лицо, включая лоб и все лицо сбоку, вплоть до ушей.

Head (HEAD)

Используется для замены всей головы, не подходит для людей с длинными волосами. Лучше всего работает, если исходный набор данных faceset поступает из одного источника, и как SRC, так и DST имеют короткие волосы или волосы, форма которых не меняется в зависимости от угла.

Лучший вариант это WF.


[liae-ud] AE architecture ( ?:help ) : liae-ud

AE architecture (df/liae/df-u/liae-u/df-d/liae-d/df-ud/liae-ud ?:help ) : Этот вариант позволяет вам выбирать между двумя основными архитектурами обучения:DF и LIAE, а также их варианты -U, -D и -UD.

DF

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

LIAE

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

DF-U/LIAE-U

Этот вариант направлен на улучшение сходства с исходными лицами.

DF-D/LIAE-D

Этот вариант направлен на повышение производительности за счет примерно удвоения возможного разрешения без дополнительных затрат на вычисления (использование VRAM) и аналогичной производительности. Однако для этого требуется более длительное обучение, модель должна быть предварительно обучена для получения оптимальных результатов, а разрешение должно быть изменено на значение 32, в отличие от 16 в других вариантах.

DF-UD/LIAE-UD

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


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

Если вы повысили пункт Resolution, то необходимо увеличить и эти пункты, иначе улучшения качества не добиться.

Для Resolution: 192
AutoEncoder dimensions: 384
Encoder dimensions: 96
Decoder dimensions: 96
Decoder mask dimensions: 33

Мои параметры для Colab Pro замедляют обучение в 2 раза. Таким образом мы получаем скорость обучения, как в бесплатной версии Colab, но с повышенным качеством.

[256] AutoEncoder dimensions ( 32-1024 ?:help ) : 256

Настройка AutoEncoder влияет на общую способность модели распознавать лица.

[64] Encoder dimensions ( 16-256 ?:help ) : 64

Настройка Encoder влияет на способность модели узнавать общую структуру лиц.

[64] Decoder dimensions ( 16-256 ?:help ) : 64

Настройка Decoder, влияет на способность модели распознавать мелкие детали.

[22] Decoder mask dimensions ( 16-256 ?:help ) : 22

Decoder mask влияет на качество изученных масок.

Изменения каждого параметра могут по-разному влиять на производительность, и невозможно измерить влияние каждого из них на производительность и качество без тщательного тестирования.

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

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


[y] Masked training ( y/n ?:help ) : y

Отдает приоритет обучению того, что замаскировано (маска по умолчанию или примененная маска xseg), доступно только для типов лиц WF и HEAD, при отключении тренирует всю область образца (включая фон) с тем же приоритетом, что и само лицо.


[n] Eyes and mouth priority ( y/n ?:help ) : n

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


[n] Uniform yaw distribution of samples ( y/n ?:help ) : n

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

Полезно, когда в исходном наборе данных не так много снимков профиля. Может помочь снизить размер потерь.


[y] Place models and optimizer on GPU ( y/n ?:help ) : y

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


[y] Use AdaBelief optimizer? ( y/n ?:help ) : y

AdaBelief (AB) — это оптимизация модели, которая увеличивает точность модели и качество обученных лиц.

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

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


[n] Use learning rate dropout ( n/y/cpu ?:help ) : n

“learning rate dropout” используется для ускорения обучения лиц и уменьшения дрожания субпикселей — уменьшает дрожание лица и в некоторой степени также может уменьшить мерцание освещения.

В основном используется в 3 случаях:

  • перед отключением “random warp”, когда значения потерь больше не улучшаются, это может помочь модели немного обобщить лица
  • после того, как “random warp” был отключен и вы достаточно хорошо обучили модель, включение ее ближе к концу обучения приведет к более детальным, стабильным лицам, которые менее склонны к мерцанию
  • после того, как вы немного потренировались с LARD, и лица выглядят так же хорошо, как вы можете включить GAN, и “learning rate dropout” следует оставить включенным во время его работы.

Если в вашей модели включен Adabelief, “learning rate dropout” не является обязательным, но все же рекомендуется, особенно при обучении GAN.


[y] Enable random warp of samples ( y/n ?:help ) : n

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


[0.0] GAN power ( 0.0 .. 1.0 ?:help ) : 0.0

GAN расшифровывается как Generative Adversarial Network, а в случае DFL 2.0 он реализован как дополнительный способ обучения, чтобы получить более подробные и четкие лица. Этот параметр настраивается по шкале от 0,0 до 10,0, и его следует включать только после того, как модель более или менее полностью обучена (после того, как вы отключили случайную деформацию образцов и включили “learning rate dropout”).

Рекомендуется использовать низкие значения, например 0,01. Обязательно сделайте резервную копию своей модели перед началом обучения. После включения будут представлены еще две настройки для настройки внутренних параметров GAN:


[0.0] Face style power ( 0.0..100.0 ?:help ) : 0.0
[0.0] Background style power ( 0.0..100.0 ?:help ) : 0.0

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

Эта функция передаст некоторую информацию о цветовом освещении из DST в результирующее лицо, что может помочь с согласованием цветов и уменьшить мерцание, если передачи цвета недостаточно.

Рекомендуется не использовать значения выше 10. Начните с небольших значений, например 0,001–0,01, и увеличивайте их или начните с более высоких значений, например 1-2, и постепенно уменьшайте их.

Эта функция влияет на производительность, и ее использование увеличит время итерации и может потребовать от вас уменьшить размер пакета, отключить оптимизатор графических процессоров или запустить “learning rate dropout” на ЦП в результате более высокого использования VRAM.


[none] Color transfer for src faceset ( none/rct/lct/mkl/idt/sot ?:help ) : none

Эта функция используется для сопоставления цветов вашего data_src с data_dst, чтобы конечный результат имел цвет кожи, аналогичный data_dst, а конечный результат после обучения не менял цвета при перемещении лица, что может произойти, если были разные углы лица. На выбор есть несколько вариантов:

  • none: в некоторых случаях вы можете получить лучшие результаты без передачи цвета во время тренировки.
  • rct (reinhard color transfer): на основе: https://www.cs.tau.ac.il/~turkel/imagepapers/ColorTransfer.pdf
  • lct (linear color transfer): Соответствует распределению цвета целевого изображения и исходного изображения с помощью линейного преобразования.
  • mkl (Monge-Kantorovitch linear): на основе: http://www.mee.tcd.ie/~sigmedia/pmwiki/u…tie07b.pdf
  • idt (Iterative Distribution Transfer): на основе: http://citeseerx.ist.psu.edu/viewdoc/dow…1&type=pdf
  • sot (sliced optimal transfer): based on: https://dcoeurjo.github.io/OTColorTransfer/

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


[n] Enable gradient clipping ( y/n ?:help ) : y

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

Значение по умолчанию — n (отключено), но поскольку влияние на производительность настолько низкое, это может сэкономить вам много времени, предотвращая разрушение модели, если вы включите эту функцию.

Разрушение модели, скорее всего, произойдет при использовании “Face style power”, поэтому, если вы их используете, настоятельно рекомендуется включить “gradient clipping” или резервное копирование.


[n] Enable pretraining mode ( y/n ?:help ) : n

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

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


Когда обучение начнется, вы увидите такую строку

[22:59:08][#003094][0662ms][0.4956][0.7795]
  • #003094 — это текущий номер итерации
  • 0662ms — количество миллисекунд на одну итерацию

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

Слияние

Первым делом необходимо наложить лицо data_src/aligned на кадры видео data_dst.

В процессе слияния вы можете заходить в папку data_dst/merged, чтобы посмотреть, как накладывается маска. Если результат вас не устраивает, то остановите Merge и запустите его с новыми параметрами.

В секции файлы существует ограничение, на показ количества файлов — отображается только первые 1000. Если вам нужно посмотреть 2000 кадр, то можно зайти в консоль сервера. Кнопка в левом нижнем углу.

Используем вот эту команду, чтобы скопировать нужный кадр в папку workspace:

cp workspace/data_dst/merged/00107.png workspace/

Переходим в раздел “Merge frames” в пункт “Merge”. Тут тоже нужно будет выбрать параметры:

/content
Running merger.

Choose one of saved models, or enter a name to create a new model.
[r] : rename
[d] : delete

[0] : tony stark - latest : 0

Предлагают выбрать модель, просто нажимаем Enter.


Loading tony stark_SAEHD model...

Choose one or several GPU idxs (separated by comma).

[CPU] : CPU
[0] : Tesla P100-PCIE-16GB

[0] Which GPU indexes to choose? : 0

Выбираем на каком железе будем делать слияние, конечно на GPU.


Choose mode:
(0) original
(1) overlay
(2) hist-match
(3) seamless
(4) seamless-hist-match
(5) raw-rgb
(6) raw-predict

[1] : 3

Выбираем способ слияния:

  • original: отображает исходную рамку без замененного лица
  • overlay: простое наложение выученного лица поверх рамки
  • hist-match: накладывает выученное лицо на основе гистограммы.
  • seamless: использует функцию opencv poisson seamless clone, чтобы смешать новое заученное лицо с исходным.
  • seamless hist match: сочетает в себе hist-match и seamless
  • raw-rgb: накладывает необработанное выученное лицо без какой-либо маскировки

Мне всегда подходит seamless или seamless-hist-match, остальные часто дают много артефактов.


Choose mask mode:
(1) dst
(2) learned-prd
(3) learned-dst
(4) learned-prd*learned-dst
(5) learned-prd+learned-dst
(6) XSeg-prd
(7) XSeg-dst
(8) XSeg-prd*XSeg-dst
(9) learned-prd*learned-dst*XSeg-prd*XSeg-dst
[1] : 4

Выбираем режим маски.

  • dst: использует маски, полученные из формы ориентиров, созданных во время data_dst.
  • learned-prd: использует маски, полученные во время обучения. Сохраняет форму граней SRC.
  • learned-dst: использует маски, полученные во время обучения. Сохраняйте форму граней DST.
  • learned-prd*dst: совмещает обе маски, используя меньший размер обеих.
  • learned-prd+dst: сочетает в себе обе маски, используя больший размер обеих.
  • XSeg-prd: использует модель XSeg для маскировки с использованием данных из исходных лиц.
  • XSeg-dst: использует модель XSeg для маскировки с использованием данных из конечных лиц.
  • XSeg-prd*dst: совмещает обе маски, используя меньший размер обеих.
  • learned-prddstXSeg-dst*prd: объединяет все 4 режима маски, используя меньший размер всех.

Для обученных моделей на XSeg лучше всего показывает себя learned-prd*dst. Если вы не использовали xseg, то вам также может хорошо подойти learned-prd.


[0] Choose erode mask modifier ( -400..400 ) : 0

Эта функция управляет размером маски. Можно либо увеличить, либо уменьшить маску.


[0] Choose blur mask modifier ( 0..400 ) : 100

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

Обычно я устанавливаю значение от 50 до 100.


[0] Choose motion blur power ( 0..100 ) : 0

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

Опция работает, только если один набор лиц присутствует в папке data_dst/aligned. Если во время очистки у вас было несколько лиц с префиксом _1, даже если все лица одного человека, эффект не будет работать.


[0] Choose output face scale modifier ( -50..50 ) : 0

Color transfer to predicted face ( rct/lct/mkl/mkl-m/idt/idt-m/sot-m/mix-m ) : idt

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

Чаще всего идеальным вариантом становится idt или idt-m. Если вы используете hist-match или seamless hist match, то не применяйте этот параметр.


Choose sharpen mode:
(0) None
(1) box
(2) gaussian

[0] ( ?:help ) : 0

[0] Choose super resolution power ( 0..100 ?:help ) : 0
[0] Choose image degrade by denoise power ( 0..500 ) : 0
[0] Choose image degrade by bicubic rescale power ( 0..100 ) : 0
[0] Degrade color power of final image ( 0..100 ) : 0
[8] Number of workers? ( 1-4 ?:help ) : 8
  • degrade by denoise: Понижение шумов с помощью легкого размытия.
  • degrade by bicubic rescale: размывает изображение бикубическим методом

После установки последнего параметра начинается слияние.

Сохранение видео

У нас есть кадры с наложенным лицом, но нет видео. Пункт “Get result video” в разделе “Merge frames” создаст видео result.mp4 и загрузит его в гугл-диск.

Заключение

Вот и все. Это было самое полное руководство по созданию дипфеков, которое я смог из себя выдавить 😄

На чтение 5 мин Опубликовано

Содержание

  1. Что такое DeepFaceLab и зачем она нужна
  2. Установка DeepFaceLab: пошаговая инструкция
  3. Системные требования:
  4. Как установить:
  5. Этапы создания дипфейка в DeepFaceLab
  6. 1. Извлечение кадров (frame extraction)
  7. 2. Детекция лиц (face detection)
  8. 3. Обучение модели
  9. 4. Мёрджинг и рендер
  10. Кастомизация моделей и улучшения качества
  11. DeepFaceLab против конкурентов: сравнение
  12. Частые ошибки и как их избежать
  13. Заключение и FAQ

Дипфейки — это уже не просто забава для тиктокеров и реддит-пранкеров. Это мощная технология, которую используют в киноиндустрии, маркетинге, образовательных проектах и даже в геймдеве. Одним из самых популярных инструментов для их создания является DeepFaceLab — open-source платформа, ставшая де-факто стандартом среди энтузиастов и профессионалов. В этой статье мы разберём, как работает DeepFaceLab, как его установить, что нужно для старта и какие тонкости стоит учитывать. И, конечно, всё это с упором на SEO-ключи: deepfake, DeepFaceLab, создать дипфейк, обучение дипфейков, нейросеть для замены лица, подмена лица в видео и др.

Что такое DeepFaceLab и зачем она нужна

DeepFaceLab — это бесплатное ПО с открытым исходным кодом, предназначенное для замены лиц в видеороликах с помощью нейросетей. Программа активно развивается и поддерживается огромным сообществом пользователей и разработчиков. Более 95% всех дипфейк-видео в интернете создаются именно с помощью DeepFaceLab.

Ключевые возможности:

  • Распознавание и вырезание лиц из видео или фото;
  • Тонкая настройка маски для точной подмены лица;
  • Обучение модели на сотнях и тысячах изображений;
  • Поддержка видео в высоком разрешении (вплоть до 4K);
  • Модуль для слияния (merge) с гибкой настройкой границ перехода;
  • Использование кастомных моделей (SAEHD, Quick96, H128 и др.).

Зачем это нужно?

  • Для создания вирусных видео и мемов с подменой лица на знаменитостей;
  • В маркетинге — например, для персонализации контента;
  • В кино и рекламе — для дубляжа, исправления сцен без пересъёмки;
  • В образовании — например, для цифровой реконструкции исторических личностей.

Установка DeepFaceLab: пошаговая инструкция

DeepFaceLab

Перед тем как погрузиться в создание дипфейков, нужно подготовить машину и установить необходимые компоненты. DeepFaceLab не самый «лёгкий» софт, особенно если у вас ноутбук — всё-таки мы работаем с видео, картинками и нейросетями. Вот что нужно:

Системные требования:

  • ОС: Windows 10 или 11 (официальная поддержка под Windows);
  • GPU: Видеокарта NVIDIA (рекомендуется от 6 ГБ видеопамяти);
  • Процессор: Не ниже Intel i5 / Ryzen 5;
  • RAM: от 16 ГБ;
  • Python: версия 3.7–3.9;
  • Свободное место: от 50 до 200 ГБ (зависит от длительности видео);
  • Дополнительно: Git, ffmpeg, CUDA (если используете GPU).

Как установить:

  1. Скачайте архив DeepFaceLab с GitHub (есть разные сборки: для CPU, GPU, с prebuilt-библиотеками);
  2. Распакуйте в удобную директорию;
  3. Откройте терминал (или .bat-файл, если используете GUI) и проверьте, запускается ли интерфейс;
  4. Установите Python-зависимости из requirements.txt или используйте conda-окружение.

Важно: большинство ошибок при запуске возникает из-за несовместимости драйверов, Python-библиотек или нехватки видеопамяти. Следите за логами и используйте актуальные версии CUDA и cuDNN.

DeepFaceLab


Этапы создания дипфейка в DeepFaceLab

Создание дипфейка — это не кнопка “сделать красиво”. Это процесс, состоящий из нескольких ключевых этапов. Чтобы добиться по-настоящему качественного результата, важно не пропускать ни один шаг.

  • Видео донора (исходное лицо) и видео-цели (куда вставляем лицо)
  • Кадры нарезаются с определённым fps (обычно 25–30)
  • Рекомендуется использовать видео в хорошем качестве (HD и выше)

2. Детекция лиц (face detection)

  • С помощью встроенных скриптов или моделей (MTCNN, S3FD)
  • На этом этапе модель ищет лица и сохраняет их как .png
  • Маски лиц автоматически формируются и пригодны для обучения

3. Обучение модели

  • Выбор модели: SAEHD — самая гибкая и распространённая
  • Настройка параметров: batch size, target size, number of iterations
  • Время обучения: от 2–3 часов (демо) до 2–3 суток (качественная модель)

4. Мёрджинг и рендер

  • Слияние лица с оригинальным видео
  • Подстройка цвета, границ, света
  • Итоговое видео — рендеринг с финальной маской и улучшениями

deepfacelab 1


Кастомизация моделей и улучшения качества

DeepFaceLab поддерживает гибкую настройку моделей. Например, вы можете:

  • Увеличить размер лица (input/output size), чтобы повысить детализацию;
  • Включить опцию GAN для генерации реалистичных переходов на границах лица;
  • Обучить модель на своём датасете, где персонаж двигается в нужном стиле;
  • Настроить DFL-mask и параметры цвета для более естественного тона кожи.

Для узкоспециализированных задач (например, подмена лица в медицинском видео или в кинофрагменте с особым освещением) кастомизация решает 90% проблем с качеством.


DeepFaceLab против конкурентов: сравнение

Платформа Open Source Уровень сложности Качество видео Поддержка GPU
DeepFaceLab Средне/высокий 🔥🔥🔥🔥🔥
FaceSwap Средний 🔥🔥🔥
DeepFaceLive Низкий 🔥🔥
Zao / Reface Очень низкий 🔥

Частые ошибки и как их избежать

  • >Некачественные исходники — низкое разрешение, смазанные кадры = плохой дипфейк.
  • Недостаточно итераций — не спешите. 10K шагов — это только начало.
  • Перегрев GPU — особенно при обучении. Используйте мониторинг.
  • Пропущенные шаги препроцессинга — не забывайте выравнивание и маски.
  • Отсутствие цветокоррекции — результат выглядит как “вырезанное лицо сверху”.

Заключение и FAQ

deepfakelab 2 2

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

FAQ:

  • Сколько по времени обучается модель? От нескольких часов до нескольких суток.
  • Нужен ли интернет для работы? Только для загрузки файлов. Всё остальное — оффлайн.
  • Можно ли использовать на Mac? Неофициально — через эмуляторы или Docker, но с трудом.
  • Подходит ли для новичков? Да, если вы не боитесь гуглить ошибки.

Deepfake — это сила. Но сила, как известно, требует ответственности. Используйте с умом. И не забудьте — ты можешь быть следующим, кто создаст свой мини-шедевр нейросетевой магии.

Подпишитесь на наш telegram-канал, там еще больше инструкций, примеров и пользы по Ai для бинеса, работы и дома.

Эта небольшая заметка не про комплектующие или их разгон, а про первичное знакомство с ПО, которое помогает «утилизировать» мощь наших ПК для создания видео, получивших название DeepFake (и чем они мощнее — тем более качественный фейк мы сможем сделать за более короткое время). Это мой первый опыт написания «статьи», надеюсь блин выйдет не слишком уж большим комом. :)

DeepFake, DeepNude, Deep… — всё чаще слова с данным корнем звучат с экранов ТВ или пестрят в заголовках статей и блогов, заманивая сочной провокационной картинкой на обложке. Нейросети всё лучше учатся распознавать или изменять наши лица, тела, голоса. Всё труднее становится заметить эти подделки даже профессионалам. Источник скандалов и дискредитации известных персон, удел мошенников или просто обычное хобби и весёлый досуг? Всё зависит от чистоты помыслов людей, в чьих руках (особенно если прямых) оказывается подобное ПО. Моё внимание к данного рода программам привлекли видео, где  Сталлоне остался «Один дома» и был вместо Арнольда в «Терминатор 2». Захотелось попробовать и узнать — насколько реально освоить это ремесло человеку, не обладающему знаниями в этой области, а также и не имеющему особых навыков использования фото- и видеоредакторов?! Попробуем разобраться вместе!

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

Однако постепенно, шаг за шагом изучая обучающие видео и pdf файл обучения, пробуя что-то с этим всем добром сделать, я понял, что это — большой труд, который проделал автор данного ПО, чтобы облегчить наше бремя создания видеофейков. Сильно глубоко вдаваться в сам процесс создания DeepFake (далее DF) не буду: для этого есть, уже упомянутые выше — видео на ютуб от автора, других умельцев и мануал (или писать отдельную статью). Но некоторые пояснения, которые возможно смогут помочь людям, решившим бросить вызов коварным нейросетям, я, с вашего позволения, попробую сообщить.

1. Про железо, куда же без него родного! Кроме очевидного (конец первого абзаца), тут есть некоторые нюансы: т.к. лимитирующим по времени этапом создания DF является тренировка нейросети (далее ИИ), которое происходит на видеокарте (CUDA предпочтительнее, но можно даже на встройке!), то именно её параметры будут нам важнее, чем CPU. Мощь ядра и большой объём VRAM — ускоряют процесс и позволяют использовать более «тяжёлые» настройки, влияющие как на скорость некоторых операций, так и качество итогового видеоматериала. Автор пакета выставил следующие требования к комплектующим:
Минимальные системные требования: Windows 7 и выше, процессор с поддержкой SSE инструкций, 2Gb ОЗУ с подкачкой, OpenCL-совместимая видеокарта (NVIDIA, AMD, Intel HD Graphics)
Рекомендуемые системные требования: Windows 7 и выше, процессор с поддержкой AVX инструкций, 8Gb ОЗУ, NVIDIA видеокарта 6GB видео памяти.

Из чего можно сделать вывод, что лучше использовать карты уровня GeForce GTX 1060 (и более поздние аналоги) для nVidia или AMD Radeon 470 и выше. Мой конфиг: Ryzen 7 1800X @ 4.0 GHz, GeForce GTX 1080 Ti. 

2. Отбор видеоматериала источника лица и видео, из которого делают DF — огромное, если не решающее, влияние на итоговый результат. Лучше использовать FHD исходники, ну или уж хотя бы честный HD. Выбор персонажей для источника лица и под замену — второй кит, на котором держится успешность нашего фейка. Если вы заменяете, например, блондинку с прямыми волосами на брюнетку с пышными — есть не иллюзорный шанс получить плохую узнаваемость героя DF. Худых моделей легче «вписать» в толстых, что наверное логично. Есть конечно исключения — вдруг вы, наоборот, хотите довести фэйк до абсурда и вписываете специально какие-то нелепые соотношения моделей (старика в ребёнка и т.д.). Такой подход тоже вполне имеет право на жизнь! Последний этап «пробоподготовки» — тщательно проверить: какие лица выделил детектор лиц, а он выделяет ВСЮ массовку! И приходится переназначать такие кадры вручную. Тренироваться лучше начинать на простых сценах, где 1 человек, и он более менее статичен: пресс-конференции, монологи и всё в таком духе. По мере увеличения способностей, повышать сложность сцены. Ещё очень важный момент при отборе лиц: SRC — это лицо, которые мы хотим вставить. DST — лицо, заменяемое в нашем фэйке. SRC лицо — нужно очень серьёзно «просеивать»: удалять кадры, где чем-то закрывается лицо, размытые, смазанные и т.д. Оставлять только чёткие! А DST наоборот — нам нужны абсолютно все кадры с данным лицом, а иначе потом будут пропуски кадров, и настоящий герой видео будет возвращаться в фэйк. 

3. Тренировка ИИ. Сложный процесс, имеющий кучи, непонятных не только новичку, но и чуть более опытным пользователям, настроек (в продвинутых моделях), поэтому лучше начинать либо с H64 или с DF (в данном случае это название модели для тренировки), т.к. они проще. Хотя можно запускать и более сложные модели, такие как SAE и SAE HD, в режиме «по умолчанию», главное чтобы хватило VRAM, иногда надо снижать некоторые параметры. Тренировать ИИ рекомендуют ОТ одного дня. Но на картах уровня 1080ti и выше, на мой взгляд, это время можно сократить, но исходя из результата, который выводится на экран в процессе тренировки. Пример:

Выложу свой стандартный алгоритм создания DF, который поможет в самостоятельном освоении:

  1. 2) extract images from video data_src (источники лиц — им заменяют)
  2. 3.2) extract images from video data_dst FULL FPS (лицо, которое будет заменено)
  3. 4) data_src extract faces S3FD all GPU (детектирование лиц источника)
  4. [4.1) data_src check result] (удаляем всех левых персонажей, ошибочные кадры — крупные массивы фото, остальное отсеем позже)
  5. 4.2.2) data_src sort by similar histogram
  6. 4.1) data_src check result
  7. 4.2.1) data_src sort by blur
  8. 4.1) data_src check result (удалить мутные)
  9. 4.2.6) data_src sort by best (автоматика сама отбирает лучшие лица и удаляет ненужные, можно сразу использовать только этот пункт и потом вручную проверить, не осталось ли там «неликвида»)
  10. 5) data_dst extract faces S3FD all GPU (детектирование лица «под замену»)
  11. [5.1) data_dst check results]
  12. 5.2) data_dst sort by similar histogram
  13. 5.1) data_dst check results
  14. 5.3) data_dst sort by blur (Ручная проверка и удаление кадров, где несколько лиц или не совсем корректно определены контуры нужного лица в папке DeepFaceLab\workspace\data_dst\aligned_debug).
  15. 5) data_dst extract faces MANUAL RE-EXTRACT DELETED
    RESULTS DEBUG (восстановление удалённого и последующая ручная разметка маски лица)
  16. 6) train SAE HD  (тренировка модели, можно брать другую использовав соответвующий *.bat файл)
  17. 7) convert SAE HD (замена dst лица на src, используя натренированную ранее модель)
  18. 8) converted to mp4 («склеивание» стоп-кадров в видео)

Здесь «2) extract images from video data_src» — это «батник»  «2) extract images from video data_src.bat» из папки «DeepFaceLab» и т.д. Эх, наверное сумбур уже пошёл, и я тут чутка перегрузил терминами, которые сложно воспринимать без подробного описания,  а писать полную статью с подробным описанием всех действий — я в данный момент не потяну. При просмотре самых вводных видео от автора ПО — многое встанет на свои места. Если не хотите пока забивать голову, можно бегло пробежать по видео ниже, чтобы понять приблизительный уровень DF у человека, который неделю (плотно) пытался разбираться в этом вопросе. И сделать какие-то выводы о дальнейшей целесообразности самостоятельных попыток создания DeepFake видео.


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

Самое первое видео, его исходники идут в комплекте DeepFaceLab, т.е. и предназначены для первых тренировок (файлы data_dst.mp4 и data_src.mp4 в папке «DeepFaceLab\workspace«, свои видеофайлы вы в дальнейшем должны называть также, чтобы программа их подхватывала и использовала).

Тут особо и комментировать нечего, ляп на ляпе. По сути, я в тот момент просто жал почти везде «Enter» и всё было в режиме «по умолчанию», т.к. я ещё мало что понимал и не умел менять настройки (модели масок, цветовые и почти все прочие). Это делается уже почти в конце, на этапе «7) convert SAE HD» из алгоритма выше. Время тренировки модели — около 3-4 часов.

Далее пошёл этап набивания шишек (я многие из них уже озвучил ранее): когда наше видео по качеству хуже чем источник — получается, что очень сильно заметны грани заменённого лица. Один  раз я не заметил, что детектор не взял некоторые лица, и они потом исчезли в видео. Выбор слишком сложных динамических сцен, совершенно разное освещение SRC и  DST лиц — тоже получается слишком «топорная» вставка.
Пример ошибки со вставкой Поклонской в Шурыгину — она довольно тяжело узнаётся из-за совсем разных причёсок и цвета волос:

Тут на миг пропадает лицо Греты (замена на неизвестную широкой общественности журналистку):

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

Если кого-то заинтересовала данная тема — скачивайте DeepFaceLab, устанавливайте и вперёд! Какие-то моменты могу попробовать подсказать, но в Интернете достаточно подробных рукописных и видеогайдов.

Спасибо за внимание!

Telegram-канал @overclockers_news — теперь в новом формате. Подписывайся, чтобы быть в курсе всех новостей!

Начальная дипфейкология: как сделать, как распознать (испытано на себе)

Уровень сложностиПростой

Время на прочтение13 мин

Количество просмотров15K

Вокруг темы дипфейков множество слухов и домыслов. Cам стараюсь не попасть впросак, когда комментирую для журналистов эту тему. Например. Можно ли подделать голос в телефонном разговоре, то есть налету? (пока нет) Увеличивается ли число мошенничеств с дипфейками? (Достаточной статистики нет. Если неаккуратно оценивать ситуацию, можно тысячи процентов насчитать, всё ж пока исчисляется «от плинтуса»). Можно ли создать дипфейк дендрофекальным способом, работая только с тем, что есть в открытом доступе?

А вот тут надо проверять, потому что однозначного ответа без дополнительных «но» нет. В качестве начальных условий поставил такие: можно ли сделать качественный дипфейк (видео и аудио), не особо вникая в вопрос? Результаты под катом.

А еще бонусом, на основе полученных результатов, – разобрал ролик под названием «10 лучших Дипфейк видео». На их примере предлагаю и вам поупражняться в поиске признаков подделки.

Disclaimer! Понятно, что актуальность этой статьи будет утрачиваться очень быстро. Поэтому не стесняйтесь делиться в комментах ссылками на новые инструменты и сервисы. Ещё заранее прошу прощения за качество некоторых гифок. Т.к. у Хабра есть ограничение на размер картинок, пришлось в некоторых ухудшить качество.

Актуальность

Кто-то радуется развитию технологий, а у меня взгляд с другой стороны – для «ибэшников» это риски. Массового применения дипфейков в корпоративном секторе, к счастью, пока не видно. Но риски точечных атак очень вероятны. Вот несколько примеров использования дипфейков для обмана и мошенничества.

Раз

Начнём с безобидного. Популярная японская байкерша-блогер оказалась 50-летним мужчиной — он притворялся девушкой с помощью фильтров FaceApp. Обман раскрылся случайно: подписчики увидели отражение в боковом зеркале мотоцикла на одном из снимков, где вместо молодой девушки было лицо взрослого мужчины. А до этого их смутила волосатая мужская рука на фото.

Цзунгу (так на самом деле зовут блогера) рассказал журналистам, что для перевоплощения использовал фильтры приложения FaceApp: помимо настроек «красоты», они позволяют поменять пол и возраст на фото.

По его словам, он просто хотел почувствовать себя интернет-знаменитостью, но решил, что в сети все хотят видеть «красивую девушку, а не пожилого дядю».

Два

В марте 2019 управляющий директор британской энергетической компании был ограблен на €220 000 (около $240 000). Он отправил эти деньги фирме-поставщику из Венгрии, потому что его босс, глава материнской фирмы в Германии, несколько раз подтвердил ему такую инструкцию. Но на самом деле какой-то хитрый злоумышленник просто использовал софт с AI-технологиями, чтобы в режиме реального времени заменять лицо и голос руководителя, и требовать, чтобы тот заплатил ему в течение часа.

Сообщение исходило с адреса босса в Германии, в подтверждение британскому директору был направлен e-mail с контактами. Предположить, что что-то идёт не так, можно было разве что по требованию босса провести всю сделку как можно быстрее, но это далеко не первый аврал, который случался в их бизнесе.

Три

Китай. Мошенники покупали на чёрном рынке фотографии людей в высоком разрешении и их персональные данные ($5-38 за комплект). Покупали «специально подготовленные» смартфоны ($250), которые умели имитировать работу фронтальной камеры, на самом деле адресату (госведомству) передавалось сгенерированное дипфейк-видео.

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

Четыре

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

Это далеко не все новости. Регулярно всплывает что-то ещё. То исследование выйдет, что тесты банков для проверки личности «чрезвычайно уязвимы» для deepfake-атак. То банки просят ЦБ провести эксперимент по использованию видеозвонков для удалённого открытия счетов новым клиентам.

Тем не менее можно сделать вывод, что на данный момент качественные дипфейки используются чаще как элемент большой сложной кампании. Простыми же, которые легко тиражировать (например, deepnude), бьют по площадям.

Подделка видео

Начнем с теории. В этом вопросе я опирался на работу «Deepfakes Generation and Detection: State-of-the-art, open challenges, countermeasures, and way forward. В ней авторы выделяют 5 техник:

  1. Face-swapping. «Пересадка» лиц. Чаще всего дипфейками именуют ролики, созданные с помощью этой техники.

  2. Lip syncing. Буквально «синхронизация губ». Здесь пересадок не происходит. Губы «жертвы» на видео двигаются синхронно с подменённой аудиодорожкой. Как дубляж.

  3. Puppet master. Буквально «кукловод». В идеале, полная передача характеристик лица «донора» на лицо «жертвы». Как делали «людей» из племени Нави в Аватаре Джеймса Кэмерона.

  4. Face Synthesis and Attribute Editing. Буквально «синтез лиц и редактирование атрибутов». В отличие от Puppet Master, здесь идёт работа с одним лицом. Его можно состарить, омолодить, изменить цвет, причёску, дорисовать очки, шляпу и т.п. Из относительно свежих ярких представителей я бы сюда отнёс фоторедактор Lensa, хотя понятней иллюстрирует идею Snapchat со своими фильтрами.

  5. Audio deepfakes. Авторы работы к этому разделу отнесли всё, что связано с аудио, хотя лично я бы разделил на 3 категории: искажение голоса, синтезаторы, клонировщики.

Также все инструменты можно разделить на 2 большие группы: те, которые осуществляют подмену в режиме реального времени и те, кто генерирует результат постфактум.

Проще познакомиться с плюсами и минусами каждой техники на конкретных примерах. Разберем несколько приложений/сервисов. Какие-то пробежим, на некоторых остановимся подробнее.

MSQRD

Несмотря на множество аналогичных по идее приложений (например, Reface), начать хочется с MSQRD, потому что на моей памяти, это первая программа для создания дипфейков, которая появилась в публичном доступе. Белорусский стартап, который за 1 миллиард долларов был куплен потом ТемиКогоВРоссииНельзяБезЗвёздочкиНаписать.

В примере ниже MSQRD использует Face-swapping\Face Synthesis and Attribute Editing.

Плюсы подобных инструментов:

  • Низкий порог вхождения по знаниям. Не нужно дополнительно штудировать мануалы.

  • Низкий порог вхождения по технике. Обработка происходит на стороне сервиса.

  • Низкий порог вхождения по затраченному времени. Результат получаем практически мгновенно.

  • Бесплатно.

Минусы подобных инструментов:

  • Нет свободы воли. Перечень сцен и героев для подмены ограничен создателями приложения.

  • Цифровой след. Регистрация, водяные знаки и т.п.

DeepFaceLab

Пожалуй, самый известный, самый замануаленный, самый проработанный и прочие «самый» инструмент. Яркий представитель техники Face-swapping, обойти вниманием который было нельзя.

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

Мда…Совсем не то, что ожидал. Почему? А потому что решено ведь было следовать принципу, вынесенному в начало статьи: сделать качественный дипфейк (видео и аудио), не особо вникая в вопрос. В случае с DeepFaceLab это явно не получится. Нужно учитывать довольно много нюансов. Перед обучением нейронки нужно как минимум учесть:

  • качество видео «донора» и «жертвы» (свет, цвет и т.д.);

  • масштаб пересаживаемых лиц (чтоб не получилось, как у меня, когда маленькая картинка растягивается и мылит);

  • наличие в обоих видео всех положений головы (особенно, если собираетесь сильно ею вертеть);

  • необходимость удалить «плохие» кадры из наборов данных перед началом обучения (кадры без лица, размытые кадры, кадры с посторонними предметами, перекрывающими лицо и т.п.).

Красным помечены "плохие" кадры, которые следовало удалить из набора данных

Красным помечены «плохие» кадры, которые следовало удалить из набора данных

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

Именно в нём регулируется размытие, размер маски, её положение, цвет и т.д.

Если же подходить к вопросу в стиле «Далее-Далее-Готово», то результат получится, как у меня.

Плюсы подобных инструментов:

  • Свобода воли. Можно создавать произвольный контент.

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

  • Минимальный цифровой след.

  • Бесплатно.

Минусы:

  • Высокий порог вхождения по знаниям.

  • Высокий порог вхождения по затраченному времени.

  • Нельзя сделать подмену в режиме реального времени.

Wav2Lip

Настала пора инструмента, который использует технику Lip syncing. И хоть подходящего железа под рукой не было, проект позволял поиграться с помощью Google Colab. Вооружившись инструкцией, получил результаты:

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

Кстати, с русской речью тоже всё получается неплохо.

Плюсы подобных инструментов:

  • Свобода воли. Можно создавать произвольный контент.

  • Меньше возни с предварительной подготовкой данных, если сравнивать с DeepFaceLab.

  • Больше достоверности, так как вместо «полной пересадки» искажается небольшой участок рта.

  • Минимальный цифровой след (если не работать через Colab).

  • Бесплатно.

Минусы:

  • Высокий порог вхождения по знаниям.

  • Высокий порог вхождения по технике (если не работать через Colab).

  • Высокий порог вхождения по затраченному времени.

  • Нельзя сделать подмену в режиме реального времени.

А ещё желательно избегать неоднотонных фонов. В противном случае область подмены будет бросаться в глаза.

Avatarify

Программа использует технику Puppet master и позволяет в режиме реального времени «оживить» какое-нибудь фото. Есть известный ролик, который показывает возможности этого решения: «Илон Маск» вошел в конференцию в зуме». Обратите внимание, «Илон Маск» почти не шевелит головой. Только глазами. Он как восковая фигура. Но некоторые и в жизни не демонстрируют живость мимики или пребывают в разных состояниях, так что вполне можно и обмануться. Голос, понятно, совсем не подделан – подробнее о синтезе речи в режиме реального времени поговорим ниже.

Потенциал здесь определённо есть, но пока всё же этот проект не рассматриваю, как серьёзную угрозу. Уж слишком много факторов должны сойтись, чтобы на выходе получился приемлемый результат. К примеру, требуется определённый перечень софта и железа. Причём, подозреваю, что в ряде случаев нужно будет точное попадание в версию, а не «от 3.5 и выше». У меня так и не получилось запустить проект (хотя может дело в руках).

Если посмотреть на успехи тех, кто смог стартануть, выяснится, что нужно подбирать подходящую позу, угол и т.п., чтобы аватар не пучило. Смотрите сами:

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

Плюсы подобных инструментов:

  • Подмена в режиме реального времени.

  • Свобода воли. Перечень сцен и героев для подмены не ограничен.

  • Минимальный цифровой след (для некоммерческих инструментов).

  • Бесплатно (для некоммерческих инструментов).

  • Низкий порог вхождения по знаниям (для коммерческих инструментов).

Минусы:

  • Высокий порог вхождения по знаниям (для некоммерческих инструментов).

  • Высокий порог вхождения по технике (для некоммерческих инструментов).

  • Платно (для коммерческих инструментов).

  • Цифровой след (для коммерческих инструментов).

Что до Face Synthesis and Attribute Editing, то в части создания дипфейков я склонен рассматривать эту технику как продолжение Puppet Master с аналогичными преимуществами, ограничениями и выводами.

Подделка аудио

Настало время попробовать подделать голос. По одной из версий, которые читал про первый в мире инцидент с применением deepfake, голос жертвы не клонировали. Был найден пародист с изначально похожим на жертву голосом, который затем сымитировал акцент, манеру речи и прочее. Чтобы было ещё более похоже, голос дополнительно искажали в момент разговора. С этого и начнём.

«Искажатели»

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

Плюсы подобных инструментов:

  • Можно найти бесплатные.

  • Работа в режиме реального времени.

  • Низкий порог вхождения по технике.

  • Низкий порог вхождения по знаниям.

Минусы:

  • Вряд ли получится сымитировать любой голос.

  • В теории, подделанный голос можно преобразовать обратно и получить изначальный голос говорящего.

Синтезаторы речи

Принцип работы для пользователя прост: вводим текст – нам его озвучивает голос. Часто такие инструменты представлены в виде сервисов.

Как видите, есть опции по выбору языка, скорости, «актёра» и тона речи. Некоторые сервисы предлагают синтезировать актёра под заказ.

Плюсы подобных инструментов:

  • Можно найти бесплатные.

  • Низкий порог вхождения по знаниям.

  • Низкий порог вхождения по технике.

  • Низкий порог вхождения по времени.

Минусы:

  • Свобода воли. Произвольный голос не подделать.

  • Ограничения инструмента (не во всех сервисах даже есть возможность изменять ударение).

  • Цифровой след.

  • Не работает в режиме реального времени.

Клонирование голоса + синтезаторы речи

Логичным развитием синтеза речи является синтез речи конкретного человека. Из бесплатных инструментов я попробовал этот.

Упрощённо логику работы можно описать так:

  1. Добываем аудио «жертвы», чей голос будем поддерживать. Чем выше качество записи, тем лучше. В идеале wav, на котором только голос человека без посторонних шумов.

  2. Готовим набор данных. Нарезаем аудио на отдельные фразы, транскрибируем и всё это дело сохраняем определённым образом.

  3. ВЖУХ (запускается обучение нейросети).

  4. Пишем текст, синтезатор его озвучивает подделанным голосом.

Хватает инструкций, где подробно показан каждый этап. Результатом, к сожалению, поделиться не могу, т.к. действовал через Colab и добиться чего-либо приемлемого на выходе не получилось. В основном из-за того, что если оставить обучаться нейронку надолго, то что-то шло не так и валилось с ошибкой. Если же обучение шло недолго, сгенерированный голос был не особо похож на «жертву».

Плюсы подобных инструментов:

  • Бесплатно.

  • Свобода воли. Можно подделывать любой голос.

  • Минимальный цифровой след (если запускать на своей технике, естественно).

Минусы:

  • Высокий порог вхождения по знаниям.

  • Высокий порог вхождения по технике.

  • Высокий порог вхождения по времени.

  • Ограничения инструмента (ударения, интонации и т.п.).

  • Не работает в режиме реального времени.

Клонирование + синтез. Всё в режиме реального времени.

Логичное развитие логичного развития. Пока сказать об эффективности такого подхода мне нечего, не дошли руки (и техника) попробовать. Но различные инструменты, как коммерческие, так и бесплатные, уже есть. Вот для видео, вот для аудио. Наверняка кто-то в скором времени и вместе соберёт, если уже не собрал. Как минимум, на поверхности лежит идея запуска Real-Time-Voice-Cloning в паре с Avatarify.

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

Как выявлять дипфейки без специализированных инструментов и сервисов. Практика.

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

  • Выразительность;

  • Одышка;

  • Эмоции;

  • Ударения;

  • Слова-паразиты;

  • Специфические дефекты;

  • Темп.

А ведь в реальности у каждого инструмента, с помощью которого создаётся подделка, есть свои ограничения.

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

  1. Контекст.

  2. Определить технику.

  3. Вспомнить ограничения.

  4. Искать артефакты в местах, которые следуют из п.2.

Проиллюстрирую на примерах, о которых упоминал в самом начале статьи (ролик под названием «10 лучших Дипфейк видео»). В качестве дополнительных инструментов будет задействован любой проигрыватель, который способен воспроизводить видео покадрово.

Пример 1

Тут, как и во многих других подделках, нет смысла идти дальше шага Контекст. Тем не менее, пройдёмся по алгоритму:

  1. Используется техника Face Swapping.

  2. Ограничения касаются положения головы при поворотах на большие углы.

  3. Нейронка просто не знает, как нарисовать правильно, пытается до последнего показывать оба глаза. В итоге лицо получается похожим на блин. Как такое произошло? Когда готовили дата-сет изображений Стива Бушеми, скорее всего не «скормили» нейронке фото в нужном ракурсе.

Пример 2

Если уменьшить скорость воспроизведения или смотреть покадрово, можно сразу увидеть несколько артефактов. Например, несовпадение текстуры кожи.

Ещё переборщили с размытием. Во время движения весьма бросается в глаза.

На крупных планах «мыло» видно ещё больше.

На одном кадре нейросеть даже перестаралась и попыталась нарисовать лицо там, где его не должно быть.

Также на крупных планах вы сможете найти эффекты «дрожания» наложенного лица. А пока пройдёмся по алгоритму:

  1. Используется Face-swapping.

  2. Если не попали с размерами лиц «донора» и «жертвы», лицо донора будет мылить. Для более качественной «пересадки» используется размытие границ, но с ним можно переборщить. Лицо в каждом кадре накладывается без оглядки на прошлое и будущее. Как следствие, лицо может «дрожать».

  3. Удалось с лихвой найти артефакты:

    1. Лоб выделяется, он блестит, а другие части лица нет.

    2. Очень хорошо видно размытие по границе «маски».

    3. На крупных планах видно, как отличается текстура кожи.

    4. Есть моменты, когда голова (лоб, шея, уши) «жертвы» не двигается, а лицо «донора» немного смещается. Дрожание.

Пример 3

  1. Используется Face-swapping.

  2. У подобных инструментов наблюдаются проблемы с отрисовкой «артефактов» (очки, пирсинг, татуировки и т.п.). Часто проблемы при поворотах головы. А ещё при изменении дистанции до камеры (ближе-дальше).

  3. Покажу на конкретных кадрах.

Во-первых, очки. Дужек вы не найдёте на протяжении всего видео.

Во-вторых, при резких поворотах головы пропадают не только очки, но и само наложенное лицо. Фрагмент ниже длится всего 1 секунду, поэтому замедлил его в 4 раза и добавил стоп-кадр на 2 секунды.

В-третьих, при изменении расстояния от объекта до камеры можно увидеть, как заменённое лицо дрожит, «бликует» и, в конце концов, вовсе исчезает в мучениях. Последние кадры остановил, чтобы лучше был виден момент перехода.

Пример 4

Таким бы мог быть Николас Кейдж (если бы захотел).

Это довольно качественная подделка, поддельное лицо почти всегда в порядке. Даже когда разлетаются волосы и частично его перекрывают. Если смотреть в динамике – полный порядок. Но если вспомнить про технику (face-swapping) и ограничения, то снова надо обратить внимание на повороты головы. При покадровом просмотре на предельных углах лицо снова становится как блин. Но главное – есть явное место, где нейросеть не справилась.

Пример 5

Бывает так, что всё сделано настолько качественно, что подкопаться можно чуть ли не к паре кадров. В приведённом примере я нашёл только 1 огрех (нос убежал в самом конце ролика). А вы заметили ещё что-нибудь?

Пример 6

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

Эффект будет более заметен, если открыть видео в видеоредакторе и зациклить момент, добавив реверс.

Пример 7

Теперь пример с использованием другой техники.

Puppet Master или Lip Syncing. Обратите внимание на то, как у поддельной Ким Кардашьян ведёт себя нос.

В видеоредакторе на реверсе эффект ещё больше выражен.

Пример 8

И, пожалуй, последний пример. Тоже представитель Puppet Master\Lip Syncing.

При всей красоте и качественности ролика, подделку можно заметить. Есть один явный момент, когда на картинку напал паралич, а двигается только рот.

Кстати, здесь нет стоп-кадра, всего лишь замедлил фрагмент в 3 раза.

Выводы

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

  • Если по-прежнему будут высокие пороги входа по технике, времени, знаниям или деньгам.

  • Если не появится «профит», который будет перекрывать понесённые затраты на создание дипфейка.

  • Если не только появятся, но и будут использоваться инструменты для выявления подделок.

Пока же общая рекомендация по выявлению дипфейка такая: думайте головой. Не переставая этого делать, следуйте алгоритму:

  1. Контекст.

  2. Определить технику (для видео их всего-то 4).

  3. Вспомнить ограничения.

  4. Искать артефакты в местах, которые следуют из п.2.

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Тканевые маски гарньер инструкция
  • Кагоцел противовирусное лекарство инструкция
  • Форма 10 инв приложение 15 к инструкции 180
  • Oneodio a70 инструкция на русском языке
  • Полидон сера инструкция по применению