Computer vision, Нейронные сети

«Делай как я!» — изучаем имперсонатор

Время прочтения: 5 мин.

В настоящее время самые интересные и перспективные разработки в области AI связаны с нейронными сетями.

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

Широкую известность в интернете получили видео, созданные с помощью технологий Deep fake, в которых лица людей заменяются на совершенно другие. Иногда такие работы выглядят очень правдоподобно.

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

В ноябре 2020 года технологии Deep fake получили «долгожданное» продолжение: группа разработчиков из Китая создала инструмент, с помощью которого можно наложить заданные движения на любую личность с сохранением фона.

Чтобы успешно бороться с цифровым мошенничеством следует хорошо знать своего потенциального «врага». Поэтому предлагаем ознакомиться с функционалом Impersonator++. На вход он получает фото личности, которую будут «оживлять», и референсное видео с заданным движением. А на выход подаёт итоговое видео:

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

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

Чтобы установить Impersonator++ на ПК необходим либо Linux либо Windows, CUDA, gcc 7.5+, ffmpeg (ffprobe). Прочие технические требования можете прочитать на ресурсе проекта: https://www.impersonator.org. Также по этой ссылке можно найти статью разработчиков, которая раскрывает технологию работы Impersonator++.

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

Важным является формат и синтаксис обращения к инструменту. Для установки и настройки следует выполнить несколько команд.

!apt-get install ffmpeg # установка ffmpeg
import os
os.environ["CUDA_HOME"] = "/usr/local/cuda-10.1" # задаём CUDA_HOME
!echo $CUDA_HOME

Для установки клонируем репозиторий с github и устанавливаем:

!git clone https://github.com/iPERDance/iPERCore.git
cd /content/iPERCore/
!python setup.py develop

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

!wget -O assets/checkpoints.zip "https://download.impersonator.org/iper_plus_plus_latest_checkpoints.zip"
!unzip -o assets/checkpoints.zip -d assets/
!rm assets/checkpoints.zip

!wget -O assets/samples.zip  "https://download.impersonator.org/iper_plus_plus_latest_samples.zip"
!unzip -o assets/samples.zip -d  assets
!rm assets/samples.zip

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

import os
import os.path as osp
import platform
import argparse
import time
import sys
import subprocess
from IPython.display import HTML
from base64 import b64encode

далее задаём директории и значения по умолчанию для параметров:

gpu_ids = "0"

# размер изображения
image_size = 512
# число картинок-источников изображения по умолчанию считается 2, но значение обновится, если фактическое окажется меньше num_source
num_source = 2
# директория с ресурсами, моделями и исполняемыми файлами, которые прежде необходимо скачать
assets_dir = "/content/iPERCore/assets"

# директория для сохранения результатов
output_dir = "./results"

# символическая ссылка с актуальной директории с ресурсами на текущую директорию
work_assets_dir = os.path.join("./assets")

if not os.path.exists(work_asserts_dir):
    os.symlink(osp.abspath(assets_dir), osp.abspath(work_assets_dir),
               target_is_directory=(platform.system() == "Windows"))

cfg_path = osp.join(work_assets_dir, "configs", "deploy.toml")

И, наконец, формируем имитацию движения на основе разных фото:

model_id = “ident_remove_mask_multi”

# путь к картинке, которая ляжет в основу
src_path = “\”path?=/persons/person1.png\””

# путь к видео с референсным, интересующим нас, движением
ref_path = "\"path?=/movement/remove_the_mask/act1.mp4\""

!python -m iPERCore.services.run_imitator  \
  --gpu_ids     $gpu_ids       \
  --num_source  $num_source    \
  --image_size  $image_size    \
  --output_dir  $output_dir    \
  --model_id    $model_id      \
  --cfg_path    $cfg_path      \
  --src_path    $src_path      \
  --ref_path    $ref_path

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

Слева расположена исходная фотография, посередине – кадр из референсного видео, справа – кадр из итогового видео.

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

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

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

Советуем почитать