[Перевод] Я создал свой собственный дипфейк за две недели и $552
Создавая это видео, я научился многому
Технология дипфейков использует глубокие нейронные сети для убедительной замены на видео одного лица другим. У этой технологии есть очевидный потенциал для злонамеренного использования, и она становится всё более распространённой. По поводу социальных и политических последствий этого тренда было написано уже много хороших статей.
И это не одна из них. Вместо этого я сам поближе ознакомлюсь с этой технологией: как работает ПО для дипфейков? Насколько сложно их создавать, и насколько хорошими получаются результаты?
Я решил, что лучше всего ответить на эти вопросы, создав собственное дипфейк-видео. Редакция выделила мне сколько дней на то, чтобы поиграться с ПО и $1000 на оплату облачных вычислений. Через пару недель я получил результат, представленный на видео в начале статьи. Начал я с видео Марка Цукерберга, выступающего перед конгрессом, и заменил его лицо на лейтенант-командера Дейту (Брента Спайнера) из фильма «Звёздный путь: следующее поколение». Всего было потрачено $552.
Видео получилось неидеальным. Не передаются все детали лица Дейты, и если присматриваться, видно артефакты по краям.
И всё же довольно примечательно, что такой новичок, как я, может создать достаточно убедительное видео, причём так быстро и дёшево. Есть все основания полагать, что дипфейк-техологогия в следующие года будет становиться только лучше, быстрее и дешевле.
В данной статье я проведу вас за руку по моему дипфейк-пути. Я объясню каждый шаг, который необходимо предпринять для создания дипфейк-видео. По пути я буду объяснять, как работает эта технология и какие у неё есть ограничения.
Дипфейкам нужно много вычислительных мощностей и данных
Мы называем эти видео дипфейками [«глубокими подделками»] потому, что они создаются с использованием глубоких нейросетей. За последнее десятилетие специалисты по информатике обнаружили, что нейросети становятся всё более мощными при добавлении дополнительных слоёв из нейронов. Но чтобы раскрыть весь потенциал глубоких нейросетей, нужно очень много данных и огромные вычислительные мощности.
То же верно и для дипфейков. Для данного проекта я арендовал виртуальную машину с четырьмя мощными видеокартами. И даже со всеми этими лошадками на обучение моей модели ушла почти неделя.
Мне также требовалась гора изображений Марка Цукерберга и Дейты. У меня получилось видео длиной 38 сек, но для обучения мне требовались куда как более длинные видеозаписи, причём как Цукерберга, так и Дейты.
Для этого я скачал кучку видео, содержащих их лица: 14 роликов с клипами из «Звёздного пути» и девять роликов с Марком Цукербергом. Среди последних были формальные доклады, несколько интервью по телевизору и даже видео, на котором Цукерберг у себя во дворе готовит барбекю.
Я загрузил все эти клипы в iMovie и удалил кадры, не содержавшие лиц Цукерберга и Дейты. Также я порезал на части самые длинные отрывки. Дипфейк-программе нужно не просто огромное количество изображений, но большое количество разных изображений. Нужна была съёмка лиц с разных ракурсов, с разными выражениями и при разном освещении. Часовое видео, на котором Цукерберг читает доклад, может дать не более ценных кадров, чем пятиминутный его отрезок, поскольку оно снято с одного и того же ракурса, в одном освещении и показывает одно и то же выражение лица. Поэтому я обрезал несколько часов видео до 9 минут с Дейтой и до 7 минут с Цукербергом.
Faceswap: пакет программ для создания дипфейков
Затем настало время использовать ПО для дипфейка. Сначала я попробовал использовать программу DeepFaceLab и у меня получилось создать довольно грубое видео. Затем я попросил совета на форуме SFWdeepfakes, и тогда несколько человек посоветовало мне Faceswap. Люди отметили, что у этой программы больше функций, лучше документация и лучше онлайн-поддержка. Я решил последовать их совету.
Faceswap работает на Linux, Windows и Mac. В пакете есть инструменты для работы на всех этапах создания дипфейка, от импортирования изначальных видеороликов до создания законченного дипфейк-видео. ПО не является интуитивно понятным, однако с ним идёт подробный обучающий материал, покрывающее все шаги процесса. Материал написан создателем Faceswap Мэттом Торой, который также очень здорово помог мне в чате на канале Deepfake в Discord.
Для Faceswap требуется мощная графическая карта. Я знал, что мой MacBook Pro не справится с этим. Я попросил техников нашей редакции арендовать мне виртуальную машину под Linux у лидирующего провайдера облачных сервисов. Я начал с виртуалки с Nvidia K80 GPU и 12GB видеопамяти. Через несколько дней я перешёл на модель с двумя GPU, а потом и на 4 GPU. У неё было четыре Nvidia T4 Tensor Core GPU с 16 Gb памяти в каждой (а ещё 48 CPU и 192 RAM, которые по большей части простаивали).
За две недели работы я получил счёт в $522. Несомненно, я потратил довольно большую сумму за удобство с арендой компьютера. Тора рассказал мне, что на текущий момент наиболее выгодным вариантом железа для дипфейка является карта Nvidia GTX 1070 или 1080 с 8 Гб памяти. Стоит такая б/у карта несколько сотен долларов. Одна карточка 1080 не обучит нейросеть так быстро, как четыре моих GPU, однако если вы готовы подождать несколько недель, то вы получите схожие результаты.
Рабочий процесс в Faceswap состоит из трёх базовых шагов:
- Извлечение: порезать видео на кадры, найти лица в каждом кадре, вывести хорошо выровненные и тщательно обрезанные изображения каждого лица.
- Обучение: использовать полученные изображения для обучения дипфейк-нейросети. Она принимает изображение лица одного человека и выдаёт изображение лица другого человека с тем же выражением, освещением и в той же позе.
- Преобразование: применить модель, обученную на предыдущем шаге, к определённому видео, чтобы выдать дипфейк. После обучения модели её можно будет применять к любому видео, на котором присутствуют те люди, на лицах которых она обучалась.
Для каждого из трёх шагов требуется совершенно различное количество времени от человека и машины. ПО, извлекающее изображения, работает несколько минут, однако для проверки результатов человеку могут потребоваться часы. ПО отмечает все лица в каждом изображении, а также довольно много ложных срабатываний. Для получения хороших результатов человеку нужно пройти по всем результатам, удаляя ненужные лица и всё, что ПО приняло за лицо.
Обучение же легко настроить, и оно практически не требует человеческого участия. Однако для получения хороших результатов могут потребоваться дни или даже недели компьютерного времени. Я начал обучать свою итоговую модель 7 декабря, и она работала до 13 декабря. Возможно, что после ещё одной недели работы качество моего дипфейка улучшилось бы. И это ещё я использовал своего облачного монстра с четырьмя передовыми графическими картами. Если вы работаете на своём компьютере с единственным GPU меньшей мощности, на обучение хорошей модели у вас может уйти много недель.
Итоговый шаг, преобразование, проходит быстро и для человека, и для компьютера. Получив подходящим образом обученную модель, вы можете выдать дипфейк-видео меньше, чем за минуту.
Как работают дипфейки
Перед описанием процесса обучения Faceswap нужно пояснить, как работает технология, лежащая в её основе.
В сердце Faceswap — и других ведущих программных пакетов для создания дипфейков — находится автоэнкодер. Это нейросеть, обученная принимать на вход изображение и выдавать идентичное изображение. Само по себе это умение может быть не таким уж полезным, но, как мы увидим далее, это ключевой строительный кирпичик в процессе создания дипфейка.
Автоэнкодер структурирован по принципу двух воронок, соединённых узким концом. С одной стороны сети находится энкодер, принимающий изображение и сжимающий его до небольшого числа переменных. В модели, которую я использовал в Faceswap, это 1024 32-битных числа с плавающей запятой. С другой стороны нейросети находится декодер. Он берёт это компактное представление, известное, как «латентное пространство», и пытается развернуть его, получив изначальное изображение.
Искусственно ограничение количества данных, передаваемых от энкодера к декодеру, заставляет две этих сети разработать компактное представление человеческого лица. Энкодер — это что-то вроде алгоритма сжатия с потерями, который пытается сохранить как можно больше информации о лице при ограничениях на объём хранилища. Латентное пространство должно каким-то образом извлечь важные детали, например, в какую сторону смотрит субъект, открыты у него глаза или закрыты, улыбается он или хмурится.
Важно, что автоэнкодеру нужно сохранить только те особенности лица, которые меняются во времени. Ему не нужно хранить неизменные вещи тип цвета глаз или формы носа. Если на каждой фотографии Цукерберга у него голубые глаза, тогда декодер его сети обучится автоматически рисовать его лицо с голубыми глазами. Нет нужды запихивать в тесное латентное пространство информацию, не меняющуюся при переходе от одного изображения к другому. Как мы увидим далее, то, что автоэнкодеры по-разному относятся к постоянным и меняющемся чертам лица, крайне важно для их способности выдавать дипфейки.
Каждому алгоритму для обучения нейросети нужен какой-то способ оценить качество работы сети, чтобы его можно было улучшить. Во многих случаях это делается через обучение с учителем, когда человек обеспечивает правильный ответ для каждого элемента из набора обучающих данных. Автоэнкодеры работают по-другому. Поскольку они просто пытаются воспроизвести собственные входные данные, обучающее ПО может судить об их качестве работы автоматически. На жаргоне машинного обучения это называется обучением без учителя.
Как и любая нейросеть, автоэнкодеры в Faceswap обучаются при помощи обратного распространения. Обучающий алгоритм скармливает определённое изображение в нейросеть и смотрит, какие пиксели на выходе не соответствуют входу. Затем он подсчитывает, какие из нейронов последнего слоя внесли наибольший вклад в ошибки и немного подправляет параметры каждого нейрона так, чтобы он выдавал результаты получше.
Затем эти ошибки распространяются обратно, к предыдущему слою, где параметры каждого нейрона подправляются вновь. Ошибки распространяются таким способом всё дальше назад, пока каждый из параметров нейросети — как у энкодера, так и у декодера — не окажутся исправленными.
Затем обучающий алгоритм скармливает ещё одно изображение сети, и весь процесс повторяется снова. Могут понадобиться сотни тысяч таких повторов для того, чтобы получился автоэнкодер, хорошо воспроизводящий собственный вход.
ПО для дипфейка работает, параллельно обучая два автоэнкодера, один для оригинального лица, а второй — для нового. Во время процесса обучения каждому автоэнкодеру выдают изображения только одного человека, и он обучается выдавать изображения, очень похожие на оригинал.
Есть, однако, подвох: обе сети используют один и тот же энкодер. Декодеры — нейроны в правой части сети — остаются раздельными, и каждый из них обучается выдавать разное лицо. Но нейроны в левой части сети имеют общие параметры, меняющиеся каждый раз, когда обучается любой из автоэнкодеров. Когда сеть Цукерберга обучается на лице Цукерберга, это меняет половину сети, принадлежащую энкодеру и в сети для Дейты. Каждый раз, когда сеть Дейты обучается на лице Дейты, энкодер Цукерберга наследует эти изменения.
В итоге у двух автоэнкодеров есть один общий энкодер, способный «считывать» либо лицо Цукерберга, либо лицо Дейты. Цель энкодера в том, чтобы использовать одинаковое представление таких вещей, как угол наклона головы или расположение бровей, получил ли он на вход фото Цукерберга или фото Дейты. А это, в свою очередь, означает, что когда вы сжали лицо при помощи энкодера, его можно распаковать при помощи любого декодера.
Итак, обучив таким способом пару автоэнкодеров, остаётся простой шаг создания дипфейка: вы меняете декодеры местами. Вы кодируете фото Цукерберга, но используете декодер Дейты на шаге декодирования. В итоге получается реконструированная фотография Дейты –, но с тем же положением головы и выражением лица, как и у оригинальной фотографии Цукерберга.
Помните, я упоминал, что латентное пространство схватывает переменные черты лица человека — выражение, направление взгляда, расположение бровей –, а такие постоянные вещи, как цвет глаз или форма рта выдаёт декодер. Это значит, что если вы закодируете изображение Цукерберга, а потом декодируете его при помощи декодера Дейты, вы получите лицо с постоянными чертами Дейты — к примеру, форму лица –, но с выражением и ориентацией оригинального лица Цукерберга.
Применяя эту технику к последовательным кадрам видео с Цукербергом, вы получите новое видео, где лицо Дейты исполняет те же движения — улыбается, моргает, поворачивает голову — которые делал Цукерберг в оригинальном видео.
Эта ситуация симметрична. Когда вы обучаете нейросеть получать фото Цукерберга и выдавать фото Дейты, вы одновременно обучаете её получать фото Дейты и выдавать фото Цукерберга. Инструмент преобразования видео из Faceswap — последний шаг в процессе создания дипфейка — включает полезную галочку «поменять модели местами», позволяющую пользователю поменять местами декодеры. В итоге вместо того, чтобы подставлять лицо Дейты на место лица Цукерберга, программа делает противоположное, выдавая очень смешные видео типа такого:
Обучающие данные
На практике получить хорошие результаты при создании дипфейка нелегко.
Как я уже упомянул, я набрал семь минут видео для Дейты и девять минут для Цукерберга. Затем я использовал инструмент извлечения изображений из Faceswap для нарезки видео и получения обрезанных изображений лиц обоих мужчин. В видео содержится примерно по 30 кадров в секунду, однако я извлекал лишь каждый шестой — эту практику рекомендуют в документации по Faceswap. Всё оттого, что разнообразие изображений значит больше, чем просто их количество, и сохранение каждого кадра привело бы к получению огромного количества очень похожих изображений.
Инструмент извлечения Faceswap выдал достаточно много ложных срабатываний. Также он обнаруживал реальные лица на заднем фоне некоторых кадров. Пару часов я вручную удалял все извлечённые фотографии, не принадлежавшие ни одному из двух моих подопытных. В итоге я получил 2598 изображений лица Дейты и 2224 изображения лица Цукерберга.
И в этот момент, наконец, настало время перейти к реальному обучению модели. Сейчас у Faceswap в комплекте есть 10 различных алгоритмов создания дипфейка, поддерживающих разные размеры изображений и требующие разных вычислительных мощностей. Среди самых неприхотливых есть «легковесная» модель, работающая с изображениями лиц не более 64 пикселей размером. Её можно запускать на машине, имеющей не более 2 Гб видеопамяти. Другие модели работают с изображениями размером 128, 256 или даже 512 пикселей — однако требуют гораздо больше видеопамяти, а также больше времени на обучение.
Я начал обучать модель DFL-SAE, полученную на основе алгоритмов от DeepFaceLab. Однако в документации Faceswap было предупреждение, что эта модель страдает от «утечки идентичности», при которой некоторые черты одного лица могут просачиваться в другое. Мне показалось, что я видел что-то подобное в паре первых пробных видео, поэтому через день я переключился на модель Villain, работающую с изображениями размером 128 пикселей. В руководстве Faceswap её описывают как очень требовательную к VRAM, и как «хороший выбор для желающих получить модель более высокого разрешения без подстройки каких бы то ни было параметров».
Затем я подождал. И ещё подождал. Процесс обучения всё ещё не закончился, когда в пятницу наступил мой дедлайн — и это после шести дней обучения. На тот момент моя модель выдавала достаточно неплохой дипфейк. Скорость прогресса замедлялась, но возможно, что у меня получился бы результат получше, будь у меня ещё неделя компьютерного времени.
Faceswap хорошо приспособлено для долгой вычислительной работы. Если вы запускаете команду на обучение из графического интерфейса, интерфейс программы регулярно обновляет экран предварительного просмотра, где видны примеры того, как ПО создаёт портреты Дейты и Цукерберга. Если вы предпочитаете вести обучение из командной строки, это тоже возможно. В интерфейсе Faceswap есть полезная кнопка «генерировать», выдающая точную команду, которую нужно выполнить для обучения модели с текущими настройками, сделанными в интерфейсе.
Насколько хорошо получился дипфейк?
В процессе обучения Faceswap постоянно выводит числовую оценку «потерь» для каждого из двух автоэнкодеров. Эти оценки показывают, насколько хорошо автоэнкодер Цукерберга может воспроизводить фото Цукерберга — и насколько хорошо автоэнкодер Дейты может воспроизводить фото Дейты. И эти числа всё ещё уменьшались, когда в пятницу я остановил обучения, хотя скорость прогресса значительно замедлилась.
Конечно, на самом-то деле нам важно, насколько хорошо декодер Дейты может превратить лицо Цукерберга в лицо Дейты. Мы не знаем, как «должен» выглядеть конечный результат, поэтому никак нельзя измерить качество работы в точных цифрах. Лучшее, что мы можем сделать — это рассматривать видео и решать, выглядит ли оно реалистично.
Видео выше показывает качество дипфейка на четырёх этапах процесса обучения. Видео за 10 и 12 декабря показывают частично обученную модель Villain. Видео от 6 декабря слева вверху — это ранний тест с другой моделью. Справа внизу — итоговый результат. В процессе обучения детали его лица становились всё чётче и правдоподобнее.
9 декабря, после трёх дней обучения я опубликовал предварительный ролик на внутреннем канале редакции в слаке. Видео было похоже на то, что расположено в левом верхнем углу. Наш гуру дизайна Аурих Лоусон отреагировал на него язвительно.
«В целом выглядит хреново», — написал он, добавив, что оно «не выглядит убедительным. Жду одно из тех видео, которые не выглядят поддельными».
Думаю, что в его критике есть рациональное зерно. Я удивился тому, как быстро Faceswap смогла создавать изображения лиц, которые очень сильно напоминали Брента Спайнера, больше чем Цукерберга. Однако, если присмотреться, вы увидите характерные признаки цифрвого обмана.
На некоторых кадрах граница между поддельным лицом Дейты и головой Цукерберга выглядит не совсем правильно. Иногда видно, как бровь Цукерберга выглядывает из-под лица Дейты. В других местах края поддельного лица закрывают несколько пикселей на ушах Цукерберга. Эти проблемы с композицией, возможно, получится исправить в ручной постобработке человеком –, но кому-то понадобиться прокручивать видео кадр за кадром и подправлять маску для каждого.
Однако более фундаментальная проблема состоит в том, что алгоритмы дипфейка пока ещё не в состоянии достаточно хорошо воспроизводить мельчайшие подробности человеческих лиц. Это довольно очевидно, если посмотреть параллельно на начальное и конечное видео. Faceswap удивительно неплохо передал общую структуру лица Дейты. Но даже после недели тренировки лицо выглядит размытым, и важных деталей в нём не хватает. К примеру, ПО для дипфейков с трудом справляется с рисованием зубов человека. Иногда зубы становятся явно видны, а в следующем кадре они пропадают, оставляя черноту.
Одна из основных причин этого в том, что задача Faceswap экспоненциально усложняется при повышении разрешения. Автоэнкодеры неплохо справляются с изображениями размером 64×64 пикселя. Но воспроизводить более мелкие детали изображений 128×128 пикселей — не говоря уже об изображениях размером 256 пикселей или более — уже гораздо сложнее. Возможно, это одна из причин того, почему наиболее впечатляющие дипфейки имеют довольно широкий угол зрения, без крупных планов лиц.
Однако не стоит считать это фундаментальным ограничением технологии дипфейка. В ближайшие годы исследователи вполне могут разработать технологии, способные преодолеть эти ограничения.
Часто основу ПО для дипфейка ошибочно описывают как генеративно-состязательные сети (ГСС), или такие нейросети, которые позволяют ПО «представлять» несуществующих людей, объекты или ландшафты. На самом деле дипфейки работают при помощи автоэнкодеров. Однако последние достижения технологии ГСС говорят о том, что у дипфейков ещё есть возможности для улучшения.
ГСС, впервые появившиеся в 2014 году, могли выдавать только грубые изображения небольшого разрешения. Но в последнее время исследователи придумали, как создавать ГСС, выдающие фотореалистичные изображения размером до 1024 пикселей. Конкретные техники, используемые в этих научных работах, возможно, и неприменимы для создания дипфейка, но легко представить, как кто-либо разработает сходную технологию для автоэнкодеров — или, возможно, совершенно новую архитектуру нейросети, предназначенную для замены лиц.
Перспектива дипфейков
Рост популярности дипфейков очевидно вызывает тревогу. До недавнего времени люди могли с достаточно легко принимать видеозапись с человеком за чистую монету. Появление ПО для создания дипфейков и других цифровых инструментов привело к тому, что мы теперь относимся к видеозаписям со скептицизмом. Если мы видим ролик, в котором человек утверждает что-то скандальное — или раздевается — мы должны рассмотреть возможность того, что некто подделал это видео с целью дискредитации того человека.
Однако мой эксперимент подчёркивает ограничения технологии дипфейков — по крайней мере, в текущем виде. Требуются обширные знания и усилия для создания полностью убедительного виртуального лица. У меня этого не получилось, и я не уверен, что кто-то уже смог изготовить дипфейк-видео, реально неотличимое от настоящего.
Более того, сегодня инструменты типа Faceswap занимаются лишь заменой лиц. Они не меняют лоб, волосы, руки и ноги. И даже если лицо будет идеальным, возможно будет определить дипфейк-видео на основе элементов, которые выглядят не так, как надо.
Однако эти ограничения технологии дипфейков могут и исчезнуть. Через несколько лет ПО, возможно, научится выдавать такие видео, которые невозможно будет отличить от настоящих. Что тогда?
В данном случае полезно будет помнить, что другие типы носителей уже давно легко подделать. Тривиальной задачей будет сделать снимок экрана с электронным письмом, где кто-то пишет что-то, что он на самом деле не писал. И это не привело к росту количества оборванных карьер из-за подложных емейлов, а также не дискредитировало снимки экрана с письмами как доказательства, используемые в публичных обсуждениях.
Но люди знают, что емейлы можно подделать, и ищут дополнительные подтверждения в подобных случаях. Какая цепочка событий привлекла к письмам внимание общественности? Получали ли другие люди копии такого емейла во время его предполагаемого написания? Признал ли предполагаемый автор письма своё авторство, или заявляет о подлоге? Ответы на такие вопросы помогают людям решать, насколько серьёзно можно относиться к опубликованному письму.
Один раз можно обмануться
Так же и с видеороликами. Возможно, будет какой-то краткий период времени, когда обманщики смогут уничтожить карьеру человека, опубликовав видео, где он говорит или делает что-то возмутительное. Но вскоре общество научится относиться к видеозаписям со скептицизмом, если только у ролика не будет какого-то документального подтверждения, свидетелей или других подтверждающих факторов.
Думаю, что это сработает даже в случаях наиболее возмутительных злоупотреблений технологией дипфейка: вставкой лица человека в порнографический ролик. Это очевидно неуважительно и неприемлемо. Но люди волнуются, что такие видео могут уничтожить репутацию и карьеру. Думаю, что это не так.
Ведь в интернете можно найти полно изображений известных личностей (в основном, женщин), головы которых при помощи фотошопа приставлены к телам порнозвёзд. Страдания женщин понятны. Но общественность не заключает автоматически, что эти женщины позировали нагишом — мы знаем о существовании фотошопа и о возможности создания поддельных фотографий.
То же касается и дипфейк-порнографии. Очевидно, что нехорошо изготавливать поддельное порно с вашим участием. Но выпуск дипфейк-видео с каким-то человеком не будет иметь такого разрушительного эффекта, как реальная видеозапись секса. В отсутствие свидетельств подлинности ролика общественность придёт к выводу, что он поддельный.
Мэтт Тора, автор Faceswap, говорит мне, что это соображение было одной из составляющих для его мотивации к созданию пакета. Он считает, что ПО для подмена лиц неизбежно будут разрабатывать. Он надеется, что создав удобный для пользователя инструмент для подмены лиц с открытым кодом, он поможет снять завесу тайны с этой технологией и рассказать общественности о её возможностях и ограничениях. А это, в свою очередь, поможет нам быстрее прийти к той точке, где общественность будет с соответствующей долей скептицизма относиться к видеороликам, которые могут оказаться поддельными.
В долгосрочной перспективе мы рискуем тем, что маятник отношения общественности слишком сильно качнётся в другую сторону, и возможность создания дипфейков уничтожит веру в доказательную силу видеозаписей. Некоторые политики уже взяли в привычку отнекиваться от критики со стороны СМИ, как от «ложных новостей». Эта тактика будет становиться более эффективной с ростом информированности общества по поводу технологии дипфейков.