Научите вас, как использовать Deepfakes, чтобы изменить свое лицо

искусственный интеллект

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

Как использовать Deepfakes для смены лица?

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

git clone https://github.com/deepfakes/faceswap.git 

Завершите пакет зависимостей:

  • pip install tqdm
  • pip install cv2
  • pip install opencv-contrib-python
  • pip install dlib
  • pip install keras
  • pip install tensorflow
  • pip install tensorflow-gpu (если на машине есть gpu)
  • pip install face_recognition

собирать образцы

Здесь я выбираю образец Юи Арагаки, и мне потребовалось много времени, чтобы загрузить 100 картинок:

 

“ZAO”凉凉!教你用Deepfakes换脸

 

 

Образец другого человека - Кэри Маллиган.Поскольку найти картинки было действительно хлопотно, он напрямую перехватил видео в "Великом Гэтсби", а затем с помощью ffmpeg преобразовал его в картинки, там около 70 картинок.

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

захват лица

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

./faceswap.py извлечь –i входная_папка/ –o выходная_папка/

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

 

“ZAO”凉凉!教你用Deepfakes换脸

 

 

После завершения процесса захвата лица мы можем получить все изображения лиц. Здесь мы можем вручную отфильтровать неподходящие образцы (49_1.jpg на следующем рисунке) и удалить их.

 

“ZAO”凉凉!教你用Deepfakes换脸

 

 

Алгоритм распознавания лиц HOG

Вот краткое упоминание об алгоритме выделения черт лица HOG (Histogram of Oriented Gradient).

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

Простой процесс обнаружения лиц здесь выглядит следующим образом:

① Сначала используйте черно-белое представление изображения, чтобы упростить процесс (поскольку нам не нужны данные о цвете для обнаружения лица).

 

“ZAO”凉凉!教你用Deepfakes换脸

 

 

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

Например, как показано на рисунке ниже, направление от светлого к темному вокруг этой точки — от нижнего левого угла к верхнему правому углу, поэтому направление его градиента показано следующей стрелкой:

 

“ZAO”凉凉!教你用Deepfakes换脸

 

 

③ После завершения предыдущего шага все пиксели изображения могут быть представлены соответствующим градиентом. Эти стрелки указывают на тенденцию от светлого к темному по всему изображению.

Если анализировать эти пиксели напрямую (то есть по цвету), то у тех очень ярких точек и очень темных точек их значения (значения RGB) должны сильно различаться.

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

 

“ZAO”凉凉!教你用Deepfakes换脸

 

 

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

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

 

“ZAO”凉凉!教你用Deepfakes换脸

 

 

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

“ZAO”凉凉!教你用Deepfakes换脸

 

начать обучение

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

./faceswap.py train -A faceA_folder/ -B faceB_folder -m models/ 

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

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

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

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

 

“ZAO”凉凉!教你用Deepfakes换脸

 

 

Конвертировать лица

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

./faceswap.py –i input_images_folder/ -o output_images_folder/ -m models/ 

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

ffmpeg –i video.mp4 output/video-frame-%d.png 

Затем выполните операцию преобразования лица. Наконец, объедините преобразованные изображения лиц в видео:

ffmpeg –i video-frame-%0d.png -c:v libx264 -vf “fps=25, format=yuv420p” out.mp4 

Ниже приведены два изображения смены лиц (образец A, 110 изображений; образец B, 70 изображений, время обучения 6 часов):

 

“ZAO”凉凉!教你用Deepfakes换脸

 

 

“ZAO”凉凉!教你用Deepfakes换脸

 

 

Ну... эффект нехороший... Предлагаю увеличить размер выборки и увеличить время обучения.

Процесс преобразования лица

Кратко расскажем о процессе конвертации лиц. Здесь используется AutoEncoder (сверточная нейронная сеть), который реконструирует изображение на основе входного изображения (то есть регенерирует изображение на основе изображения):

 

“ZAO”凉凉!教你用Deepfakes换脸

 

 

Здесь модель AutoEncoder: во-первых, использует Encoder для обработки изображения (функции извлечения сверточной нейронной сети) и представляет изображение в сжатом виде. Затем Декодер восстанавливает изображение.

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

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

Существует функция ошибок (функция потерь) для оценки качества преобразования Процесс обучения модели заключается в минимизации функции потерь (значение).

Первая сеть обучается только на изображении A, а вторая сеть обучается только на изображении B. Кодировщик учится преобразовывать изображение в значения черт лица.

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

 

“ZAO”凉凉!教你用Deepfakes换脸

 

 

“ZAO”凉凉!教你用Deepfakes换脸

 

 

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

Таким образом, в конце концов, мы используем лицо, полученное из изображения B, используем Encoder для извлечения признаков, а затем используем Decoder A для восстановления, мы получим лицо A и выражение лица B.