Изменения

Перейти к: навигация, поиск

Генерация дипфейков с помощью нейронных сетей

745 байт добавлено, 17:34, 10 января 2021
Нет описания правки
'''Дипфейк''' (''англ. дипфейкDeepfake'') {{---}} результат работы ряда алгоритмов для синтеза изображений человеческого лица или голоса. Алгоритмы, применяемые для решения данной задачи основаны на Порождающе-состязательных сетях. Современные алгоритмы позволяют генерировать не только лицо человека, но и его голос. C таким примером можно ознакомится по ссылке [https://www.youtube.com/watch?v=2svOtXaD3gg Home Stallone DeepFake]
[[Файл:Deep_fake_title_crop.png|thumb|400px|Примеры дипфейков #1]]
Задача замены лиц или генерация Deepfake изображений состоит в том, чтобы перенести лицо с исходного (source) изображения на нужное (target) изображение. Такой перенос должен быть бесшовным и незаметным человеческому глазу.
Одним из этапов замены является реконструкция лица. Реконструкция лица заключается в изменении лица из source изображения, так чтобы мимика и любая лицевая геометрия была соблюдена и соответствовала target изображению.
Методы, решавшие данную задачу в прошлом, были основаны на детектировании ключевых точек лица и далее используя данные точки, с помощью триангуляции Делоне<ref name=Delaunay>[https://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D1%80%D0%B8%D0%B0%D0%BD%D0%B3%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_%D0%94%D0%B5%D0%BB%D0%BE%D0%BD%D0%B5 Триангуляция Делоне]</ref> строилась сетка(меш) лица и все треугольники из source изображения масштабировались в соответствии с target изображением. В основе современных алгоритмов лежат Генеративно-Состязательные сети с различными модификациями.Так же некоторые из используемых методов основаны на попытке аппроксимации некого распределения признаков. Данные методы пытаются вычислить соответствующее распределение и переносят с помощью нейронных сетей эти скрытые представления. В результате генерируется новое фотореалистичное лицо, которое соответствует необходимым характеристикам и метрикам. Одним из известных алгоритмов в этой области является Face2Face<ref name=Face2Face>[http://www.graphics.stanford.edu/~niessner/thies2016face.html Face2Face]</ref>, метод вычисляет меш лица и с помощью алгоритма Морфа 3D модели лица(''англ. 3D morphable face model'')<ref name=3DmorphableFaceModel>[https://arxiv.org/pdf/1909.01815.pdf 3D Morphable Face Model]</ref> переносит геометрию.
Методам на основе Генеративно-состязательных сетей не требуется никакие многоуровневые эвристические методы, они берут исходное изображение и сразу делают перенос пропуская промежуточные шаги.
Такой генератор обучается с помощью следующей функцию потерь:
$\displaystyle Loss(G_r) = \lambda_{stepwise} Loss_{rec}(I_{r_{n}}, I_{t}) + \lambda_{rec}Loss_{rec}(I_{r}, I_{t}) + \lambda_{adv}Loss_{adv} + \lambda_{seg}Loss_{pixel}(S_r, S_t)$ $\displaystyle Loss(G_s) = Loss_{CE} + \lambda_{reenact}Loss_{pixel}(S_t, S_{t} {r})$ $\displaystyle Loss_{perc}(x, y) = \sum_{i = 1}^{n} \frac{1}{C_i H_i W_i} || F_i(x) - F_i(y) ||_1 $ $\displaystyle Loss_{pixel}(x, y) = || x - y ||_1 $ $\displaystyle Loss_{rec}(x, y) = \lambda_{perc} Loss_{perc}(x, y) + \lambda_{pixel} Loss_{pixel}(x, y)$ $\displaystyle Loss_{adv}(G, D) = \min_{G} \max_{D_1, ..., D_n} \sum_{i = 1}^{n} Loss_{GAN}(G, D_i)$ $\displaystyle Loss_{GAN}(G, D) = \mathbb{E}_{(x, y)}[\log D(x, y)] + \mathbb{E}_{x} [\log(1 - D(x, G(x)))]$
$Loss(G_s) = Loss_{CE} + \lambda_{reenact}Loss_{pixe}(S_t, S_{t} {r})$
Где $G_r$ {{---}} генератор переноса геометрии, $G_s$ {{---}} генератор сегментации лица.
Пусть $x_{i_{1}}, x_{i_{2}}, x_{i_{3}}$ будут трисом(треугольником) $T$ и $I_{s_{i_{1}}}, I_{s_{i_{2}}}, I_{s_{i_{3}}}$ {{---}} соответствующие лица. Необходимо вычислить барицентрические координаты<ref name=bari>[https://ru.wikipedia.org/wiki/%D0%91%D0%B0%D1%80%D0%B8%D1%86%D0%B5%D0%BD%D1%82%D1%80%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B0%D1%82%D1%8B Барицентрические координаты]</ref> $\lambda_{1}, \lambda_{2}, \lambda_{3}$ от $x_t$ относительно $x_{i_{1}}, x_{i_{2}}, x_{i_{3}}$. Тогда результат интерполяции:
$\displaystyle I_r = \sum_{k=1} ^{3} \lambda_k G_r(I_{s_{i_{k}}}; H(p_t))$
Где $p_t$ 2D ключевая точка лица $F_t$.
== Вписывание лица ==
Поскольку из-за разницы в углах поворота или разной прически сегментированные маски target и source изображений могут отличаться видимыми регионами. Например, поэтому у одной маски длинная прическа, которая закрывает пол лица, а вторая маска лысая. Поэтому нам необходимо "дорисовать" или "стереть" участки, которые не могут быть перенесены напрямую.
Чтобы решить данную задачу мы обучим еще одну модель $G_c$. $G_c$ принимает в себя лицо $F_s$, такое что все необходимые участки будут дорисованы, а ненужные удалены.
Функция потерь такой сети
$\displaystyle Loss(G_c) = \lambda_{rec}Loss_{rec}(I_c, I_t) + \lambda_{adv}Loss_{adv}$
== Отрисовка полученного лица ==
Пусть $I_t$ будет исходным лицом, а $I_{r} {t}$ будет нужным нам лицом для переноса и $S_t$ маской сегментации. Тогда используя уравнение Пуассона <ref name=Poisson>[https://en.wikipedia.org/wiki/Poisson%27s_equation Уравнение Пуассона]</ref>, мы можем выполнить цветокоррекцию следующим образом
$\displaystyle P(I_t;I_{r} {t};S_t) = arg min ||\nabla f - \nabla I {t}_{r}|| {2}_{2}$
$\displaystyle f(i, j) = I_t(i, j), \forall S_t(i, j) = 0$
$\nabla$ {{---}} оператор взятия градиента.
$\displaystyle Loss(G_b) = \lambda_{rec}Loss_{rec}(I_t;I_{r} {t};S_t), P(I_t;I_{r} {t};S_t)) + \lambda_{adv}Loss_{adv}$
== Данные для обучения и процесс обучения ==
* [[Нейронные сети, перцептрон]]
* [[Генерация объектов]]
* [[К-d деревья и перечисление точек в произвольном прямоугольнике (статика)]]
==Примечания==
30
правок

Навигация